fix(config): read nested options such as OIDC__CLIENT_ID from environment variables
Merged
D3
5d ago+124+124+012345678901234567890123456789-6-6-0123456789
The server ignored nested environment variables such as OIDC__PROVIDER_URL. The environment source had no separator, so OIDC could only be configured in config.toml.
- Nested options now use
__as the separator.OIDC__CLIENT_IDsetsclient_idin[oidc]. Flat variables such asSECRET_KEYandTRUSTED_PROXY_HOPSwork as before. allowed_redirect_urlsalso accepts a comma-separated string, soOIDC__ALLOWED_REDIRECT_URLS=myapp://oidc,https://app.example.com/oidcworks. Without it, an environment-only OIDC setup can't log anyone in, because the server refuses OIDC login while that list is empty.- The README explains the separator and the list format.
RateLimiter::checknow notes that failed attempts count toward the limit on purpose. If they didn't, password guessing would be unlimited.
Proof: a new unit test sets OIDC__* variables. It failed before the change ("OIDC__* variables should set oidc") and passes now. A second test checks that an environment variable overrides one option of a config.toml section. cargo fmt, cargo clippy -D warnings and cargo test pass.
Reviewed with sol-loop: 1 round with gpt-6.1-sol on high.
Sol verdict: approved
Changes made by Claude Opus 5.5 in Claude Code (T3 Code).