fix(config): Datenbank-Passwort mit Sonderzeichen bricht den Start

Die Verbindungszeichenkette wurde mit fmt.Sprintf zusammengeklebt. Ein
Passwort mit % und @ ergab eine kaputte URL:

  parse "postgres://aether:8UoNj%CoWJ7ze@qy@localhost:5432/aether":
  invalid URL escape "%Co"

Der Server kam nicht über die Migrationen hinaus. Die key=value-Form hätte
dasselbe Problem mit einem Leerzeichen gehabt, nur stiller.

config.DSN() liefert jetzt eine postgres://-URL, gebaut mit net/url und
net.JoinHostPort (klammert IPv6). pgxpool und golang-migrate nehmen sie
beide unverändert – dsnToURL, splitDSN, indexByte und orDefault in pkg/db
sind ersatzlos entfallen. Test deckt %, @, :, /, Leerzeichen und IPv6 ab.

Dazu: DB_HOST und DB_PORT fehlten in der schlanken .env.example, weshalb
localhost statt postgres gegriffen hat. APP_ENV ergänzt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Opus 5 committed 2026-08-24 11:20:01 +02:00
1 parent 16ab6f385b
commit 35ebf609b7
5 files changed
+153 -71

No files matched your search

+11
View File
@@ -7,6 +7,11 @@
# ── Pflicht ───────────────────────────────────────────────────────────────────
# Steuert nur die Form der Logausgabe: `development` schreibt sie farbig und
# mehrzeilig, `production` als JSON für deinen Logsammler.
APP_ENV=production
# Wie die Cloud von außen erreichbar ist. Wird für OIDC-Rücksprünge,
# WOPI-Rückrufe und Freigabe-Links benutzt – ein falscher Wert fällt erst
# dort auf, nicht beim Start.
@@ -15,8 +20,14 @@ PUBLIC_URL=https://cloud.example.com
# openssl rand -hex 32
SESSION_SECRET=
# `postgres` ist der Dienstname aus dem Compose, nicht localhost – aus dem
# Container heraus ist localhost er selbst. Ohne diese Zeile greift die
# Voreinstellung `localhost`, und der Start endet in „migrations failed".
DB_HOST=postgres
DB_PORT=5432
DB_NAME=aether
DB_USER=aether
# Jedes Zeichen ist erlaubt, auch % @ : / und Leerzeichen.
DB_PASSWORD=
# Wohin die Dateien auf dem Wirt kommen. Ein gewöhnliches Verzeichnis, kein