From 3ec507773cf7e75dbd2347514b262d03e601f9fb Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Sat, 2 May 2026 12:10:57 +0800 Subject: [PATCH] change sameSite to string to deal with case-insensitive values --- src/cookies.zig | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/src/cookies.zig b/src/cookies.zig index 0eec6061..11ebe63f 100644 --- a/src/cookies.zig +++ b/src/cookies.zig @@ -43,7 +43,7 @@ fn _loadFromFile(session: *Session, path: []const u8) !void { return; }; - const json_cookies = std.json.parseFromSliceLeaky([]const LoadJsonCookie, arena, content, .{ + const json_cookies = std.json.parseFromSliceLeaky([]const JsonCookie, arena, content, .{ .ignore_unknown_fields = true, }) catch |err| { log.err(.app, "Cookie.parseFile", .{ .path = path, .err = err }); @@ -111,7 +111,7 @@ fn _saveToFile(jar: *Cookie.Jar, path: []const u8) !void { } try w.writeAll("\n "); - try std.json.Stringify.value(SaveJsonCookie{ + try std.json.Stringify.value(JsonCookie{ .name = c.name, .value = c.value, .domain = c.domain, @@ -119,7 +119,7 @@ fn _saveToFile(jar: *Cookie.Jar, path: []const u8) !void { .expires = c.expires, .secure = c.secure, .httpOnly = c.http_only, - .sameSite = c.same_site, + .sameSite = @tagName(c.same_site), }, .{}, w); } @@ -132,7 +132,7 @@ fn _saveToFile(jar: *Cookie.Jar, path: []const u8) !void { log.info(.app, "Cookie.saveToFile", .{ .path = path, .count = jar.cookies.items.len }); } -const LoadJsonCookie = struct { +const JsonCookie = struct { name: []const u8, value: []const u8, domain: []const u8, @@ -143,17 +143,6 @@ const LoadJsonCookie = struct { sameSite: ?[]const u8 = null, }; -const SaveJsonCookie = struct { - name: []const u8, - value: []const u8, - domain: []const u8, - path: []const u8, - expires: ?f64 = null, - secure: bool, - httpOnly: bool, - sameSite: Cookie.SameSite = .none, -}; - fn parseJsonSameSite(value: ?[]const u8) Cookie.SameSite { const same_site = value orelse return .none; if (std.ascii.eqlIgnoreCase(same_site, "strict")) return .strict; @@ -167,11 +156,11 @@ test "cookies: load JSON accepts CDP SameSite casing" { defer arena.deinit(); const parsed = try std.json.parseFromSliceLeaky( - []const LoadJsonCookie, + []const JsonCookie, arena.allocator(), "[{\"name\":\"sid\",\"value\":\"1\",\"domain\":\"example.com\",\"sameSite\":\"Lax\"}]", .{ .ignore_unknown_fields = true }, ); try std.testing.expectEqual(Cookie.SameSite.lax, parseJsonSameSite(parsed[0].sameSite)); -} \ No newline at end of file +}