summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/src/API/AuthenticationAPI.zig12
-rw-r--r--backend/src/Authentication/Tokens.zig16
-rw-r--r--backend/src/Handler.zig2
-rw-r--r--backend/src/main.zig8
4 files changed, 25 insertions, 13 deletions
diff --git a/backend/src/API/AuthenticationAPI.zig b/backend/src/API/AuthenticationAPI.zig
index 9b45ff4..80988aa 100644
--- a/backend/src/API/AuthenticationAPI.zig
+++ b/backend/src/API/AuthenticationAPI.zig
@@ -7,10 +7,22 @@ const Handler = @import("../Handler.zig");
const Tokens = @import("../Authentication/Tokens.zig");
pub fn RegisterEndpoints(router: *httpz.Router(*Handler.Handler,*const fn (*Handler.RequestData, *httpz.request.Request, *httpz.response.Response) anyerror!void)) void {
+ router.get("/auth", getUser, .{});
router.post("/auth/register", register, .{});
router.post("/auth/login", login, .{});
}
+fn getUser(data: *Handler.RequestData, _: *httpz.Request, res: *httpz.Response) !void {
+ if (data.User == null) {
+ try res.json(.{.status = "Unauthnticated"}, .{});
+ return;
+ }
+ try res.json(.{
+ .Username = data.User.?.Username,
+ .Role = data.User.?.Role,
+ }, .{});
+}
+
fn register(_: *Handler.RequestData, req: *httpz.Request, res: *httpz.Response) !void {
var body = try req.json(model.RequestBody) orelse {
res.setStatus(.bad_request);
diff --git a/backend/src/Authentication/Tokens.zig b/backend/src/Authentication/Tokens.zig
index 37bfd5a..a20c200 100644
--- a/backend/src/Authentication/Tokens.zig
+++ b/backend/src/Authentication/Tokens.zig
@@ -8,6 +8,10 @@ const token_ttl: u16 = 43_200; // 12 hours
var prng: std.Random.DefaultPrng= undefined;
var rnd: std.Random = undefined;
+const errors = error {
+ NotFound,
+};
+
pub fn Init() !void {
// Random enough
var seed: u64 = undefined;
@@ -16,7 +20,7 @@ pub fn Init() !void {
rnd = prng.random();
}
-/// Generates a new token in the heap. Expects [64]u8 as an input
+/// Generates a new token in the stack. Expects [64]u8 as an input
fn generateSessionToken(buf: []u8) []u8 {
for (0..64) |i| {
buf[i] = std.Random.intRangeAtMost(rnd, u8, 'A', 'z');
@@ -34,7 +38,7 @@ pub fn GenerateNewSession(allocator: std.mem.Allocator, user: userModel.User) ![
// Redis cache
var string: std.io.Writer.Allocating = .init(allocator);
defer string.deinit();
- try string.writer.print("{f}", .{std.json.fmt(user, .{})});
+ try string.writer.print("{f}", .{ std.json.fmt(user, .{}) });
try redis.WriteToTopic(topicName, redis.Message {
.Key = token,
.Value = string.written(),
@@ -46,12 +50,12 @@ pub fn GenerateNewSession(allocator: std.mem.Allocator, user: userModel.User) ![
pub fn GetUserFromToken(allocator: std.mem.Allocator, token: []const u8) !?std.json.Parsed(userModel.User) {
const saved = try redis.ReadFromTopic(allocator, topicName, token) orelse {
- std.debug.print("The token was not found \n", .{});
- return null;
+ // std.debug.print("The token was not found \n", .{});
+ return errors.NotFound;
};
- std.debug.print("FromRedis: {s}\n", .{ saved });
+
const parsed = try std.json.parseFromSlice(
- userModel.User,
+ userModel.User,
allocator,
saved,
.{
diff --git a/backend/src/Handler.zig b/backend/src/Handler.zig
index 4623d36..22e9920 100644
--- a/backend/src/Handler.zig
+++ b/backend/src/Handler.zig
@@ -29,7 +29,7 @@ pub const RequestData = struct {
pub const Handler = struct {
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 });
+ // 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});
}
diff --git a/backend/src/main.zig b/backend/src/main.zig
index ff90540..6def1a1 100644
--- a/backend/src/main.zig
+++ b/backend/src/main.zig
@@ -40,12 +40,8 @@ pub fn main() !void {
try server.listen();
}
-fn index(data: *handler.RequestData, _: *httpz.Request, res: *httpz.Response) !void {
- if (data.User == null) {
- try res.json(.{.status = "Unauthnticated"}, .{});
- return;
- }
- try res.json(data.User, .{});
+fn index(_: *handler.RequestData, _: *httpz.Request, res: *httpz.Response) !void {
+ try res.json(.{.Message = "Ok"}, .{});
}
test "TestRunner" {