updated zmpl and added session.remove() thanks to Allah

This commit is contained in:
IbrahimOuhamou 2024-11-03 11:39:03 +01:00
parent f971f18a60
commit cea2781391
2 changed files with 36 additions and 2 deletions

View File

@ -7,8 +7,8 @@
.hash = "12208a01a7c10d0583f253787cf7271587d9509862f34e2b6d754cade7bc08500ef6",
},
.zmpl = .{
.url = "https://github.com/jetzig-framework/zmpl/archive/97bc2ab63bc6938baeba2b5b615138e77e2fadcd.tar.gz",
.hash = "122007b478f550b24db9a20c807695d24ac4645ab8934ce59edffb82eabcb2cc27d0",
.url = "https://github.com/jetzig-framework/zmpl/archive/a128d0a9c9cd70ca9f007405ae3d17e3a074ab34.tar.gz",
.hash = "1220e1e95a5479b24e1c5448c5dc4ad283a01050617d0e5d9ff1c7e7283c639df24a",
},
.jetkv = .{
.url = "https://github.com/jetzig-framework/jetkv/archive/2b1130a48979ea2871c8cf6ca89c38b1e7062839.tar.gz",

View File

@ -76,6 +76,18 @@ pub fn put(self: *Self, key: []const u8, value: *jetzig.data.Value) !void {
try self.save();
}
// removes true if a value was removed
// and false otherwise
pub fn remove(self: *Self, key: []const u8) !bool {
if (self.state != .parsed) return error.UnparsedSessionCookie;
// copied from `get()`
return switch (self.data.value.?.*) {
.object => self.data.value.?.object.remove(key),
else => unreachable,
};
}
fn save(self: *Self) !void {
if (self.state != .parsed) return error.UnparsedSessionCookie;
@ -166,6 +178,28 @@ test "put and get session key/value" {
try std.testing.expectEqualStrings(try value.toString(), "bar");
}
test "remove session key/value" {
const allocator = std.testing.allocator;
var cookies = jetzig.http.Cookies.init(allocator, "");
defer cookies.deinit();
try cookies.parse();
const secret: [Cipher.key_length]u8 = [_]u8{0x69} ** Cipher.key_length;
var session = Self.init(allocator, &cookies, &secret);
defer session.deinit();
var data = jetzig.data.Data.init(allocator);
defer data.deinit();
try session.parse();
try session.put("foo", data.string("bar"));
var value = (try session.get("foo")).?;
try std.testing.expectEqualStrings(try value.toString(), "bar");
try std.testing.expectEqual(true, try session.remove("foo"));
try std.testing.expectEqual(null, try session.get("foo"));
}
test "get value from parsed/decrypted cookie" {
const allocator = std.testing.allocator;
var cookies = jetzig.http.Cookies.init(