From cea27813913349a92a6d81c47494da419ba4fe5c Mon Sep 17 00:00:00 2001 From: IbrahimOuhamou Date: Sun, 3 Nov 2024 11:39:03 +0100 Subject: [PATCH 1/3] updated zmpl and added session.remove() thanks to Allah --- build.zig.zon | 4 ++-- src/jetzig/http/Session.zig | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/build.zig.zon b/build.zig.zon index 208fc56..9f94bb4 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -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", diff --git a/src/jetzig/http/Session.zig b/src/jetzig/http/Session.zig index 6f27228..a282c8c 100644 --- a/src/jetzig/http/Session.zig +++ b/src/jetzig/http/Session.zig @@ -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( From d5078cc617563fd8153861a527d67ee03550f848 Mon Sep 17 00:00:00 2001 From: IbrahimOuhamou Date: Sun, 3 Nov 2024 13:08:43 +0100 Subject: [PATCH 2/3] added 'session.save()' inside 'session.remove()' thanks to Allah --- src/jetzig/http/Session.zig | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/jetzig/http/Session.zig b/src/jetzig/http/Session.zig index a282c8c..178df99 100644 --- a/src/jetzig/http/Session.zig +++ b/src/jetzig/http/Session.zig @@ -82,10 +82,13 @@ pub fn remove(self: *Self, key: []const u8) !bool { if (self.state != .parsed) return error.UnparsedSessionCookie; // copied from `get()` - return switch (self.data.value.?.*) { + const result = switch (self.data.value.?.*) { .object => self.data.value.?.object.remove(key), else => unreachable, }; + + try self.save(); + return result; } fn save(self: *Self) !void { From bd2761b12f1f299cecf37463fb387372e9eda091 Mon Sep 17 00:00:00 2001 From: IbrahimOuhamou Date: Sun, 3 Nov 2024 13:10:47 +0100 Subject: [PATCH 3/3] added session.remove to demo thanks to Allah --- demo/src/app/views/session.zig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/demo/src/app/views/session.zig b/demo/src/app/views/session.zig index ee85a1c..3108823 100644 --- a/demo/src/app/views/session.zig +++ b/demo/src/app/views/session.zig @@ -21,7 +21,11 @@ pub fn post(request: *jetzig.Request, data: *jetzig.Data) !jetzig.View { var session = try request.session(); if (params.get("message")) |message| { - try session.put("message", message); + if (std.mem.eql(u8, message.string.value, "delete")) { + _ = try session.remove("message"); + } else { + try session.put("message", message); + } } return request.redirect("/session", .moved_permanently);