srctree

Gregory Mullen parent b1574ce5 7228c78f
simplify cookie creation API, fix nginx uwsgi http header

src/cookies.zig added: 20, removed: 22, total 0
@@ -107,19 +107,11 @@ pub const Jar = struct {
};
}
 
pub fn initFromHeaders(a: Allocator, headers: *Headers) !Jar {
pub fn initFromHeader(a: Allocator, header: []const u8) !Jar {
var jar = try init(a);
var itr = headers.iterator();
while (itr.next()) |header| {
// TODO we should probably use ASCII case equal here but it's not
// implemented that way because it might be better to normalize the
// incoming header names at the edge.
if (eql(u8, header.name, "Cookie")) {
var cookies = splitSequence(u8, header.value, "; ");
while (cookies.next()) |cookie| {
try jar.add(Cookie.fromHeader(cookie));
}
}
var cookies = splitSequence(u8, header, "; ");
while (cookies.next()) |cookie| {
try jar.add(Cookie.fromHeader(cookie));
}
 
return jar;
 
src/request.zig added: 20, removed: 22, total 0
@@ -95,6 +95,7 @@ pub fn initZWSGI(a: Allocator, zwsgi: *zWSGIRequest, data: Data) !Request {
var referer: ?Referer = null;
var encoding: Encoding = Encoding.default;
var authorization: ?Authorization = null;
var cookie_header: ?[]const u8 = null;
 
for (zwsgi.vars) |v| {
try headers.add(v.key, v.val);
@@ -104,18 +105,20 @@ pub fn initZWSGI(a: Allocator, zwsgi: *zWSGIRequest, data: Data) !Request {
method = Methods.fromStr(v.val) catch Methods.GET;
} else if (eql(u8, v.key, "REMOTE_ADDR")) {
remote_addr = v.val;
} else if (eqlIgnoreCase("ACCEPT", v.key)) {
} else if (eqlIgnoreCase("HTTP_ACCEPT", v.key)) {
accept = v.val;
} else if (eqlIgnoreCase("HOST", v.key)) {
} else if (eqlIgnoreCase("HTTP_HOST", v.key)) {
host = v.val;
} else if (eqlIgnoreCase("USER_AGENT", v.key)) {
} else if (eqlIgnoreCase("HTTP_USER_AGENT", v.key)) {
uagent = v.val;
} else if (eqlIgnoreCase("REFERER", v.key)) {
} else if (eqlIgnoreCase("HTTP_REFERER", v.key)) {
referer = v.val;
} else if (eqlIgnoreCase("ACCEPT-ENCODING", v.key)) {
} else if (eqlIgnoreCase("HTTP_ACCEPT_ENCODING", v.key)) {
encoding = Encoding.fromStr(v.val);
} else if (eqlIgnoreCase("AUTHORIZATION", v.key)) {
} else if (eqlIgnoreCase("HTTP_AUTHORIZATION", v.key)) {
authorization = v.val;
} else if (eqlIgnoreCase("HTTP_COOKIE", v.key)) {
cookie_header = v.val;
}
}
return .{
@@ -128,7 +131,7 @@ pub fn initZWSGI(a: Allocator, zwsgi: *zWSGIRequest, data: Data) !Request {
.method = Methods.GET,
.uri = uri orelse return error.InvalidRequest,
.headers = headers,
.cookie_jar = try Cookies.Jar.initFromHeaders(a, &headers),
.cookie_jar = if (cookie_header) |ch| try Cookies.Jar.initFromHeader(a, ch) else try Cookies.Jar.init(a),
.data = data,
.raw = .{ .zwsgi = zwsgi },
};
@@ -144,6 +147,7 @@ pub fn initHttp(a: Allocator, http: *std.http.Server.Request, data: Data) !Reque
var referer: ?Referer = null;
var encoding: Encoding = Encoding.default;
var authorization: ?Authorization = null;
var cookie_header: ?[]const u8 = null;
 
while (itr.next()) |head| {
try headers.add(head.name, head.value);
@@ -159,6 +163,8 @@ pub fn initHttp(a: Allocator, http: *std.http.Server.Request, data: Data) !Reque
encoding = Encoding.fromStr(head.value);
} else if (eqlIgnoreCase("authorization", head.name)) {
authorization = head.value;
} else if (eqlIgnoreCase("cookie", head.name)) {
cookie_header = head.value;
}
}
 
@@ -180,7 +186,7 @@ pub fn initHttp(a: Allocator, http: *std.http.Server.Request, data: Data) !Reque
.method = translateStdHttp(http.head.method),
.uri = http.head.target,
.headers = headers,
.cookie_jar = try Cookies.Jar.initFromHeaders(a, &headers),
.cookie_jar = if (cookie_header) |ch| try Cookies.Jar.initFromHeader(a, ch) else try Cookies.Jar.init(a),
.data = data,
.raw = .{ .http = http },
};