import { NextResponse } from 'next/server' import { notFound } from 'next/navigation' import { autorisierungsAdresse } from '@/server/kalender/oauth' import { alsAnbieter, faehigkeitFuer, istAnbieter, zustandErzeugen, } from '@/server/kalender/verbinden' import { angemeldet } from '@/server/berechtigung' import { erzwingeFaehigkeit } from '@/server/instanz' export const dynamic = 'force-dynamic' /** * Startet das Verbinden eines Kalenderkontos und leitet zum Anbieter weiter. * * Der Riegel sitzt hier serverseitig: Google gibt es nur daheim. In der * Firmeninstanz liefert diese Route 404 — nicht etwa einen Hinweis, dass es * die Möglichkeit anderswo gäbe. */ export async function GET( _anfrage: Request, { params }: { params: Promise<{ anbieter: string }> }, ) { const { anbieter: roh } = await params if (!istAnbieter(roh)) notFound() const anbieter = alsAnbieter(roh) erzwingeFaehigkeit(faehigkeitFuer(anbieter)) const benutzer = await angemeldet() if (!benutzer) { return NextResponse.redirect( new URL('/anmelden?weiter=%2Fkalenderkonten', process.env.APP_URL ?? ''), ) } try { const zustand = zustandErzeugen(anbieter, benutzer.id) return NextResponse.redirect(autorisierungsAdresse(anbieter, zustand)) } catch (fehler) { const meldung = fehler instanceof Error ? fehler.message : 'Der Anbieter ist nicht eingerichtet.' return NextResponse.redirect( new URL( `/kalenderkonten?fehler=${encodeURIComponent(meldung)}`, process.env.APP_URL ?? '', ), ) } }