ulysses/services
Ethan 33bf975597
Stop GET /api/search/config from leaking the Brave API key (#1661) (#1750)
get_search_config returned SEARCH_CONFIG.copy(), and update_search_config
cached the decrypted Brave key into that shared global at startup
(app_initializer), so the unauthenticated /api/search/config route exposed
the operator's key. The cache was dead weight: brave_search reads its key
via _get_provider_key (settings/env), never SEARCH_CONFIG.

- update_search_config: no longer stores the api_key in the shared global
  (accepted for backward compat; provider keys are read on demand).
- get_search_config: scrub any string-valued credential field before
  returning, preserving the has_api_key presence flag.

No schema change; brave_search/_get_provider_key untouched. Adds regression
tests.

Fixes #1661

Co-authored-by: Ethan <23321960+0xLeathery@users.noreply.github.com>
2026-06-03 13:24:17 +09:00
..
docs Odysseus v1.0 2026-05-31 23:58:26 +09:00
faces Odysseus v1.0 2026-05-31 23:58:26 +09:00
hwfit fix(hwfit): detect unified-memory NVIDIA (Grace Blackwell GB10 / DGX Spark) instead of 'No GPU' (#1340) (#1372) 2026-06-03 03:19:39 +09:00
memory Rebuild memory vector index from the full saved set, not just the audited owner (#1747) 2026-06-03 11:36:24 +09:00
research Skip invalid research service sources (#1583) 2026-06-03 08:57:09 +09:00
search Stop GET /api/search/config from leaking the Brave API key (#1661) (#1750) 2026-06-03 13:24:17 +09:00
shell Odysseus v1.0 2026-05-31 23:58:26 +09:00
stt STT: clean temp audio files on transcription failure 2026-06-02 20:43:24 +09:00
tts TTS: include mp3 files in cache stats 2026-06-02 20:43:29 +09:00
youtube Odysseus v1.0 2026-05-31 23:58:26 +09:00
__init__.py Odysseus v1.0 2026-05-31 23:58:26 +09:00