fix(keychain): single source of truth for key list + robust USER fallback
Addresses Greptile review on PR #407: - P1: setup-keychain.sh ALL_KEYS was missing GOOGLE_GENAI_API_KEY and XIAOHONGSHU_API_BASE relative to _load_keychain's inline list, so users manually storing those keys would not see them in --list and the interactive prompt would never offer to set them. Hoist the canonical key list into lib/env.py::KEYCHAIN_KEYS, have get_config() pass it through, and add a parity test that parses ALL_KEYS out of setup-keychain.sh and asserts equality. Drift is now caught at CI time instead of after a user reports a missing key. - P2: os.environ.get("USER", "") silently returned "" under sudo, in Docker without --env USER, or in CI runners that strip USER. The resulting `security find-generic-password -a ""` call would never match items stored by setup-keychain.sh, so all lookups silently returned nothing. Fall back to pwd.getpwuid(os.getuid()).pw_name when USER is absent. The P2 process-listing comment ("secret visible briefly via ps because security has no stdin path for -w") has no clean fix — the README already documents the manual `security add-generic-password` invocation as an alternative for users with strict secret hygiene.
This commit is contained in:
@@ -17,11 +17,14 @@
|
||||
set -euo pipefail
|
||||
|
||||
PREFIX="last30days-"
|
||||
# Mirrors lib/env.py::KEYCHAIN_KEYS — kept in sync via
|
||||
# tests/test_env_keychain.py::test_keychain_keys_match_setup_script.
|
||||
ALL_KEYS=(
|
||||
OPENAI_API_KEY
|
||||
XAI_API_KEY
|
||||
GOOGLE_API_KEY
|
||||
GEMINI_API_KEY
|
||||
GOOGLE_GENAI_API_KEY
|
||||
SCRAPECREATORS_API_KEY
|
||||
APIFY_API_TOKEN
|
||||
AUTH_TOKEN
|
||||
@@ -35,6 +38,7 @@ ALL_KEYS=(
|
||||
OPENROUTER_API_KEY
|
||||
PARALLEL_API_KEY
|
||||
XQUIK_API_KEY
|
||||
XIAOHONGSHU_API_BASE
|
||||
)
|
||||
|
||||
if [[ "${OSTYPE:-}" != darwin* ]]; then
|
||||
|
||||
Reference in New Issue
Block a user