aboutsummaryrefslogtreecommitdiff
path: root/src/storage/session-manager/session.zig
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2025-11-15 11:54:00 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2025-11-15 11:56:24 +0100
commite8ff326f0e5bd61fb0a8c22c48f296fcf0249830 (patch)
tree19d8c026f8460ec577f446a7d61e68c38acddde0 /src/storage/session-manager/session.zig
parent007bc3fe0615f38cb31d5116759ed3500f6fd3e6 (diff)
backend implement auth-service
Diffstat (limited to 'src/storage/session-manager/session.zig')
-rw-r--r--src/storage/session-manager/session.zig34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/storage/session-manager/session.zig b/src/storage/session-manager/session.zig
new file mode 100644
index 0000000..943334b
--- /dev/null
+++ b/src/storage/session-manager/session.zig
@@ -0,0 +1,34 @@
+const std = @import("std");
+const User = @import("../user.zig");
+
+const Self = @This();
+
+const fingerprint_size = 512;
+
+age: std.time.Instant,
+info: User.Info,
+fingerprint: []u8,
+
+pub fn init(allocator: std.mem.Allocator, info: User.Info) !Self {
+ var self: Self = undefined;
+ self.info = try info.clone(allocator);
+ self.fingerprint = try allocator.alloc(u8, fingerprint_size);
+ try self.reset();
+
+ return self;
+}
+
+pub fn reset(self: *Self) !void {
+ var raw_buffer: [fingerprint_size / 2]u8 = undefined;
+ std.crypto.random.bytes(&raw_buffer);
+
+ var writer = std.Io.Writer.fixed(self.fingerprint);
+ writer.print("{x}", .{raw_buffer}) catch unreachable;
+
+ self.age = try std.time.Instant.now();
+}
+
+pub fn deinit(self: *const Self, allocator: std.mem.Allocator) void {
+ self.info.deinit(allocator);
+ allocator.free(self.fingerprint);
+}