mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
add support for WebBotAuth in Client
This commit is contained in:
@@ -23,7 +23,7 @@ const Allocator = std.mem.Allocator;
|
|||||||
const log = @import("log.zig");
|
const log = @import("log.zig");
|
||||||
const dump = @import("browser/dump.zig");
|
const dump = @import("browser/dump.zig");
|
||||||
|
|
||||||
const WebBotAuth = @import("browser/WebBotAuth.zig");
|
const WebBotAuthConfig = @import("network/WebBotAuth.zig").Config;
|
||||||
|
|
||||||
pub const RunMode = enum {
|
pub const RunMode = enum {
|
||||||
help,
|
help,
|
||||||
@@ -163,9 +163,9 @@ pub fn cdpTimeout(self: *const Config) usize {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn webBotAuth(self: *const Config) ?WebBotAuth {
|
pub fn webBotAuth(self: *const Config) ?WebBotAuthConfig {
|
||||||
return switch (self.mode) {
|
return switch (self.mode) {
|
||||||
inline .serve, .fetch, .mcp => |opts| WebBotAuth{
|
inline .serve, .fetch, .mcp => |opts| WebBotAuthConfig{
|
||||||
.key_file = opts.common.web_bot_auth_key_file orelse return null,
|
.key_file = opts.common.web_bot_auth_key_file orelse return null,
|
||||||
.keyid = opts.common.web_bot_auth_keyid orelse return null,
|
.keyid = opts.common.web_bot_auth_keyid orelse return null,
|
||||||
.domain = opts.common.web_bot_auth_domain orelse return null,
|
.domain = opts.common.web_bot_auth_domain orelse return null,
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ const Notification = @import("../Notification.zig");
|
|||||||
const CookieJar = @import("../browser/webapi/storage/Cookie.zig").Jar;
|
const CookieJar = @import("../browser/webapi/storage/Cookie.zig").Jar;
|
||||||
const Robots = @import("../network/Robots.zig");
|
const Robots = @import("../network/Robots.zig");
|
||||||
const RobotStore = Robots.RobotStore;
|
const RobotStore = Robots.RobotStore;
|
||||||
|
const WebBotAuth = @import("../network/WebBotAuth.zig");
|
||||||
|
|
||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
const ArenaAllocator = std.heap.ArenaAllocator;
|
const ArenaAllocator = std.heap.ArenaAllocator;
|
||||||
@@ -702,6 +703,12 @@ fn makeRequest(self: *Client, conn: *Net.Connection, transfer: *Transfer) anyerr
|
|||||||
try conn.secretHeaders(&header_list, &self.network.config.http_headers); // Add headers that must be hidden from intercepts
|
try conn.secretHeaders(&header_list, &self.network.config.http_headers); // Add headers that must be hidden from intercepts
|
||||||
try conn.setHeaders(&header_list);
|
try conn.setHeaders(&header_list);
|
||||||
|
|
||||||
|
// If we have WebBotAuth, sign our request.
|
||||||
|
if (self.network.web_bot_auth) |*wba| {
|
||||||
|
const authority = URL.getHost(req.url);
|
||||||
|
try wba.signRequest(self.allocator, &header_list, authority);
|
||||||
|
}
|
||||||
|
|
||||||
// Add cookies.
|
// Add cookies.
|
||||||
if (header_list.cookies) |cookies| {
|
if (header_list.cookies) |cookies| {
|
||||||
try conn.setCookies(cookies);
|
try conn.setCookies(cookies);
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ const libcurl = @import("../sys/libcurl.zig");
|
|||||||
|
|
||||||
const net_http = @import("http.zig");
|
const net_http = @import("http.zig");
|
||||||
const RobotStore = @import("Robots.zig").RobotStore;
|
const RobotStore = @import("Robots.zig").RobotStore;
|
||||||
|
const WebBotAuth = @import("WebBotAuth.zig");
|
||||||
|
|
||||||
const Runtime = @This();
|
const Runtime = @This();
|
||||||
|
|
||||||
@@ -42,6 +43,7 @@ allocator: Allocator,
|
|||||||
config: *const Config,
|
config: *const Config,
|
||||||
ca_blob: ?net_http.Blob,
|
ca_blob: ?net_http.Blob,
|
||||||
robot_store: RobotStore,
|
robot_store: RobotStore,
|
||||||
|
web_bot_auth: ?WebBotAuth,
|
||||||
|
|
||||||
connections: []net_http.Connection,
|
connections: []net_http.Connection,
|
||||||
available: std.DoublyLinkedList = .{},
|
available: std.DoublyLinkedList = .{},
|
||||||
@@ -205,6 +207,11 @@ pub fn init(allocator: Allocator, config: *const Config) !Runtime {
|
|||||||
available.append(&connections[i].node);
|
available.append(&connections[i].node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const web_bot_auth = if (config.webBotAuth()) |wba_cfg|
|
||||||
|
try WebBotAuth.fromConfig(allocator, &wba_cfg)
|
||||||
|
else
|
||||||
|
null;
|
||||||
|
|
||||||
return .{
|
return .{
|
||||||
.allocator = allocator,
|
.allocator = allocator,
|
||||||
.config = config,
|
.config = config,
|
||||||
@@ -212,6 +219,7 @@ pub fn init(allocator: Allocator, config: *const Config) !Runtime {
|
|||||||
.robot_store = RobotStore.init(allocator),
|
.robot_store = RobotStore.init(allocator),
|
||||||
.connections = connections,
|
.connections = connections,
|
||||||
.available = available,
|
.available = available,
|
||||||
|
.web_bot_auth = web_bot_auth,
|
||||||
.pollfds = pollfds,
|
.pollfds = pollfds,
|
||||||
.wakeup_pipe = pipe,
|
.wakeup_pipe = pipe,
|
||||||
};
|
};
|
||||||
@@ -238,6 +246,9 @@ pub fn deinit(self: *Runtime) void {
|
|||||||
self.allocator.free(self.connections);
|
self.allocator.free(self.connections);
|
||||||
|
|
||||||
self.robot_store.deinit();
|
self.robot_store.deinit();
|
||||||
|
if (self.web_bot_auth) |wba| {
|
||||||
|
wba.deinit(self.allocator);
|
||||||
|
}
|
||||||
|
|
||||||
globalDeinit();
|
globalDeinit();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const crypto = @import("../crypto.zig");
|
const crypto = @import("../crypto.zig");
|
||||||
|
|
||||||
const Http = @import("../http/Http.zig");
|
const Http = @import("../network/http.zig");
|
||||||
|
|
||||||
const WebBotAuth = @This();
|
const WebBotAuth = @This();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user