Geheimer Vorschau-Link: /vorschau/<subdomain>/<token> setzt ein Cookie nur fuer diese Preview

- websiteProjects.shareToken (scripts/vorschau-link-setup.mjs)
- POST/DELETE /api/admin/website-projects/:id/vorschau-link fuer Mitarbeiter (neu erzeugen / abschalten)
- GET /api/vorschau-link/pruefen fuer die Login-Pruefung der Previews (preview-portal /auth/verify)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-26 17:59:23 +00:00
1 parent 594aa9196a
commit 2873638b1c
6 files changed
+368

No files matched your search

+4
View File
@@ -41,6 +41,7 @@ import { minutenJob as shopMinutenJob, stuendlicherJob as shopStuendlicherJob, t
import { zeitenAboJob, zeitenErinnerungsJob } from './services/zeiten/jobs.js'
import giteaWebhookRoutes from './routes/webhook/gitea.js'
import pushTimeRoutes from './routes/pushTime.js'
import { vorschauLinkSeite, vorschauLinkPruefung } from './routes/vorschauLink.js'
import adminGiteaRoutes from './routes/admin/gitea.js'
import adminPreviewRoutes from './routes/admin/preview.js'
import adminWebsiteProjectsRoutes from './routes/admin/websiteProjects.js'
@@ -132,6 +133,9 @@ app.use('/api/admin/finanzen', adminFinanzenRoutes)
app.use('/webhook', giteaWebhookRoutes)
// Push-Zeitmail: Zeit eines Git-Pushes per Link aus der Mail eintragen (ohne Login, signierter Token)
app.use('/zeit', express.urlencoded({ extended: false, limit: '4kb' }), pushTimeRoutes)
// Geheimer Vorschau-Link: Seite ohne Login (Cookie + Weiterleitung) und Pruefung fuer die Preview-Anmeldung
app.use('/vorschau', vorschauLinkSeite())
app.use('/api/vorschau-link', vorschauLinkPruefung())
app.get('/api/health', async (_req, res) => {
const dbAccess = await verifyDatabaseAccess()