diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-19 09:15:49 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-19 09:15:49 +0100 |
| commit | 4c06eb64cbed3562e428ce59857d1763098638f3 (patch) | |
| tree | cc9c8164e76cd48e1dd4ef963329dcfa3c1b152f /src/routes/api/profile/image | |
| parent | 6201307fecf8398a1b53bf276bc08bfbb3524899 (diff) | |
allow images to upload and sort if according to their datetime
Diffstat (limited to 'src/routes/api/profile/image')
| -rw-r--r-- | src/routes/api/profile/image/load.zig | 17 | ||||
| -rw-r--r-- | src/routes/api/profile/image/root.zig | 5 | ||||
| -rw-r--r-- | src/routes/api/profile/image/upload.zig | 19 |
3 files changed, 41 insertions, 0 deletions
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"; + } +} |