Day 4: Simple proof oc concept

Signed-off-by: Aaron Fischer <mail@aaron-fischer.net>
This commit is contained in:
Aaron Fischer 2024-12-05 00:44:11 +01:00
parent e1b698f82a
commit 3ef14ce028
7 changed files with 134 additions and 12 deletions

View file

@ -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?

View file

@ -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

View file

@ -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"]

View file

@ -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-----

View file

@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
8HBMyLiVB0L3BJYT3REa+l9egX9r
-----END PRIVATE KEY-----

View file

@ -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

View file

@ -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;