#!/usr/bin/env bash # verify_user_key_self_service.sh — 用户 key 自助验收入口 # # 本脚本为 Phase 0 skeleton。验收逻辑在 Phase 3(vNext.2)实现。 # 当前仅验证环境就绪与目录规范。 # # 使用方式: # bash scripts/acceptance/verify_user_key_self_service.sh --help # bash scripts/acceptance/verify_user_key_self_service.sh [--env-check] set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" TS="$(date +%Y%m%d_%H%M%S)" ARTIFACT_DIR="${ARTIFACT_DIR:-$ROOT_DIR/artifacts/user-key-self-service/${TS}}" CRM_BASE="${CRM_BASE:-https://sub.tksea.top/portal-admin-api}" # --- helpers --- die() { echo "FATAL: $*" >&2; exit 1; } info() { echo "INFO: $*"; } ok() { echo "OK: $*"; } cmd_help() { cat </ HELP exit 0 } cmd_env_check() { info "env-check mode" mkdir -p "$ARTIFACT_DIR" if [[ -z "${CRM_BASE}" ]]; then warn "CRM_BASE is empty" else ok "CRM_BASE=${CRM_BASE}" fi if [[ -n "${CRM_ADMIN_TOKEN:-}" ]]; then ok "CRM_ADMIN_TOKEN is set" local whoami whoami="$(curl -sS --noproxy '*' -H "Authorization: Bearer $CRM_ADMIN_TOKEN" "${CRM_BASE}/api/admin/session" 2>/dev/null)" || true if echo "${whoami}" | python3 -c "import sys,json; d=json.load(sys.stdin); d.get('authenticated',False) or d.get('username','')" 2>/dev/null; then ok "Admin session: valid" else warn "Admin session: invalid. Phase 3 will establish login flow." fi else info "CRM_ADMIN_TOKEN not set — skipped (Phase 3 will implement login)" fi # Check portal-admin-api reachability local health health="$(curl -sS --noproxy '*' "${CRM_BASE}/healthz" 2>/dev/null)" || true if [[ "${health}" == "ok" ]]; then ok "CRM health: OK" else warn "CRM health: ${health:-unreachable}" fi # Write env-check summary local summary_file="$ARTIFACT_DIR/env-check-summary.json" python3 -c " import json, sys, datetime, os d = { 'timestamp': datetime.datetime.now().isoformat(), 'mode': 'env_check', 'crm_base': os.environ.get('CRM_BASE', ''), 'crm_reachable': '${health:-}' == 'ok', 'admin_token_set': bool(os.environ.get('CRM_ADMIN_TOKEN', '')), 'phase': 'skeleton', 'note': 'Full verification deferred to vNext.2 (Phase 3)' } with open(sys.argv[1], 'w') as f: json.dump(d, f, ensure_ascii=False, indent=2) " "$summary_file" ok "env-check summary: $summary_file" } # --- main --- case "${1:---help}" in --help|-h) cmd_help ;; --env-check) cmd_env_check ;; *) cmd_help ;; esac