Files
FireAdministration/scripts/sicherung-zugang.ts
T
florian.wilde 14cc4de9b8
Pruefung / pruefung (push) Canceled after 0s
Pruefung / oberflaeche (push) Canceled after 0s
Phase 11: Freigabereife (#16)
2026-09-06 20:05:49 +00:00

52 lines
1.5 KiB
TypeScript

/**
* Die Verbindungsangaben für `pg_dump` und `pg_restore`.
*
* Eigene Datei, weil beide Skripte sie brauchen — und weil ein falsch
* zerlegter Zugang der unangenehmste Fehler in einem Sicherungsskript wäre:
* es liefe durch, schriebe eine Datei, und die enthielte die falsche
* Datenbank. Auffallen würde es beim Zurückspielen, also genau dann, wenn man
* die Sicherung braucht.
*/
export interface Zugang {
benutzer: string;
passwort: string;
datenbank: string;
}
/**
* Zerlegt eine Verbindungszeichenkette in ihre Teile.
*
* Die URL lässt sich nicht als Ganzes an `pg_dump` durchreichen: Prisma hängt
* eigene Parameter an (`?schema=public`), die es mit "invalid URI query
* parameter" ablehnt. Und der Port darin gilt vom Rechner aus — im Container,
* wo die Werkzeuge laufen, liegt Postgres auf 5432.
*/
export function zugangAus(roh: string | undefined): Zugang {
if (!roh) {
throw new Error("DIRECT_DATABASE_URL fehlt.");
}
let url: URL;
try {
url = new URL(roh);
} catch {
throw new Error(`Die Verbindungszeichenkette ist keine gültige URL: ${roh}`);
}
if (!url.protocol.startsWith("postgres")) {
throw new Error(`Erwartet wird eine postgresql://-Adresse, bekommen: ${url.protocol}//`);
}
const datenbank = url.pathname.replace(/^\//, "");
if (!datenbank) {
throw new Error("In der Verbindungszeichenkette fehlt der Datenbankname.");
}
return {
benutzer: decodeURIComponent(url.username),
passwort: decodeURIComponent(url.password),
datenbank,
};
}