- Moved event and gallery data to JSON files for cleaner content management. - Added session management utilities with CSRF protection. - Integrated OAuth-based login and logout APIs. - Updated dependencies, including Astro and introduced dotenv-cli. - Enhanced package.json with local environment support.
2.6 KiB
2.6 KiB
Gallus Pub Website – Admin mit Gitea OAuth und Git-Commits
Dieses Projekt stellt eine Astro‑Seite bereit und enthält eine Admin‑Oberfläche unter /admin, mit der Inhalte (Events, Galerie und Bilder) ohne Datenbank gepflegt werden können. Änderungen werden als Commits direkt in das Gitea‑Repository geschrieben. Woodpecker baut daraufhin und Fly.io deployt.
Inhalte (Headless, Git‑basiert)
- Editierbare Dateien im Repo:
src/content/events.jsonsrc/content/gallery.json
- Bilder:
public/images/* - Die Startseite importiert diese Dateien und rendert sie.
Admin & Auth
- Admin‑Seite:
https://<domain>/admin(kein Link im UI, nur direkter Pfad) - Login via Gitea OAuth:
/api/auth/login→ Gitea →/api/auth/callback- Session als HttpOnly‑Cookie, CSRF‑Cookie für POSTs
- Speichern:
/api/savevalidiert und committet die Dateien via Gitea‑API
Lokale Entwicklung
.env.examplenach.env.localkopieren und ausfüllen (Gitea OAuth‑App mit Redirecthttp://localhost:4321/api/auth/callback).- Installieren und starten:
npm install
npm run dev:local
- Browser öffnen:
http://localhost:4321/admin→ Mit Gitea anmelden → Inhalte bearbeiten → Speichern.
Hinweis: Für lokales HTTP sind Cookies ohne Secure gesetzt. In Produktion werden Cookies automatisch als Secure markiert.
Produktion (Fly.io)
- Dockerfile baut Astro als SSR und startet
node dist/server/entry.mjsauf Port 3000. - Secrets auf Fly.io setzen (Beispiele, Werte anpassen):
flyctl secrets set \
OAUTH_PROVIDER=gitea \
OAUTH_CLIENT_ID=... \
OAUTH_CLIENT_SECRET=... \
OAUTH_AUTHORIZE_URL=https://git.bookageek.ch/login/oauth/authorize \
OAUTH_TOKEN_URL=https://git.bookageek.ch/login/oauth/access_token \
OAUTH_USERINFO_URL=https://git.bookageek.ch/api/v1/user \
GITEA_BASE=https://git.bookageek.ch \
GITEA_OWNER=OWNER \
GITEA_REPO=REPO \
GITEA_TOKEN=PAT \
GIT_BRANCH=main \
SESSION_SECRET=RANDOM \
CSRF_SECRET=RANDOM
- Optional:
PUBLIC_BASE_URL=https://gallus-pub.chsetzen.
Wichtige Pfad‑Konvention
- Statische Assets immer unter
public/ablegen (z. B.public/images/...). - Die Admin‑Uploads schreiben automatisch nach
public/images/*.
Befehle
npm install– Abhängigkeitennpm run dev– Standard Devnpm run dev:local– Dev mit.env.local(OAuth/Gitea)npm run build– Produktion buildennpm run preview– Build lokal testen
Sicherheit
- Kein PAT im Browser – nur serverseitig in Secrets
- CSRF‑Schutz und Pfad‑Allowlist
- Optional nutzerbasierte Zulassung:
OAUTH_ALLOWED_USERS(Komma‑Liste)