feat(acceptance): support crm session login

This commit is contained in:
phamnazage-jpg
2026-05-28 14:13:07 +08:00
parent e13e6b8fc1
commit 2c2f0ec48e

View File

@@ -29,6 +29,9 @@ SUBSCRIPTION_DAYS="${SUBSCRIPTION_DAYS:-30}"
SUBSCRIPTION_NOTES="${SUBSCRIPTION_NOTES:-hermes remote subscription validation}" SUBSCRIPTION_NOTES="${SUBSCRIPTION_NOTES:-hermes remote subscription validation}"
ARTIFACT_SECURITY_MODE="${ARTIFACT_SECURITY_MODE:-safe}" ARTIFACT_SECURITY_MODE="${ARTIFACT_SECURITY_MODE:-safe}"
ARTIFACT_INCLUDE_SECRETS="${ARTIFACT_INCLUDE_SECRETS:-0}" ARTIFACT_INCLUDE_SECRETS="${ARTIFACT_INCLUDE_SECRETS:-0}"
CRM_COOKIE_JAR="${CRM_COOKIE_JAR:-}"
CRM_ADMIN_USERNAME="${CRM_ADMIN_USERNAME:-}"
CRM_ADMIN_PASSWORD="${CRM_ADMIN_PASSWORD:-}"
mkdir -p "$ART" mkdir -p "$ART"
artifact_redact_key_json() { artifact_redact_key_json() {
@@ -232,17 +235,59 @@ crm_curl_json() {
local method="$1" local method="$1"
local path="$2" local path="$2"
local payload="${3:-}" local payload="${3:-}"
if [[ -n "$payload" ]]; then local -a curl_args
curl -fsS -X "$method" \ curl_args=(-fsS -X "$method")
-H "Authorization: Bearer $crm_token" \ if [[ -n "${crm_token:-}" ]]; then
-H 'Content-Type: application/json' \ curl_args+=(-H "Authorization: Bearer $crm_token")
"${CRM_BASE}${path}" \ elif [[ -n "${crm_cookie_jar:-}" ]]; then
-d "$payload" curl_args+=(-b "$crm_cookie_jar" -c "$crm_cookie_jar")
else else
curl -fsS -X "$method" \ echo "missing CRM auth: set CRM_ADMIN_TOKEN or CRM_COOKIE_JAR/CRM_ADMIN_USERNAME+CRM_ADMIN_PASSWORD" >&2
-H "Authorization: Bearer $crm_token" \ exit 2
"${CRM_BASE}${path}"
fi fi
if [[ -n "$payload" ]]; then
curl_args+=(
-H 'Content-Type: application/json'
"${CRM_BASE}${path}"
-d "$payload"
)
else
curl_args+=("${CRM_BASE}${path}")
fi
curl "${curl_args[@]}"
}
ensure_crm_session_cookie() {
if [[ -n "$CRM_COOKIE_JAR" ]]; then
crm_cookie_jar="$CRM_COOKIE_JAR"
else
crm_cookie_jar="/tmp/$(basename "$ART")-crm-cookie.jar"
fi
rm -f "$crm_cookie_jar"
if [[ -z "$CRM_ADMIN_USERNAME" || -z "$CRM_ADMIN_PASSWORD" ]]; then
echo "CRM admin username/password are required when CRM_ADMIN_TOKEN is unavailable" >&2
exit 2
fi
local login_payload
login_payload="$(python3 - "$CRM_ADMIN_USERNAME" "$CRM_ADMIN_PASSWORD" <<'PY'
import json, sys
username, password = sys.argv[1:3]
print(json.dumps({
'username': username,
'password': password,
}, ensure_ascii=False))
PY
)"
curl -fsS -c "$crm_cookie_jar" -b "$crm_cookie_jar" \
-H 'Content-Type: application/json' \
-X POST \
"${CRM_BASE}/api/admin/session/login" \
-d "$login_payload" > /dev/null
crm_curl_json GET "/api/admin/session" > /dev/null
} }
fetch_remote_host_bearer_token() { fetch_remote_host_bearer_token() {
@@ -343,8 +388,7 @@ PY
crm_token="${CRM_ADMIN_TOKEN:-}" crm_token="${CRM_ADMIN_TOKEN:-}"
if [[ -z "$crm_token" ]]; then if [[ -z "$crm_token" ]]; then
crm_token="$(ssh_cmd "grep ^SUB2API_CRM_ADMIN_TOKEN= /home/ubuntu/sub2api-cn-relay-manager/.env.remote | cut -d= -f2-")" ensure_crm_session_cookie
crm_token="${crm_token##*$'\n'}"
fi fi
host_bearer_token="${HOST_BEARER_TOKEN:-}" host_bearer_token="${HOST_BEARER_TOKEN:-}"
if [[ -z "$host_bearer_token" ]]; then if [[ -z "$host_bearer_token" ]]; then