# 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.json` - `src/content/gallery.json` - Bilder: `public/images/*` - Die Startseite importiert diese Dateien und rendert sie. ## Admin & Auth - Admin‑Seite: `https:///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/save` validiert und committet die Dateien via Gitea‑API ## Lokale Entwicklung 1) `.env.example` nach `.env.local` kopieren und ausfüllen (Gitea OAuth‑App mit Redirect `http://localhost:4321/api/auth/callback`). 2) Installieren und starten: ```bash npm install npm run dev:local ``` 3) 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.mjs` auf 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.ch` setzen. ## 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ängigkeiten - `npm run dev` – Standard Dev - `npm run dev:local` – Dev mit `.env.local` (OAuth/Gitea) - `npm run build` – Produktion builden - `npm 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)