mirror of
https://github.com/openimsdk/open-im-server.git
synced 2026-06-26 20:38:25 +08:00
146 lines
3.6 KiB
Bash
Executable File
146 lines
3.6 KiB
Bash
Executable File
#!/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"
|