KeiSeiKit-1.0/install/preflight/google-vertex.sh
Parfii-bot 15e0370003 fix(install,router): close 5 HIGH audit findings
1. HIGH-1: onboarding ↔ kei-model-router связка
   До: onboarding мастер писал ~/.claude/config/onboarding.toml,
   но router его не читал — выбор провайдера декоративный.
   После: lib-onboarding.sh::onboarding_write_config доп. пишет
   ~/.claude/config/user-model-override.toml; registry.rs::Registry
   получил load_user_override() возвращающий UserModelOverride.
   Приоритет: --pinned > user-override > agent-profiles default_model_ref.
   2 новых теста (round-trip TOML, optional transport).

2. HIGH-2: eval "$install_cmd" → bash -c "$install_cmd"
   До: lib-preflight.sh::preflight_offer_install делал eval.
   После: bash -c с явным subshell + печать команды юзеру до запуска.

3. HIGH-3: codex.sh regex false-pass
   До: grep -qiE "logged.in|active" пропускал "not logged in" как pass.
   После: сначала negative-pattern (not logged|signed out|please log in),
   потом positive (\blogged in\b|status: active|auth: yes).

4. HIGH-4: path traversal в source preflight
   До: lib-preflight.sh::preflight_run делал source без валидации
   provider id — `../../../evil` сработал бы.
   После: whitelist regex ^[a-z0-9][a-z0-9_-]{0,63}$ + realpath
   проверка что resolved путь не вышел за PREFLIGHT_DIR.

5. HIGH-5: curl|sh без verification
   ollama-local.sh + google-vertex.sh теперь печатают предупреждение
   что Linux-установка тянет shell-скрипт с внешнего сервера без
   проверки хэша/подписи, и предлагают альтернативу.

MEDIUM попутно:
   - anthropic-bedrock.sh: один вызов aws sts get-caller-identity
     вместо двух (экономит 1-3с), различает cred-error от network
     по тексту stderr, маскирует account ID в ARN перед печатью.
   - mlx-local.sh: pip install --user mlx-lm вместо global pip install
     (не требует sudo, не загрязняет system Python).

Тесты: cargo test --lib 80/80, bash -n всех изменённых файлов чисто.
2026-05-17 16:28:33 +08:00

34 lines
1.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# shellcheck shell=bash
# preflight/google-vertex.sh — gcloud CLI + service-account JSON.
preflight_check_google_vertex() {
if ! command -v gcloud >/dev/null 2>&1; then
local cmd
case "$(uname -s)" in
Darwin) cmd="brew install --cask google-cloud-sdk" ;;
Linux)
echo " ⚠ Linux установка gcloud тянет скрипт с sdk.cloud.google.com" >&2
echo " и выполняет его как bash — без проверки хэша." >&2
echo " Альтернатива: пакет из репов apt/dnf, либо ручная установка по" >&2
echo " https://cloud.google.com/sdk/docs/install#linux" >&2
cmd="curl https://sdk.cloud.google.com | bash"
;;
*) cmd="см. https://cloud.google.com/sdk/docs/install" ;;
esac
preflight_offer_install "gcloud CLI" "$cmd" || return 1
fi
# Проверяем что выбран project.
local project
project="$(gcloud config get-value project 2>/dev/null)"
if [ -z "$project" ] || [ "$project" = "(unset)" ]; then
echo "" >&2
echo " ⚠ GCP project не выбран." >&2
echo " Запустите: gcloud auth login && gcloud config set project YOUR_PROJECT_ID" >&2
echo " Также установите GOOGLE_APPLICATION_CREDENTIALS на путь к service-account JSON." >&2
echo "" >&2
return 1
fi
echo " ✓ gcloud CLI: $(gcloud --version 2>&1 | head -1)" >&2
echo " ✓ project: $project" >&2
return 0
}