Server-Sanity-Check: api_key, das wie bcrypt-Hash aussieht, beim Start ablehnen/warnen #4

Open
opened 2026-05-20 16:42:45 +02:00 by Brummel · 0 comments
Owner

Idee

In server/src/config.rs::validate_and_index_users einen Check ergänzen, der api_key-Werte ablehnt (oder zumindest mit tracing::warn! flaggt), die wie ein bcrypt-Hash aussehen (starts_with("$2") && len > 50 o.ä.).

Warum

Das BLOCKER-Issue zum Watch-Auth-bcrypt ist genau dieser Fehler — bcrypt-Hashes im api_key-Feld, weil das Format optisch dem web_password-Feld gleicht, der Server aber Plaintext erwartet. Die Folge sind stille 401s ohne Hinweis auf die Ursache.

Ein Server-Start-Check würde den Fehler beim Reload sofort sichtbar machen, statt erst bei der ersten echten Watch-Anfrage.

Variante

  • Warn: tracing::warn! mit Hinweis, dass dieser Wert vermutlich nie matchen wird. Lässt den Server starten, bleibt vorwärtskompatibel falls jemand absichtlich $2-Strings als Keys verwendet.
  • Err: Server startet nicht, klare Fehlermeldung. Strikter, aber schliesst Edge-Cases aus.

Tendenz: Warn-only, weil API-Keys grundsätzlich beliebige Strings sein dürfen sollen.

Test-Disziplin

Per CLAUDE.md-Regel „jeder Bugfix braucht einen Test-Case" — Unit-Test in config.rs, der validate_and_index_users mit einem $2b$12$…-Wert füttert und die Warn/Err-Reaktion verifiziert.

## Idee In `server/src/config.rs::validate_and_index_users` einen Check ergänzen, der `api_key`-Werte ablehnt (oder zumindest mit `tracing::warn!` flaggt), die wie ein bcrypt-Hash aussehen (`starts_with("$2") && len > 50` o.ä.). ## Warum Das `BLOCKER`-Issue zum Watch-Auth-bcrypt ist genau dieser Fehler — bcrypt-Hashes im `api_key`-Feld, weil das Format optisch dem `web_password`-Feld gleicht, der Server aber Plaintext erwartet. Die Folge sind stille 401s ohne Hinweis auf die Ursache. Ein Server-Start-Check würde den Fehler beim Reload sofort sichtbar machen, statt erst bei der ersten echten Watch-Anfrage. ## Variante - **Warn**: `tracing::warn!` mit Hinweis, dass dieser Wert vermutlich nie matchen wird. Lässt den Server starten, bleibt vorwärtskompatibel falls jemand absichtlich `$2`-Strings als Keys verwendet. - **Err**: Server startet nicht, klare Fehlermeldung. Strikter, aber schliesst Edge-Cases aus. Tendenz: **Warn-only**, weil API-Keys grundsätzlich beliebige Strings sein dürfen sollen. ## Test-Disziplin Per CLAUDE.md-Regel „jeder Bugfix braucht einen Test-Case" — Unit-Test in `config.rs`, der `validate_and_index_users` mit einem `$2b$12$…`-Wert füttert und die Warn/Err-Reaktion verifiziert.
Brummel added the idea label 2026-05-20 16:42:45 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Brummel/doctate#4