diff options
Diffstat (limited to 'comments')
-rw-r--r-- | comments/build.zig | 18 | ||||
-rw-r--r-- | comments/build.zig.zon | 18 | ||||
m--------- | comments/lib/mustache-zig | 0 | ||||
m--------- | comments/lib/zigwebserver | 0 | ||||
-rw-r--r-- | comments/src/main.zig | 18 | ||||
-rw-r--r-- | comments/src/templates/notification.txt | 4 |
6 files changed, 53 insertions, 5 deletions
diff --git a/comments/build.zig b/comments/build.zig index b7f3bcc..a678527 100644 --- a/comments/build.zig +++ b/comments/build.zig @@ -15,6 +15,8 @@ pub fn build(b: *std.Build) void { // set a preferred release mode, allowing the user to decide how to optimize. const optimize = b.standardOptimizeOption(.{}); + const opts = .{ .target = target, .optimize = optimize }; + const exe = b.addExecutable(.{ .name = "comments", // In this case the main source file is merely a path, however, in more @@ -24,15 +26,21 @@ pub fn build(b: *std.Build) void { .optimize = optimize, }); - const zws = b.addModule("zws", .{ .source_file = .{ .path = "lib/zigwebserver/src/zigwebserver.zig" } }); - exe.addModule("zws", zws); + const zws = b.dependency("zigwebserver", opts); + exe.addModule("zws", zws.module("zigwebserver")); + exe.linkLibrary(zws.artifact("zigwebserver")); exe.linkLibC(); exe.linkSystemLibrary("libpq"); exe.addIncludePath(.{ .path = "/usr/include" }); - const mustache = b.addModule("mustache", .{ .source_file = .{ .path = "lib/mustache-zig/src/mustache.zig" } }); - exe.addModule("mustache", mustache); + const mustache = b.dependency("mustache", opts); + exe.addModule("mustache", mustache.module("mustache")); + exe.linkLibrary(mustache.artifact("mustache-static")); + + const smtp = b.dependency("smtp", opts); + exe.addModule("smtp", smtp.module("smtp")); + exe.linkLibrary(smtp.artifact("smtp")); // This declares intent for the executable to be installed into the // standard location when the user invokes the "install" step (the default @@ -69,7 +77,7 @@ pub fn build(b: *std.Build) void { .target = target, .optimize = optimize, }); - unit_tests.addModule("mustache", mustache); + unit_tests.addModule("mustache", mustache.module("mustache")); const run_unit_tests = b.addRunArtifact(unit_tests); diff --git a/comments/build.zig.zon b/comments/build.zig.zon new file mode 100644 index 0000000..2acd629 --- /dev/null +++ b/comments/build.zig.zon @@ -0,0 +1,18 @@ +.{ + .name = "comments", + .version = "0.0.1", + .dependencies = .{ + .smtp = .{ + .url = "https://code.mfashby.net/smtp-zig/snapshot/smtp-zig-main.tar.xz", + .hash = "12205e7087360185eea859ae9265cc4be54c519d5f8d205f66f655d4f8e7e0045dc1", + }, + .mustache = .{ + .url = "https://github.com/MFAshby/mustache-zig/archive/refs/heads/stage3.tar.gz", + .hash = "1220fdf239b6ece687324bb600c72d5ad7a278df2ece86599aee6adf932064686cef", + }, + .zigwebserver = .{ + .url = "https://code.mfashby.net/zigwebserver/snapshot/zigwebserver-main.tar.xz", + .hash = "122066ea438ccbe3e006e84563746705cd46f3c7d1389c8fa8cccf2cdf681959495e", + } + } +}
\ No newline at end of file diff --git a/comments/lib/mustache-zig b/comments/lib/mustache-zig deleted file mode 160000 -Subproject da5aabb77b8ae6669b0436f09c3305c8f227caa diff --git a/comments/lib/zigwebserver b/comments/lib/zigwebserver deleted file mode 160000 -Subproject 0736c8a26dbd970670117290baf4a68e430aeca diff --git a/comments/src/main.zig b/comments/src/main.zig index 898b689..882202d 100644 --- a/comments/src/main.zig +++ b/comments/src/main.zig @@ -2,6 +2,7 @@ const std = @import("std"); const zws = @import("zws"); const pq = @import("pq.zig"); const mustache = @import("mustache"); +const smtp = @import("smtp"); const Params = zws.Params; @@ -244,6 +245,23 @@ fn post_comment(res: *Response, ctx: Ctx, _: Params) Err!void { _ = try stmt.step(); } + // Send me an email + const rr = @embedFile("templates/notification.txt"); + const tt = comptime mustache.parseComptime(rr, .{}, .{}); + const Data = struct { url: []const u8, author: []const u8, comment: []const u8 }; + const notification = try mustache.allocRender(res.allocator, tt, Data{ + .url = form_val.url, + .author = form_val.author, + .comment = form_val.comment, + }); + const smtp_username = std.os.getenv("SMTP_USERNAME") orelse "comments@mfashby.net"; + const smtp_password = std.os.getenv("SMTP_PASSWORD") orelse "foobar"; + const notification_address = std.os.getenv("NOTIFICATION_ADDRESS") orelse "martin@mfashby.net"; + const smtp_server = std.os.getenv("SMTP_SERVER") orelse "mail.mfashby.net:587"; + smtp.send_mail(res.allocator, smtp_server, .{ .user = smtp_username, .pass = smtp_password }, smtp_username, &[_][]const u8{notification_address}, notification) catch |err| { + std.log.err("failed to send notification email {}", .{err}); + }; + // And redirect! res.transfer_encoding = .none; res.status = .found; diff --git a/comments/src/templates/notification.txt b/comments/src/templates/notification.txt index ba85056..3824f52 100644 --- a/comments/src/templates/notification.txt +++ b/comments/src/templates/notification.txt @@ -1,3 +1,7 @@ +subject: New comment on {{ url }} +from: comments@mfashby.net +to: martin@mfashby.net + New comment on {{ url }}: Author: {{ author }} |