Merge pull request #109 from IbrahimOuhamou/bismi_allah_add_session_remove

add 'session.remove()' for #107 thanks to Allah
This commit is contained in:
bobf 2024-11-03 12:24:02 +00:00 committed by GitHub
commit 2d8ca92143
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 44 additions and 3 deletions

View File

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

View File

@ -21,8 +21,12 @@ pub fn post(request: *jetzig.Request, data: *jetzig.Data) !jetzig.View {
var session = try request.session(); var session = try request.session();
if (params.get("message")) |message| { if (params.get("message")) |message| {
if (std.mem.eql(u8, message.string.value, "delete")) {
_ = try session.remove("message");
} else {
try session.put("message", message); try session.put("message", message);
} }
}
return request.redirect("/session", .moved_permanently); return request.redirect("/session", .moved_permanently);
} }

View File

@ -76,6 +76,21 @@ pub fn put(self: *Self, key: []const u8, value: *jetzig.data.Value) !void {
try self.save(); 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()`
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 { fn save(self: *Self) !void {
if (self.state != .parsed) return error.UnparsedSessionCookie; if (self.state != .parsed) return error.UnparsedSessionCookie;
@ -166,6 +181,28 @@ test "put and get session key/value" {
try std.testing.expectEqualStrings(try value.toString(), "bar"); 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" { test "get value from parsed/decrypted cookie" {
const allocator = std.testing.allocator; const allocator = std.testing.allocator;
var cookies = jetzig.http.Cookies.init( var cookies = jetzig.http.Cookies.init(