From 4c06eb64cbed3562e428ce59857d1763098638f3 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Wed, 19 Nov 2025 09:15:49 +0100 Subject: allow images to upload and sort if according to their datetime --- src/routes/api/profile/image/load.zig | 17 +++++++++++++++++ src/routes/api/profile/image/root.zig | 5 +++++ src/routes/api/profile/image/upload.zig | 19 +++++++++++++++++++ src/routes/api/profile/root.zig | 1 + 4 files changed, 42 insertions(+) create mode 100644 src/routes/api/profile/image/load.zig create mode 100644 src/routes/api/profile/image/root.zig create mode 100644 src/routes/api/profile/image/upload.zig create mode 100644 src/routes/api/profile/root.zig (limited to 'src/routes/api/profile') diff --git a/src/routes/api/profile/image/load.zig b/src/routes/api/profile/image/load.zig new file mode 100644 index 0000000..4b696ce --- /dev/null +++ b/src/routes/api/profile/image/load.zig @@ -0,0 +1,17 @@ +const std = @import("std"); + +const memora = @import("memora"); +const Context = memora.Context; +const Storage = memora.Storage; + +pub const access = .users; + +pub fn get(ctx: *Context) !memora.Stream { + const name = ctx.request.head.target["/api/profile/image/load/".len..]; + if (Storage.User.image(ctx.storage, name)) |file| { + ctx.response.headers.content_type = "image/jpeg"; + return .from_file(file); + } + + return error.NotFound; +} diff --git a/src/routes/api/profile/image/root.zig b/src/routes/api/profile/image/root.zig new file mode 100644 index 0000000..d6b77f2 --- /dev/null +++ b/src/routes/api/profile/image/root.zig @@ -0,0 +1,5 @@ +const memora = @import("memora"); +const HandlerInfo = memora.routes.HandlerInfo; + +pub const upload: HandlerInfo = .from_type(@import("upload.zig")); +pub const load: HandlerInfo = .from_type(@import("load.zig")); diff --git a/src/routes/api/profile/image/upload.zig b/src/routes/api/profile/image/upload.zig new file mode 100644 index 0000000..db140d4 --- /dev/null +++ b/src/routes/api/profile/image/upload.zig @@ -0,0 +1,19 @@ +const std = @import("std"); + +const memora = @import("memora"); +const Context = memora.Context; +const Storage = memora.Storage; + +pub const access = .users; + +pub fn post(ctx: *Context) !void { + const name = ctx.request.head.target["/api/profile/image/upload/".len..]; + if (ctx.request.head.content_length) |length| { + var buffer: [1024]u8 = undefined; + const reader = try ctx.request.readerExpectContinue(&buffer); + + try Storage.User.set_image(ctx.storage, name, reader, length); + + ctx.response.headers.content_type = "image/jpeg"; + } +} diff --git a/src/routes/api/profile/root.zig b/src/routes/api/profile/root.zig new file mode 100644 index 0000000..632c09c --- /dev/null +++ b/src/routes/api/profile/root.zig @@ -0,0 +1 @@ +pub const image = @import("image/root.zig"); -- cgit v1.2.3-70-g09d2