From 3ef14ce028ceba4040ea9370ce1d0c86f77711ee Mon Sep 17 00:00:00 2001 From: Aaron Fischer Date: Thu, 5 Dec 2024 00:44:11 +0100 Subject: [PATCH] Day 4: Simple proof oc concept Signed-off-by: Aaron Fischer --- gemini-server-test/cmd/entries.log.gmi | 10 +++++ gemini-server-test/cmd/run.sh | 18 +++++++++ gemini-server-test/compose.yaml | 17 +++++---- gemini-server-test/config/cert.pem | 34 +++++++++++++++++ gemini-server-test/config/key.pem | 52 ++++++++++++++++++++++++++ gemini-server-test/config/twins.ini | 13 +++++-- src/main.zig | 2 +- 7 files changed, 134 insertions(+), 12 deletions(-) create mode 100644 gemini-server-test/cmd/entries.log.gmi create mode 100644 gemini-server-test/cmd/run.sh create mode 100644 gemini-server-test/config/cert.pem create mode 100644 gemini-server-test/config/key.pem diff --git a/gemini-server-test/cmd/entries.log.gmi b/gemini-server-test/cmd/entries.log.gmi new file mode 100644 index 0000000..2446aa4 --- /dev/null +++ b/gemini-server-test/cmd/entries.log.gmi @@ -0,0 +1,10 @@ +# Server log + +## 2024-12-04 23:34 UTC +This is a simple entry, with multiple lines of text. This should showcase how this is intended. + +## 2024-12-04 23:36 UTC +Another entry. This is a good start and template what to build with Zig. Sadly, twins can not redirect the path to the command, so I can not do the routing in the command and it need to be inside the twins config file. But I am fine with that for now. + +## 2024-12-04 23:38 UTC +What's missing is checking for a client certificate. I am not sure if twins is supporting this. Maybe open up an issue in the bugtracker? diff --git a/gemini-server-test/cmd/run.sh b/gemini-server-test/cmd/run.sh new file mode 100644 index 0000000..041ab84 --- /dev/null +++ b/gemini-server-test/cmd/run.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +case $1 in + "list") + echo "=> /create Create new entry" + cat /app/cmd/entries.log.gmi + ;; + "create") + echo "" >> /app/cmd/entries.log.gmi + date=$(date -u +"%Y-%m-%d %H:%M %Z") + echo "## $date" >> /app/cmd/entries.log.gmi + while IFS= read -r line; do + echo $line >> /app/cmd/entries.log.gmi + done + echo "Entry created." + echo "=> / Back to the log entries" + ;; +esac \ No newline at end of file diff --git a/gemini-server-test/compose.yaml b/gemini-server-test/compose.yaml index 0c31e6d..c9fff88 100644 --- a/gemini-server-test/compose.yaml +++ b/gemini-server-test/compose.yaml @@ -7,12 +7,13 @@ services: volumes: - ./config:/app/config - ./public_gmi:/public_gmi + - ./cmd:/app/cmd - december-adventure: - image: alpine:latest - restart: unless-stopped - ports: - - 9001:9001 - volumes: - - ../zig-out/bin/:/run - command: ["sh", "-c", "cd /run && ./december-adventure-2024"] +# december-adventure: +# image: alpine:latest +# restart: unless-stopped +# ports: +# - 9001:9001 +# volumes: +# - ../zig-out/bin/:/run +# command: ["sh", "-c", "cd /run && ./december-adventure-2024"] diff --git a/gemini-server-test/config/cert.pem b/gemini-server-test/config/cert.pem new file mode 100644 index 0000000..9896857 --- /dev/null +++ b/gemini-server-test/config/cert.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +MIIF1zCCA7+gAwIBAgIUCaVblWWDFz3pw7eTn3ODyA4o73kwDQYJKoZIhvcNAQEL +BQAwezELMAkGA1UEBhMCWFgxEjAQBgNVBAgMCVN0YXRlTmFtZTERMA8GA1UEBwwI +Q2l0eU5hbWUxFDASBgNVBAoMC0NvbXBhbnlOYW1lMRswGQYDVQQLDBJDb21wYW55 +U2VjdGlvbk5hbWUxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yNDEyMDIyMjQ1MTBa +Fw0zNDExMzAyMjQ1MTBaMHsxCzAJBgNVBAYTAlhYMRIwEAYDVQQIDAlTdGF0ZU5h +bWUxETAPBgNVBAcMCENpdHlOYW1lMRQwEgYDVQQKDAtDb21wYW55TmFtZTEbMBkG +A1UECwwSQ29tcGFueVNlY3Rpb25OYW1lMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC3c57FScdRymWU1K4ScAwzJ46V +bxAMItfWoNuG3CQusu14K56fnpvyHlRWGZTrlyWZOf/+3FDx4Y01iqbiwhneGsfO +LIgES0iCnou1Xk26bbTUSf6HnV6pdOG85T2SmSiMz8yJQb7SdypaHqjwYIPxnUUy +kC7qGa7giyr+OGqq+i/tp3hyuOD4RTXfvJMV614p4+NrkzIkt8btJmSEywcPsl/B +I7LA8TOkPbllF/BkdZYOzvFqr9jW+3n1Y2/eo/Dfi203slL58LhYav04bAZhguVM +U5U3yJEIN0Za9Ti1pmj1iHTWm/VIqmpYgco+iwQJzjdSkNDeTnwBEFWrgCg7JzRN +AXM5DibcOiJkukn5ZeFOoWqFFmEogWHbpmnPK5spkXIT4AA3yu+bna5OOQD+ZmdY +twn/pFvnhg7Bi5bLnPEigaVHqEc0eX3Tn26mnAgC4AX2ama8CtgLfOhfSsbGROzR +h8gcNsN9st2/CWaiZO6qTvZ6u/98E1gt9HgruAxL1X+Us6qxsRkLK+9+bJIRBpQm +zkb5soPeaFVjrb3H4syo2qnLU9V4PVPifH1mqAPbTSiHDIuHMeWOORICVoQwuz+l +a1055N5GRvRw9LwPUP9dK/yjYTTVuGmVqmYI7NrqcHUcijamm2RTmaNNxYtQPQhL +bcuOIiEPSGUf0RdurQIDAQABo1MwUTAdBgNVHQ4EFgQUJWZTYLsPGC23V7BqUZMz +jv0eDzgwHwYDVR0jBBgwFoAUJWZTYLsPGC23V7BqUZMzjv0eDzgwDwYDVR0TAQH/ +BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAHtEsevKWAgazrzAULWqQCv2ZdFpi +WdO0PXueOGnHvHVrwVTHYgoRKBU5InbC52r9Ij13A/aO1/4G9Gg0plgFNznwlHeC +ESUCG8TXcF6WSizhqwENYZskbUfbrH3v+m+hEOxDexs4OvjfPVAuqp1sM75Qxm2H +VtAyrp9cYxbo9NLS4uR/5Qkm4YqvlWFIyOs3L8GhbGHac5LI6zd1AA+ETpHg3Ikq +yB/4GDLVyRj1S/eCm9l+KiW4YYBuW7XM5CKjta/z6u93ba15PfoBvl1vSTLHPlGR +Y3sOj9uphabC2jc1SWVVobA5IuD8Wx5pqUpzEJpJFS7sauXmzyUuh5z+SbFVvkR+ +IF/+hYn/G7emMG8q4UqET5mdftFBLEIC4NBsNjEItBUnZxUKW8KAA8FRYKfh1+Ly +0tzDedHe6UOrqXBisDhakx7GX66VVpBQqeS0+BrTk0SIHFli2fUG++t/E7pefS1f +qsOo/6TK6v5hqblqBXbG8fWA9Oo0zRj9i59WhxJTN4SPoK49LdR0p5JvtZ3unvrq +NnqdV5/zkA5gPhuoILjE7V5U6Q/JdxHDsPgaGQ1HvQ0mX8cHXLmiVCm4elbluAzG +Z52yP7rbanu0IVE3l7aNizD8T4VsH7GbgJl9b+S2Wk+5dZdekuFjNrjbXYmEroiM +dHOiUuTzTfU8JV0= +-----END CERTIFICATE----- diff --git a/gemini-server-test/config/key.pem b/gemini-server-test/config/key.pem new file mode 100644 index 0000000..97b83dc --- /dev/null +++ b/gemini-server-test/config/key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +8HBMyLiVB0L3BJYT3REa+l9egX9r +-----END PRIVATE KEY----- diff --git a/gemini-server-test/config/twins.ini b/gemini-server-test/config/twins.ini index 928826d..c61c131 100644 --- a/gemini-server-test/config/twins.ini +++ b/gemini-server-test/config/twins.ini @@ -1,9 +1,16 @@ listen: :1965 hosts: - default: + localhost: + cert: /app/config/cert.pem + key: /app/config/key.pem paths: + - + path: /create + input: Provide new Log entry + command: /bin/sh /app/cmd/run.sh create "$USERINPUT" + cache: 0 - path: / - root: /public_gmi - fastcgi: tcp://december-adventure:9001 + command: /bin/sh /app/cmd/run.sh list + cache: 0 \ No newline at end of file diff --git a/src/main.zig b/src/main.zig index b82cb3f..78b8281 100644 --- a/src/main.zig +++ b/src/main.zig @@ -3,7 +3,7 @@ const net = std.net; const posix = std.posix; pub fn main() !void { - const address = try std.net.Address.parseIp("127.0.0.1", 5882); + const address = try std.net.Address.parseIp("0.0.0.0", 9001); const tpe: u32 = posix.SOCK.STREAM; const protocol = posix.IPPROTO.TCP;