Files
Laufzettel/src/lib/adressen.ts
T
florian.wildeandClaude Opus 5 40e95dbe5f
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s
feat(auth): Anmeldung, Rollen und Benutzerverwaltung (#21)
OIDC mit Discovery, PKCE, state und nonce; lokaler Login mit argon2 als
Notfallzugang; Rechte in einer Tabelle, Prüfung ausschließlich serverseitig,
Rolle und Aktiv-Status pro Anfrage aus der Datenbank.

Ein unabhängiger Review fand eine offene Weiterleitung: die Präfix-Prüfung des
Rücksprungziels ließ /<TAB>/fremd.example durch, woraus der Browser
//fremd.example macht. Das Ziel wird jetzt aufgelöst und die Herkunft
verglichen. Dazu acht weitere Befunde, alle behoben.

274 Tests.

Closes #7

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-25 01:35:02 +00:00

24 lines
873 B
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Adressen der Anwendung nach aussen (#007).
*
* Massgeblich ist APP_URL, nicht die eingehende Anfrage. Hinter einem Reverse
* Proxy traegt die Anfrage den internen Host und oft auch das falsche Schema –
* eine daraus gebaute Umleitung schickt den Benutzer dann an eine Adresse, die
* er gar nicht erreicht, und eine daraus gebaute OIDC-Rueckruf-Adresse passt
* nicht zu der beim Anbieter hinterlegten.
*
* Die Herkunft der Anfrage dient nur als Notnagel, damit die Anwendung auch ohne
* gesetzte APP_URL nicht stehen bleibt.
*/
export function oeffentlicheAdresse(pfad: string, ersatzHerkunft: string): URL {
const basis = process.env["APP_URL"]?.trim();
if (basis) {
try {
return new URL(pfad, basis);
} catch {
// Eine unbrauchbare APP_URL soll die Anmeldung nicht blockieren.
}
}
return new URL(pfad, ersatzHerkunft);
}