curo1305
0fd6930b41
feat(07-01): services/ai_config.py HKDF helpers, ProviderConfig loader, env seed
- Create backend/services/ai_config.py with:
- _derive_ai_settings_key(master_key, provider_id): fresh HKDF per call, salt=provider_id.encode("utf-8"), info=b"ai-provider-settings" (domain-separated from b"cloud-credentials")
- encrypt_api_key / decrypt_api_key: Fernet round-trip without JSON wrapping
- load_provider_config(session): reads is_active=True row from system_settings, decrypts api_key_enc; returns stub ProviderConfig (real class lands in Plan 02)
- seed_system_settings_from_env(session): idempotent insert of default provider on first boot
- _ProviderConfigStub: minimal Pydantic model stub until ai/provider_config.py exists (Plan 02)
- Update backend/main.py: import seed_system_settings_from_env, call in lifespan with try/except so missing table (pre-migration fresh boot) doesn't crash startup
- Round-trip smoke test: encrypt_api_key → decrypt_api_key == original plaintext
2026-06-04 18:50:01 +02:00
..
2026-05-22 08:53:28 +02:00
2026-06-04 18:50:01 +02:00
2026-05-25 18:33:31 +02:00
2026-06-02 16:10:35 +02:00
2026-05-23 20:32:55 +02:00
2026-05-28 21:00:48 +02:00
2026-05-22 19:23:42 +02:00
2026-05-22 09:45:33 +02:00
2026-06-03 18:44:37 +02:00
2026-06-04 18:27:49 +02:00
2026-06-01 15:43:01 +02:00