feat(backend): reject non-positive token TTLs at config load
Every duration in the config is a token TTL (access, refresh, content). A zero or negative value mints already-expired tokens — no login, no media playback — and previously loaded silently. parseDuration now rejects <= 0 with a clear error, so misconfiguration fails fast at startup instead of mysteriously at runtime. The AuthService itself stays permissive (it's constructed directly in tests with arbitrary TTLs); config load is the gate. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -92,6 +92,10 @@ func Load() (*Config, error) {
|
||||
return def
|
||||
}
|
||||
|
||||
// parseDuration parses a duration env var. Every duration in this config is a
|
||||
// token TTL, which must be strictly positive — a zero/negative TTL would mint
|
||||
// already-expired tokens (no login, no media playback) — so reject those here
|
||||
// rather than fail mysteriously at runtime.
|
||||
parseDuration := func(key, def string) time.Duration {
|
||||
raw := defaultStr(key, def)
|
||||
d, err := time.ParseDuration(raw)
|
||||
@@ -99,6 +103,10 @@ func Load() (*Config, error) {
|
||||
errs = append(errs, fmt.Errorf("%s: invalid duration %q: %w", key, raw, err))
|
||||
return 0
|
||||
}
|
||||
if d <= 0 {
|
||||
errs = append(errs, fmt.Errorf("%s must be positive, got %q", key, raw))
|
||||
return 0
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user