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:
11
src/App.zig
11
src/App.zig
@@ -26,6 +26,7 @@ const Snapshot = @import("browser/js/Snapshot.zig");
|
|||||||
const Platform = @import("browser/js/Platform.zig");
|
const Platform = @import("browser/js/Platform.zig");
|
||||||
const Telemetry = @import("telemetry/telemetry.zig").Telemetry;
|
const Telemetry = @import("telemetry/telemetry.zig").Telemetry;
|
||||||
const RobotStore = @import("browser/Robots.zig").RobotStore;
|
const RobotStore = @import("browser/Robots.zig").RobotStore;
|
||||||
|
const WebBotAuth = @import("browser/WebBotAuth.zig");
|
||||||
|
|
||||||
pub const Http = @import("http/Http.zig");
|
pub const Http = @import("http/Http.zig");
|
||||||
pub const ArenaPool = @import("ArenaPool.zig");
|
pub const ArenaPool = @import("ArenaPool.zig");
|
||||||
@@ -40,6 +41,7 @@ telemetry: Telemetry,
|
|||||||
allocator: Allocator,
|
allocator: Allocator,
|
||||||
arena_pool: ArenaPool,
|
arena_pool: ArenaPool,
|
||||||
robots: RobotStore,
|
robots: RobotStore,
|
||||||
|
web_bot_auth: ?WebBotAuth,
|
||||||
app_dir_path: ?[]const u8,
|
app_dir_path: ?[]const u8,
|
||||||
shutdown: bool = false,
|
shutdown: bool = false,
|
||||||
|
|
||||||
@@ -52,7 +54,14 @@ pub fn init(allocator: Allocator, config: *const Config) !*App {
|
|||||||
|
|
||||||
app.robots = RobotStore.init(allocator);
|
app.robots = RobotStore.init(allocator);
|
||||||
|
|
||||||
app.http = try Http.init(allocator, &app.robots, config);
|
if (config.webBotAuth()) |wba_cfg| {
|
||||||
|
app.web_bot_auth = try WebBotAuth.fromConfig(allocator, &wba_cfg);
|
||||||
|
} else {
|
||||||
|
app.web_bot_auth = null;
|
||||||
|
}
|
||||||
|
errdefer if (app.web_bot_auth) |wba| wba.deinit(allocator);
|
||||||
|
|
||||||
|
app.http = try Http.init(allocator, &app.robots, &app.web_bot_auth, config);
|
||||||
errdefer app.http.deinit();
|
errdefer app.http.deinit();
|
||||||
|
|
||||||
app.platform = try Platform.init();
|
app.platform = try Platform.init();
|
||||||
|
|||||||
@@ -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("browser/WebBotAuth.zig").Config;
|
||||||
|
|
||||||
pub const RunMode = enum {
|
pub const RunMode = enum {
|
||||||
help,
|
help,
|
||||||
@@ -155,9 +155,9 @@ pub fn userAgentSuffix(self: *const Config) ?[]const u8 {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ 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("../browser/Robots.zig");
|
const Robots = @import("../browser/Robots.zig");
|
||||||
const RobotStore = Robots.RobotStore;
|
const RobotStore = Robots.RobotStore;
|
||||||
|
const WebBotAuth = @import("../browser/WebBotAuth.zig");
|
||||||
|
|
||||||
const posix = std.posix;
|
const posix = std.posix;
|
||||||
|
|
||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
@@ -83,6 +85,9 @@ robot_store: *RobotStore,
|
|||||||
// Allows us to fetch the robots.txt just once.
|
// Allows us to fetch the robots.txt just once.
|
||||||
pending_robots_queue: std.StringHashMapUnmanaged(std.ArrayList(Request)) = .empty,
|
pending_robots_queue: std.StringHashMapUnmanaged(std.ArrayList(Request)) = .empty,
|
||||||
|
|
||||||
|
// Reference to the App-owned WebBotAuth.
|
||||||
|
web_bot_auth: *const ?WebBotAuth,
|
||||||
|
|
||||||
// Once we have a handle/easy to process a request with, we create a Transfer
|
// Once we have a handle/easy to process a request with, we create a Transfer
|
||||||
// which contains the Request as well as any state we need to process the
|
// which contains the Request as well as any state we need to process the
|
||||||
// request. These wil come and go with each request.
|
// request. These wil come and go with each request.
|
||||||
@@ -121,7 +126,13 @@ pub const CDPClient = struct {
|
|||||||
|
|
||||||
const TransferQueue = std.DoublyLinkedList;
|
const TransferQueue = std.DoublyLinkedList;
|
||||||
|
|
||||||
pub fn init(allocator: Allocator, ca_blob: ?Net.Blob, robot_store: *RobotStore, config: *const Config) !*Client {
|
pub fn init(
|
||||||
|
allocator: Allocator,
|
||||||
|
ca_blob: ?Net.Blob,
|
||||||
|
robot_store: *RobotStore,
|
||||||
|
web_bot_auth: *const ?WebBotAuth,
|
||||||
|
config: *const Config,
|
||||||
|
) !*Client {
|
||||||
var transfer_pool = std.heap.MemoryPool(Transfer).init(allocator);
|
var transfer_pool = std.heap.MemoryPool(Transfer).init(allocator);
|
||||||
errdefer transfer_pool.deinit();
|
errdefer transfer_pool.deinit();
|
||||||
|
|
||||||
@@ -145,6 +156,7 @@ pub fn init(allocator: Allocator, ca_blob: ?Net.Blob, robot_store: *RobotStore,
|
|||||||
.handles = handles,
|
.handles = handles,
|
||||||
.allocator = allocator,
|
.allocator = allocator,
|
||||||
.robot_store = robot_store,
|
.robot_store = robot_store,
|
||||||
|
.web_bot_auth = web_bot_auth,
|
||||||
.http_proxy = http_proxy,
|
.http_proxy = http_proxy,
|
||||||
.use_proxy = http_proxy != null,
|
.use_proxy = http_proxy != null,
|
||||||
.config = config,
|
.config = config,
|
||||||
@@ -709,6 +721,12 @@ fn makeRequest(self: *Client, conn: *Net.Connection, transfer: *Transfer) anyerr
|
|||||||
try conn.secretHeaders(&header_list, &self.config.http_headers); // Add headers that must be hidden from intercepts
|
try conn.secretHeaders(&header_list, &self.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.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);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ pub const Headers = Net.Headers;
|
|||||||
|
|
||||||
const Config = @import("../Config.zig");
|
const Config = @import("../Config.zig");
|
||||||
const RobotStore = @import("../browser/Robots.zig").RobotStore;
|
const RobotStore = @import("../browser/Robots.zig").RobotStore;
|
||||||
|
const WebBotAuth = @import("../browser/WebBotAuth.zig");
|
||||||
|
|
||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
const ArenaAllocator = std.heap.ArenaAllocator;
|
const ArenaAllocator = std.heap.ArenaAllocator;
|
||||||
@@ -45,8 +46,14 @@ allocator: Allocator,
|
|||||||
config: *const Config,
|
config: *const Config,
|
||||||
ca_blob: ?Net.Blob,
|
ca_blob: ?Net.Blob,
|
||||||
robot_store: *RobotStore,
|
robot_store: *RobotStore,
|
||||||
|
web_bot_auth: *const ?WebBotAuth,
|
||||||
|
|
||||||
pub fn init(allocator: Allocator, robot_store: *RobotStore, config: *const Config) !Http {
|
pub fn init(
|
||||||
|
allocator: Allocator,
|
||||||
|
robot_store: *RobotStore,
|
||||||
|
web_bot_auth: *const ?WebBotAuth,
|
||||||
|
config: *const Config,
|
||||||
|
) !Http {
|
||||||
try Net.globalInit();
|
try Net.globalInit();
|
||||||
errdefer Net.globalDeinit();
|
errdefer Net.globalDeinit();
|
||||||
|
|
||||||
@@ -68,6 +75,7 @@ pub fn init(allocator: Allocator, robot_store: *RobotStore, config: *const Confi
|
|||||||
.config = config,
|
.config = config,
|
||||||
.ca_blob = ca_blob,
|
.ca_blob = ca_blob,
|
||||||
.robot_store = robot_store,
|
.robot_store = robot_store,
|
||||||
|
.web_bot_auth = web_bot_auth,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +89,7 @@ pub fn deinit(self: *Http) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn createClient(self: *Http, allocator: Allocator) !*Client {
|
pub fn createClient(self: *Http, allocator: Allocator) !*Client {
|
||||||
return Client.init(allocator, self.ca_blob, self.robot_store, self.config);
|
return Client.init(allocator, self.ca_blob, self.robot_store, self.web_bot_auth, self.config);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn newConnection(self: *Http) !Net.Connection {
|
pub fn newConnection(self: *Http) !Net.Connection {
|
||||||
|
|||||||
Reference in New Issue
Block a user