diff options
| author | physcik <mynameisgennadiy@vk.com> | 2026-04-20 15:45:45 +0500 |
|---|---|---|
| committer | physcik <mynameisgennadiy@vk.com> | 2026-04-20 15:45:45 +0500 |
| commit | 6898919979c914be4c4650158fe0451a21349bb5 (patch) | |
| tree | 41de46b5fad0bf620f9a6dff3baed4e94914e7aa /backend/src/Handler.zig | |
| parent | e293a40d6bb62e4fa8cc212fcc8bb4b3501da287 (diff) | |
login
Diffstat (limited to 'backend/src/Handler.zig')
| -rw-r--r-- | backend/src/Handler.zig | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/backend/src/Handler.zig b/backend/src/Handler.zig index 010dd0e..4623d36 100644 --- a/backend/src/Handler.zig +++ b/backend/src/Handler.zig @@ -1,9 +1,45 @@ const std = @import("std"); const httpz = @import("httpz"); +const userModel = @import("Models/User.zig"); +const tokens = @import("Authentication/Tokens.zig"); + +pub const RequestData = struct { + User: ?userModel.User, + + pub fn Init(req: *httpz.Request) !RequestData { + return .{ + .User = try getUser(req), + }; + } + + fn getUser(req: *httpz.Request) !?userModel.User { + const header = req.header("authorization") orelse return null; + const stripped = stripBearerPrefix(header); + const parsed = tokens.GetUserFromToken(req.arena, stripped) catch |err| { + std.debug.print("Failed to parse a user: {any}\n", .{ err }); + return err; + } orelse { + return null; + }; + + return parsed.value; + } +}; pub const Handler = struct { - pub fn dispatch(self: *Handler, action: httpz.Action(*Handler), req: *httpz.Request, res: *httpz.Response) !void { - try action(self, req, res); + pub fn dispatch(_: *Handler, action: httpz.Action(*RequestData), req: *httpz.Request, res: *httpz.Response) !void { + var data = try RequestData.Init(req); + std.debug.print("Data: {any}\n", .{ data }); + try action(&data, req, res); std.debug.print("{any} {s}: {d}\n", .{req.method, req.url.raw, res.status}); } }; + +const headerPrefix = "Bearer "; + +fn stripBearerPrefix(header: []const u8) []const u8 { + if (std.mem.startsWith(u8, header, headerPrefix)) { + return header[headerPrefix.len..]; + } + return header; +} |
