From 96c6f8bc0c9e71b3ebb7c2807b5df8d389288489 Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 10 Apr 2021 16:23:25 -0300 Subject: [PATCH] add mimetype-based extensions --- src/main.zig | 15 +++++++++++++-- zig.mod | 4 ++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main.zig b/src/main.zig index 4c394e3..ac19d7a 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,15 +1,22 @@ const std = @import("std"); const http = @import("apple_pie"); const hzzp = @import("hzzp"); +const mimetypes = @import("mimetypes"); const images_dir_path = "./images"; +var registry: mimetypes.Registry = undefined; + pub fn main() anyerror!void { std.log.info("welcome to webscale", .{}); var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit(); + registry = mimetypes.Registry.init(std.heap.page_allocator); + defer registry.deinit(); + try registry.load(); + // TODO: configurable addr via env var const bind_addr = try std.net.Address.parseIp("0.0.0.0", 8080); std.log.info("serving on {}", .{bind_addr}); @@ -219,14 +226,18 @@ fn uploadFile(response: *http.Response, request: http.Request) !void { .{ part.disposition.name, part.disposition.filename, part.content_type, part.body.len }, ); + var extensions = registry.getExtensionsByType(part.content_type); + if (extensions == null) return error.InvalidContentMimeType; + const extension = extensions.?.items[0]; + var image_id_buffer: [256]u8 = undefined; const image_id = generateImageId(&image_id_buffer); var image_path_buffer: [512]u8 = undefined; const image_path = try std.fmt.bufPrint( &image_path_buffer, - "{s}/{s}.jpg", - .{ images_dir_path, image_id }, + "{s}/{s}{s}", + .{ images_dir_path, image_id, extension }, ); const image_file = try std.fs.cwd().createFile(image_path, .{}); diff --git a/zig.mod b/zig.mod index 36e3131..a7359dd 100644 --- a/zig.mod +++ b/zig.mod @@ -10,3 +10,7 @@ dev_dependencies: - src: git https://github.com/truemedian/hzzp name: hzzp main: src/main.zig + + - src: git https://github.com/frmdstryr/zig-mimetypes + name: mimetypes + main: mimetypes.zig