From 1f9714d250c7fa850a4b588c7a5ee39600bea236 Mon Sep 17 00:00:00 2001 From: Till JS Date: Fri, 20 Mar 2026 21:12:33 +0100 Subject: [PATCH] docs(devlog): add 2026-03-20 cross-app SSO & infrastructure fixes Co-Authored-By: Claude Opus 4.6 (1M context) --- ...3-20-cross-app-sso-infrastructure-fixes.md | 150 ++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 apps/manacore/apps/landing/src/content/devlog/2026-03-20-cross-app-sso-infrastructure-fixes.md diff --git a/apps/manacore/apps/landing/src/content/devlog/2026-03-20-cross-app-sso-infrastructure-fixes.md b/apps/manacore/apps/landing/src/content/devlog/2026-03-20-cross-app-sso-infrastructure-fixes.md new file mode 100644 index 000000000..9ace8912e --- /dev/null +++ b/apps/manacore/apps/landing/src/content/devlog/2026-03-20-cross-app-sso-infrastructure-fixes.md @@ -0,0 +1,150 @@ +--- +title: 'Cross-App SSO, Infrastructure Fixes & Calendar Deployment' +description: 'Massive Infrastruktur-Session: SSO Cookie-Fix für alle Apps, Calendar-Web auf Local Build migriert, Cross-App API Routing repariert, MinIO Tunnel-Anbindung, und umfangreiche Storage/Docker-Optimierungen.' +date: 2026-03-20 +author: 'Till Schneider' +category: 'infrastructure' +tags: + [ + 'sso', + 'auth', + 'docker', + 'caddy', + 'cors', + 'minio', + 'calendar', + 'mukke', + 'storage', + 'cloudflare', + 'infrastructure', + ] +featured: true +commits: 48 +readTime: 10 +stats: + filesChanged: 194 + linesAdded: 12265 + linesRemoved: 5255 +contributors: + - name: 'Till Schneider' + handle: 'Till-JS' + commits: 48 +workingHours: + start: '2026-03-20T09:00' + end: '2026-03-20T21:00' +--- + +Intensiver Infrastruktur- und Bugfix-Tag mit **48 Commits**: Cross-App SSO endlich funktionsfähig, Calendar-Web von stale GHCR Image auf Local Build migriert, und eine Kette von Routing/CORS/Cookie-Problemen systematisch aufgelöst. + +- **SSO Cookie-Fix** - `SameSite=None` + Session-Cookie bei Login setzen +- **Calendar-Web Migration** - Von veraltetem GHCR Image auf lokalen Docker Build +- **Cross-App API Routing** - `getBaseUrl()` Bug in shared-api-client gefixt +- **CORS & Caddy** - 10+ falsche Reverse-Proxy-Ports korrigiert, CORS für Cross-App erweitert +- **MinIO Tunnel** - Cloudflare Tunnel für `minio.mana.how` eingerichtet +- **Storage & Docker** - Optimierte Dockerfiles, Presigned Multipart, Lifecycle Rules +- **Calendar Features** - CalDAV Sync UI, Recurring Events, Reminders, Composable-Refactoring + +--- + +## 1. Cross-App SSO – Endlich funktionsfähig + +Das Single Sign-On über alle `*.mana.how` Subdomains hatte **drei versteckte Bugs**, die zusammen verhinderten, dass SSO jemals funktionierte: + +### Problem 1: Kein Session-Cookie beim Login + +Die `signIn()` Funktion in `@manacore/shared-auth` nutzte nur den Custom-Endpoint (`/api/v1/auth/login`), der JWT-Tokens zurückgibt aber **kein Session-Cookie setzt**. Nur der native Better Auth Endpoint (`/api/auth/sign-in/email`) setzt das Cookie. + +**Fix:** Nach erfolgreichem JWT-Login wird jetzt zusätzlich der Better Auth Endpoint mit `credentials: 'include'` aufgerufen. + +### Problem 2: `SameSite=Lax` blockiert `fetch()` + +Das Session-Cookie hatte `SameSite=Lax`, was Cookies nur bei Top-Level-Navigationen (Link-Klicks) sendet — **nicht bei programmatischen `fetch()` Requests**. Der SSO-Flow nutzt aber `fetch()` mit `credentials: 'include'`. + +**Fix:** `SameSite=None` wenn `COOKIE_DOMAIN` gesetzt ist (Production). Fallback auf `Lax` für lokale Entwicklung. + +### Problem 3: `getBaseUrl()` Override + +Die `getBaseUrl()` Funktion in `@manacore/shared-api-client` überschrieb **immer** die `baseUrl` mit `window.__PUBLIC_BACKEND_URL__` — egal welche URL der Client eigentlich konfiguriert hatte. Cross-App Clients (Calendar→Todo, Calendar→Contacts) sendeten dadurch alle Requests an den Calendar-Backend. + +**Fix:** Neues `useRuntimeUrl: false` Flag für Cross-App Clients. + +## 2. Calendar-Web: GHCR → Local Build + +`calendar-web` nutzte noch ein veraltetes GHCR Docker Image, das weder die Cross-App URL-Injection noch aktuelle shared-auth Änderungen enthielt. + +**Migration:** + +- Docker-Compose auf `build: context + dockerfile` umgestellt +- Drei fehlende Packages im Dockerfile ergänzt (`patches`, `shared-pwa`, `shared-app-onboarding`) +- Erfolgreich gebaut und deployed + +## 3. Reverse-Proxy Port-Chaos aufgeräumt + +Die `Caddyfile.production` hatte **10+ falsche Ports** — Überbleibsel aus früheren Deployments: + +| Domain | Alt | Neu | +| ----------------- | ---- | ---- | +| mana.how | 5173 | 5000 | +| chat.mana.how | 3000 | 5010 | +| chat-api | 3002 | 3030 | +| todo.mana.how | 5188 | 5011 | +| calendar.mana.how | 5186 | 5012 | +| calendar-api | 3016 | 3032 | +| clock.mana.how | 5187 | 5013 | +| clock-api | 3017 | 3033 | +| contacts.mana.how | 5184 | 5014 | +| grafana | 3100 | 8000 | +| stats | 3200 | 8010 | + +> Hinweis: Routing läuft über Cloudflare Tunnel (korrekte Ports), nicht Caddy. Caddyfile trotzdem aktualisiert für Dokumentation. + +## 4. CORS für Cross-App Integration + +Todo-Backend erlaubte nur `todo.mana.how` und `mana.how` als Origins. Calendar und Contacts konnten keine Task-API-Requests machen. + +**Fix:** `calendar.mana.how` und `contacts.mana.how` zu `CORS_ORIGINS` des Todo-Backends hinzugefügt. + +## 5. MinIO Tunnel-Anbindung + +Mukke-Songs konnten nicht abgespielt werden: Die presigned S3-URLs zeigten auf `minio.mana.how`, aber diese Domain fehlte in der Cloudflare Tunnel Config. + +**Fix:** `minio.mana.how → localhost:9000` zur Cloudflare Tunnel Config hinzugefügt. Audio-Streaming funktioniert jetzt. + +## 6. Storage & Docker Optimierungen + +- **Auth Dockerfile**: Von ~740MB auf ~320MB optimiert +- **Backend Dockerfiles**: DevDeps Pruning für alle Backends +- **shared-storage**: Presigned Multipart Upload, `deleteByPrefix`, `copy`, `getMetadata`, File-Size Validation, Lifecycle Rules +- **Deploy Tracking**: Neues Grafana Dashboard mit PostgreSQL + Pushgateway +- **CD Pipeline**: Mukke-Backend und -Web hinzugefügt, Matrix-Benachrichtigung bei Deploy-Fehlern + +## 7. Calendar Features & Refactoring + +- **CalDAV/iCal Sync UI** — Externe Kalender verbinden und synchronisieren +- **Recurring Events** — Wiederholungsdialog mit RFC 5545 RRULE Support +- **Reminders** — Erinnerungen erstellen und verwalten +- **WeekView Refactoring** — Inline-Logik in Composables extrahiert (1600→903 LOC) +- **Settings vereinfacht** — Von 41 auf 18 persistierte Einstellungen reduziert +- **ViewCarousel** — Touch-Gesten aus UnifiedBar extrahiert +- **Tests** — Composable Unit Tests, WeekView E2E, CalDAV Sync API Tests + +## 8. Weitere Fixes + +- **Picture App** — Migration von Netlify zu Docker/Mac Mini, Dockerfile-Fixes +- **Contacts** — Verwaiste Fotos bei Duplikat-Merge aufräumen, Storage-Optimierung +- **Mukke** — 34 Frontend-Tests, klickbare Songs, Player Error Handling +- **Games** — WhoPixels Hosting unter `whopxl.mana.how` +- **DevBuildBadge** — Shared Component für Development-Build-Kennzeichnung + +--- + +## Zusammenfassung + +| Bereich | Änderungen | +| ------------ | ---------------------------------------------------------------------------------- | +| **SSO/Auth** | 3 Bugs gefixt (Cookie, SameSite, URL-Override), funktioniert jetzt cross-subdomain | +| **Docker** | Calendar-Web migriert, Auth Image halbiert, alle Backend-Dockerfiles optimiert | +| **Routing** | Caddyfile korrigiert, MinIO Tunnel, CORS erweitert | +| **Calendar** | CalDAV, Recurrence, Reminders, Tests, Composable-Refactoring | +| **Storage** | Multipart, Lifecycle, Bulk-Delete, Validation | +| **Testing** | Mukke 34 Tests, Calendar Composables + E2E, Sync API Tests |