From f4c09a259cf34f69cfe68447996c484f9b91fcfc Mon Sep 17 00:00:00 2001 From: Ludwig Lehnert Date: Mon, 12 Jan 2026 16:52:18 +0100 Subject: [PATCH] updated expressjs project --- deploy.sh | 18 ++++ expressjs/src/server.js | 203 +++++++++++----------------------------- initialize.sh | 16 ++++ 3 files changed, 90 insertions(+), 147 deletions(-) create mode 100644 deploy.sh diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..1809b4b --- /dev/null +++ b/deploy.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +set -euo pipefail + +cd "$(dirname "$0")" + +if docker compose ps -q >/dev/null 2>&1; then + echo "Stopping running services..." + docker compose down +fi + +echo "Pulling latest changes..." +git pull + +echo "Rebuilding and starting services..." +docker compose up -d --build --force-recreate + +echo "Deploy complete." diff --git a/expressjs/src/server.js b/expressjs/src/server.js index 6b0062c..7de7d52 100644 --- a/expressjs/src/server.js +++ b/expressjs/src/server.js @@ -198,121 +198,30 @@ function formatCountdown(ts) { function renderPage(title, body) { return ` - + ${title} @@ -401,25 +310,25 @@ app.get(`${basePath}/login`, (req, res) => { const body = `
-

File Vault

-
Sign in to manage shared uploads.
+

Dateiverwaltung

+
Bitte anmelden, um Uploads zu verwalten.
- +
`; - res.send(renderPage('Login', body)); + res.send(renderPage('Anmeldung', body)); }); app.post(`${basePath}/login`, async (req, res) => { @@ -432,26 +341,26 @@ app.post(`${basePath}/login`, async (req, res) => { const body = `
-

File Vault

-
Sign in to manage shared uploads.
+

Dateiverwaltung

+
Bitte anmelden, um Uploads zu verwalten.
-
Login failed
+
Anmeldung fehlgeschlagen
- +
`; - res.status(401).send(renderPage('Login', body)); + res.status(401).send(renderPage('Anmeldung', body)); return; } @@ -487,15 +396,15 @@ app.get(`${basePath}/dashboard`, requireAuthPage, async (req, res) => { ${formatBytes(item.size_bytes)}
${formatTimestamp(item.expires_at)}
-
${formatCountdown(item.expires_at)} left
+
Noch ${formatCountdown(item.expires_at)}
- +
- - + +
@@ -505,48 +414,48 @@ app.get(`${basePath}/dashboard`, requireAuthPage, async (req, res) => { const body = `
-

File Vault

-
Signed in as ${req.user.username}
+

Dateiverwaltung

+
Angemeldet als ${req.user.username}
- +
-

Upload new file

+

Datei hochladen

- +
-

Current uploads

+

Aktuelle Uploads

${uploads.length ? ` - - - - + + + + ${rows}
FileSizeExpiresActionsDateiGrößeLäuft abAktionen
- ` : '
No uploads yet.
'} + ` : '
Noch keine Uploads.
'}
`; - res.send(renderPage('Dashboard', body)); + res.send(renderPage('Übersicht', body)); }); app.post(`${basePath}/api/upload`, requireAuthApi, upload.single('file'), async (req, res) => { @@ -634,7 +543,7 @@ app.post(`${basePath}/files/:id/delete`, requireAuthPage, async (req, res) => { req.user.username, ]); if (!uploadEntry) { - res.status(404).send(renderPage('Not found', '

Upload not found.

')); + res.status(404).send(renderPage('Nicht gefunden', '

Upload nicht gefunden.

')); return; } try { @@ -652,7 +561,7 @@ app.post(`${basePath}/files/:id/extend`, requireAuthPage, async (req, res) => { req.user.username, ]); if (!uploadEntry) { - res.status(404).send(renderPage('Not found', '

Upload not found.

')); + res.status(404).send(renderPage('Nicht gefunden', '

Upload nicht gefunden.

')); return; } @@ -668,7 +577,7 @@ app.post(`${basePath}/files/:id/extend`, requireAuthPage, async (req, res) => { }); app.use((req, res) => { - res.status(404).send(renderPage('Not found', '

Not found.

')); + res.status(404).send(renderPage('Nicht gefunden', '

Seite nicht gefunden.

')); }); app.listen(port, () => { diff --git a/initialize.sh b/initialize.sh index 493726a..77dd4aa 100755 --- a/initialize.sh +++ b/initialize.sh @@ -2,16 +2,32 @@ cd "$(dirname "$0")" +echo "Initializing files.lehnert.cloud setup..." + mkdir -p ./traefik touch traefik/acme.json chmod 600 traefik/acme.json mkdir -p ./data +echo "Ensured ./traefik and ./data exist." + if [ ! -f .logins ]; then cp .logins.example .logins + echo "Created .logins from .logins.example" +else + echo "Found existing .logins" fi if [ ! -f .env ]; then cp .env.example .env + echo "Created .env from .env.example" +else + echo "Found existing .env" fi + +echo "Initialization complete." +echo "Next steps:" +echo "1) Edit .env and set SERVICE_FQDN, LETSENCRYPT_EMAIL, DATA_DIR, UPLOAD_TTL_SECONDS" +echo "2) Edit .logins to add users (bcrypt)" +echo "3) docker compose up --build"