Kenzo 48bae59264
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Merge remote-tracking branch 'origin/main'
# Conflicts:
#	.env.example
#	Dockerfile
#	README.md
#	astro.config.mjs
#	package-lock.json
#	package.json
#	src/content/events.json
#	src/content/gallery.json
#	src/pages/admin/index.astro
#	src/pages/api/auth/callback.ts
#	src/pages/api/auth/login.ts
#	src/pages/api/auth/logout.ts
#	src/pages/api/save.ts
#	src/pages/index.astro
2025-11-08 17:12:07 +01:00

Gallus Pub Website Admin mit Gitea OAuth und Git-Commits

Dieses Projekt stellt eine AstroSeite bereit und enthält eine AdminOberfläche unter /admin, mit der Inhalte (Events, Galerie und Bilder) ohne Datenbank gepflegt werden können. Änderungen werden als Commits direkt in das GiteaRepository geschrieben. Woodpecker baut daraufhin und Fly.io deployt.

Inhalte (Headless, Gitbasiert)

  • 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

  • AdminSeite: https://<domain>/admin (kein Link im UI, nur direkter Pfad)
  • Login via Gitea OAuth:
    • /api/auth/login → Gitea → /api/auth/callback
    • Session als HttpOnlyCookie, CSRFCookie für POSTs
  • Speichern: /api/save validiert und committet die Dateien via GiteaAPI

Lokale Entwicklung

  1. .env.example nach .env.local kopieren und ausfüllen (Gitea OAuthApp mit Redirect http://localhost:4321/api/auth/callback).
  2. Installieren und starten:
npm install
npm run dev:local
  1. 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 PfadKonvention

  • Statische Assets immer unter public/ ablegen (z.B. public/images/...).
  • Die AdminUploads 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
  • CSRFSchutz und PfadAllowlist
  • Optional nutzerbasierte Zulassung: OAUTH_ALLOWED_USERS (KommaListe)
Description
Reposetory für die Website vom Gallus Pub Auftragsgeber: Sabrina Signer Geschäfft: Gallus Pub
Readme 29 MiB
Languages
TypeScript 47.6%
Astro 30.5%
CSS 14.7%
JavaScript 5.2%
Dockerfile 2%