mirror of
https://github.com/jetzig-framework/jetzig.git
synced 2025-05-14 14:06:08 +00:00
Merge pull request #109 from IbrahimOuhamou/bismi_allah_add_session_remove
add 'session.remove()' for #107 thanks to Allah
This commit is contained in:
commit
2d8ca92143
@ -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",
|
||||||
|
@ -21,7 +21,11 @@ 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| {
|
||||||
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);
|
return request.redirect("/session", .moved_permanently);
|
||||||
|
@ -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(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user