From f6408bb16c67b11d45c9a78121384b3a623e09bb Mon Sep 17 00:00:00 2001 From: Michal Skorczak Date: Wed, 13 Nov 2024 20:48:06 +0000 Subject: [PATCH] Added: can now send file contents back as the body with http parameters --- src/main.zig | 102 ++++++++++++++++++++++++--------------- src/public/blog.html | 5 +- src/public/blog/test.txt | 41 ++++++++++++++++ 3 files changed, 106 insertions(+), 42 deletions(-) create mode 100644 src/public/blog/test.txt diff --git a/src/main.zig b/src/main.zig index 2ab6a0b..c323716 100644 --- a/src/main.zig +++ b/src/main.zig @@ -20,51 +20,72 @@ const Allocator = std.mem.Allocator; //} pub const WebRouter = struct { - const Self = @This(); - allocator: Allocator, +const Self = @This(); +allocator: Allocator, - pub fn init(allocator: Allocator) Self { - return .{ .allocator = allocator }; +pub fn init(allocator: Allocator) Self { + return .{ .allocator = allocator }; +} + +pub fn index(self: *Self, req: zap.Request) void { + std.log.warn("index", .{}); + + const string = std.fmt.allocPrint( + self.allocator, + "Test", + .{}, +) catch return; + defer self.allocator.free(string); + req.sendFile("src/public/index.html") catch return; +} + +pub fn home(self: *Self, req: zap.Request) void { + std.log.warn("home", .{}); + + const string = std.fmt.allocPrint( + self.allocator, + "HOME!!!", + .{}, +) catch return; + defer self.allocator.free(string); + req.sendBody(string) catch return; +} + +pub fn blog(self: *Self, req: zap.Request) void { + req.parseBody() catch |err| { + std.log.err("parse error: {any}", .{err}); + }; + req.parseQuery(); + const param_count = req.getParamCount(); + std.log.info("param_count: {}", .{param_count}); + // looking for /blog?post=post_name + if(req.getParamSlice("post")) |value| { + std.log.info("post name: {s}", .{value}); + const filepath = std.fmt.allocPrint(self.allocator, "src/public/blog/{s}", .{value}) catch return; + defer self.allocator.free(filepath); + const file_content = std.fs.cwd().readFileAlloc(self.allocator, filepath, std.math.maxInt(usize)) catch return; + defer self.allocator.free(file_content); + req.sendBody(file_content) catch return; } - pub fn index(self: *Self, req: zap.Request) void { - std.log.warn("index", .{}); - - const string = std.fmt.allocPrint( - self.allocator, - "Test", - .{}, - ) catch return; - defer self.allocator.free(string); - req.sendFile("src/public/index.html") catch return; - } - - pub fn home(self: *Self, req: zap.Request) void { - std.log.warn("home", .{}); - - const string = std.fmt.allocPrint( - self.allocator, - "HOME!!!", - .{}, - ) catch return; - defer self.allocator.free(string); - req.sendBody(string) catch return; - } - - //pub fn blog(self: *Self, req: zap.Request) void { - // std.log.warn("blog", .{}); - // const template = - // \\ {{=<< >>=}} - // \\ * Files: - // \\ <<#files>> - // \\ <<<& name>> (<>) - // \\ <> - // ; - // var mustache = Mustache.fromData(template) catch return; - // defer mustache.deinit(); - //} + req.sendBody("ERROR: !") catch return; +} }; +//pub fn blog(self: *Self, req: zap.Request) void { +// std.log.warn("blog", .{}); +// const template = +// \\ {{=<< >>=}} +// \\ * Files: +// \\ <<#files>> +// \\ <<<& name>> (<>) +// \\ <> +// ; +// var mustache = Mustache.fromData(template) catch return; +// defer mustache.deinit(); +//} + + //fn route_git() void {} //fn route_blog() void {} //fn route_resume() void {} @@ -86,6 +107,7 @@ pub fn main() !void { var web_router = WebRouter.init(allocator); try router.handle_func("/home", &web_router, &WebRouter.home); try router.handle_func("/index", &web_router, &WebRouter.index); + try router.handle_func("/blog", &web_router, &WebRouter.blog); try router.handle_func("/", &web_router, &WebRouter.index); var listener = zap.HttpListener.init(.{ .port = 4000, .on_request = router.on_request_handler(), .log = true, .max_clients = 100000, .public_folder = "src/public" }); try listener.listen(); diff --git a/src/public/blog.html b/src/public/blog.html index 3d4c223..c84bf97 100644 --- a/src/public/blog.html +++ b/src/public/blog.html @@ -14,8 +14,8 @@ @@ -24,6 +24,7 @@

Also under construction! But this has extra text :)

2024-11-12: Initial commit.

2024-11-12: screen command tutorial

+ about diff --git a/src/public/blog/test.txt b/src/public/blog/test.txt new file mode 100644 index 0000000..958de70 --- /dev/null +++ b/src/public/blog/test.txt @@ -0,0 +1,41 @@ +

blog 1

+back +heres some test text for blog 1 +khjsdfg +;'sdfgkl;hjdfgskl' +;gsdf +jkl;'sdfgl; +jfgsdjl; +sdfgl;' +jgsdfjl' +sdfgjl; +sdfgjl; +sdfg; +jlfgasd +jl;sdfgAJL; +ASFGD +JL;AGFSDJL; +ASGDFJL; +GASDFJL; +ADFGJL; +AFGDJL; +AFGL; +JAGFJL; +AGFD +JL;AGF +JL;AFGD +JL;AGFSJL; +GA +SD;FLKGJAS +;LGKASJL; +A; +LGJ +JL;AJ +LGJ +LAJL; +FGJL;ADFJL;G +AJ +LDSFJL; +JL; +JLL; +J