|
|
#!/usr/bin/env bash
|
|
|
# ============================================================
|
|
|
# get_self_login_platforms 接口测试脚本
|
|
|
#
|
|
|
# 覆盖接口:
|
|
|
# POST /auth/get_user_token
|
|
|
# POST /user/get_self_login_platforms
|
|
|
#
|
|
|
# 说明:
|
|
|
# 本脚本仅做 HTTP 接口测试,不建立 WS 连接。
|
|
|
# ============================================================
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
HOST="${HOST:-http://127.0.0.1:10002}"
|
|
|
USER_ID="${USER_ID:-5694418935}"
|
|
|
PLATFORM_ID="${PLATFORM_ID:-2}"
|
|
|
ADMIN_TOKEN="${ADMIN_TOKEN:-}"
|
|
|
OPENIM_SECRET="${OPENIM_SECRET:-openIM123}"
|
|
|
ADMIN_USER_ID="${ADMIN_USER_ID:-imAdmin}"
|
|
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
case "$1" in
|
|
|
--host) HOST="$2"; shift 2 ;;
|
|
|
--user-id) USER_ID="$2"; shift 2 ;;
|
|
|
--platform-id) PLATFORM_ID="$2"; shift 2 ;;
|
|
|
*)
|
|
|
echo "未知参数: $1"
|
|
|
exit 1
|
|
|
;;
|
|
|
esac
|
|
|
done
|
|
|
|
|
|
need_cmd() {
|
|
|
command -v "$1" >/dev/null 2>&1 || {
|
|
|
echo "缺少依赖命令: $1"
|
|
|
exit 1
|
|
|
}
|
|
|
}
|
|
|
|
|
|
need_cmd curl
|
|
|
need_cmd jq
|
|
|
|
|
|
op_id() {
|
|
|
echo "self-login-platforms-test-$$-$(date +%s%N)"
|
|
|
}
|
|
|
|
|
|
get_admin_token() {
|
|
|
local uid body resp token last_resp
|
|
|
local -a candidates=("${ADMIN_USER_ID}" "openIM123456" "imAdmin")
|
|
|
last_resp=""
|
|
|
|
|
|
for uid in "${candidates[@]}"; do
|
|
|
body="{\"secret\":\"${OPENIM_SECRET}\",\"userID\":\"${uid}\"}"
|
|
|
resp="$(curl -sS -X POST "${HOST}/auth/get_admin_token" \
|
|
|
-H "Content-Type: application/json" \
|
|
|
-H "operationID: $(op_id)" \
|
|
|
-d "$body")"
|
|
|
last_resp="$resp"
|
|
|
|
|
|
token="$(python3 - <<'PY' "$resp"
|
|
|
import json
|
|
|
import sys
|
|
|
|
|
|
raw = sys.argv[1]
|
|
|
try:
|
|
|
obj = json.loads(raw)
|
|
|
except Exception:
|
|
|
print("")
|
|
|
raise SystemExit(0)
|
|
|
|
|
|
token = ""
|
|
|
if isinstance(obj, dict):
|
|
|
data = obj.get("data")
|
|
|
if isinstance(data, dict):
|
|
|
token = data.get("token") or data.get("Token") or ""
|
|
|
if not token:
|
|
|
token = obj.get("token") or obj.get("Token") or ""
|
|
|
print(token)
|
|
|
PY
|
|
|
)"
|
|
|
if [[ -n "$token" ]]; then
|
|
|
echo "自动获取管理员 token 成功,userID=${uid}" >&2
|
|
|
printf '%s' "$token"
|
|
|
return 0
|
|
|
fi
|
|
|
done
|
|
|
|
|
|
echo "get_admin_token raw response: $last_resp" >&2
|
|
|
echo "自动获取管理员 token 失败,请检查 HOST/OPENIM_SECRET/ADMIN_USER_ID 或直接设置 ADMIN_TOKEN" >&2
|
|
|
exit 1
|
|
|
}
|
|
|
|
|
|
if [[ -z "${ADMIN_TOKEN}" ]]; then
|
|
|
echo "==> 1) ADMIN_TOKEN 未设置,尝试自动获取管理员 token"
|
|
|
ADMIN_TOKEN="$(get_admin_token)"
|
|
|
fi
|
|
|
|
|
|
echo "==> 2) 获取用户 token"
|
|
|
TOKEN_RESP=$(curl -sS -X POST \
|
|
|
-H "Content-Type: application/json" \
|
|
|
-H "operationID: $(op_id)" \
|
|
|
-H "token: ${ADMIN_TOKEN}" \
|
|
|
-d "{\"userID\":\"${USER_ID}\",\"platformID\":${PLATFORM_ID}}" \
|
|
|
"${HOST}/auth/get_user_token")
|
|
|
|
|
|
ERR_CODE=$(echo "${TOKEN_RESP}" | jq -r '.errCode // "null"')
|
|
|
if [[ "${ERR_CODE}" != "0" ]]; then
|
|
|
echo "获取 token 失败: ${TOKEN_RESP}"
|
|
|
exit 1
|
|
|
fi
|
|
|
TOKEN=$(echo "${TOKEN_RESP}" | jq -r '.data.token // empty')
|
|
|
if [[ -z "${TOKEN}" ]]; then
|
|
|
echo "token 为空: ${TOKEN_RESP}"
|
|
|
exit 1
|
|
|
fi
|
|
|
echo "token 获取成功, userID=${USER_ID}"
|
|
|
|
|
|
echo "==> 3) 调用 /user/get_self_login_platforms"
|
|
|
RESP=$(curl -sS -X POST \
|
|
|
-H "Content-Type: application/json" \
|
|
|
-H "operationID: $(op_id)" \
|
|
|
-H "token: ${TOKEN}" \
|
|
|
-d '{}' \
|
|
|
"${HOST}/user/get_self_login_platforms")
|
|
|
|
|
|
echo "原始响应: ${RESP}"
|
|
|
ERR_CODE=$(echo "${RESP}" | jq -r '.errCode // "null"')
|
|
|
if [[ "${ERR_CODE}" != "0" ]]; then
|
|
|
echo "接口调用失败: ${RESP}"
|
|
|
exit 1
|
|
|
fi
|
|
|
|
|
|
echo "==> 4) 校验响应结构"
|
|
|
DATA_TYPE=$(echo "${RESP}" | jq -r '(.data | type) // "null"')
|
|
|
if [[ "${DATA_TYPE}" != "array" ]]; then
|
|
|
echo "返回 data 不是数组: ${RESP}"
|
|
|
exit 1
|
|
|
fi
|
|
|
|
|
|
echo "结构校验通过(data 为数组)"
|
|
|
echo "返回 data:"
|
|
|
echo "${RESP}" | jq '.data'
|
|
|
|
|
|
echo "测试通过: get_self_login_platforms"
|