add credentials_mode for proper CORS credentials handling

This commit is contained in:
Muki Kiboigo committed 2026-09-04 06:59:39 -07:00
1 parent f31b32ac4e
commit ddfa034310
4 files changed
+75 -11

No files matched your search

+15 -5
View File
@@ -634,8 +634,8 @@ pub fn newRequest(self: *Client, req: Request, owner: ?*Owner) anyerror!*Transfe
};
owned.cookie_origin = null;
if (req.credentials) |c| {
owned.credentials = try arena.dupeZ(u8, c);
if (req.basic_auth_credentials) |c| {
owned.basic_auth_credentials = try arena.dupeZ(u8, c);
}
const raw_origin: ?[]const u8 = req.origin orelse if (owner) |o| o.origin.* else null;
@@ -1808,13 +1808,23 @@ pub const Request = struct {
// ten segments, versus a TCP handshake plus a TLS one.
const HEADERS_ONLY_DRAIN_MAX: usize = 16 * 1024;
pub const CredentialsMode = enum {
// Never send credentials, even same-origin.
omit,
// Send credentials only for same-origin requests.
same_origin,
// Always send credentials, including cross-origin.
include,
};
method: Method,
url: [:0]const u8,
body: ?[]const u8 = null,
resource_type: ResourceType,
redirect: RedirectMode = .follow,
referrer_policy: ?referrer.Policy = null,
credentials: ?[:0]const u8 = null,
basic_auth_credentials: ?[:0]const u8 = null,
credentials_mode: CredentialsMode = .same_origin,
timeout_ms: u32 = 0,
skip_cache: bool = false,
@@ -3097,7 +3107,7 @@ pub const Transfer = struct {
}
// add credentials
if (req.credentials) |creds| {
if (req.basic_auth_credentials) |creds| {
if (self._auth_challenge != null and self._auth_challenge.?.source == .proxy) {
try conn.setProxyCredentials(creds);
} else {
@@ -3282,7 +3292,7 @@ pub const Transfer = struct {
}
pub fn updateCredentials(self: *Transfer, userpwd: [:0]const u8) void {
self.req.credentials = userpwd;
self.req.basic_auth_credentials = userpwd;
}
pub const RequestHeader = struct {