const std = @import("std"); const mime = @import("../mime.zig"); const Context = @import("context.zig"); const log = std.log.scoped(.fallback); pub const access = .everyone; pub fn get(ctx: *Context) anyerror![]const u8 { var static = try std.fs.cwd().openDir("static", .{}); defer static.close(); if (static.openFile(ctx.request.head.target[1..], .{})) |file| { defer file.close(); const content = file.readToEndAlloc(ctx.allocator, std.math.maxInt(usize)); const mime_type = mime.get_type(ctx.request.head.target); ctx.response.headers.content_type = mime_type; return content; } else |_| { var subdir = if (ctx.request.head.target.len == 1) static else (static.openDir(ctx.request.head.target[1..], .{}) catch { return error.NotFound; }); defer if (ctx.request.head.target.len > 1) subdir.close(); if (subdir.openFile("index.html", .{})) |file| { defer file.close(); const content = file.readToEndAlloc(ctx.allocator, std.math.maxInt(usize)); ctx.response.headers.content_type = "text/html"; return content; } else |_| { log.warn("File '{s}' Not Found", .{ ctx.request.head.target }); return error.NotFound; } } }