|
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
#
|
|
|
|
|
|
# 未登录访问测试
|
|
|
|
|
|
# 测试内容:验证受保护接口在未登录状态下拒绝访问
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
|
|
# 加载公共库
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
|
|
source "$SCRIPT_DIR/lib.sh"
|
|
|
|
|
|
|
|
|
|
|
|
test_start "未登录访问测试 (None Auth)"
|
|
|
|
|
|
|
|
|
|
|
|
# 检查服务
|
|
|
|
|
|
check_service
|
|
|
|
|
|
|
|
|
|
|
|
# 定义要测试的受保护接口列表
|
|
|
|
|
|
# 格式: "METHOD PATH [BODY]"
|
|
|
|
|
|
PROTECTED_ENDPOINTS=(
|
|
|
|
|
|
"GET /api/auth/me"
|
|
|
|
|
|
"POST /api/auth/logout {}"
|
|
|
|
|
|
"GET /api/users"
|
|
|
|
|
|
"POST /api/users {}"
|
|
|
|
|
|
"GET /api/orgs"
|
|
|
|
|
|
"POST /api/orgs {}"
|
|
|
|
|
|
"GET /api/roles"
|
|
|
|
|
|
"POST /api/roles {}"
|
|
|
|
|
|
"GET /api/settings"
|
|
|
|
|
|
"GET /api/oauth/clients"
|
|
|
|
|
|
"GET /api/oauth/providers"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 遍历测试
|
|
|
|
|
|
for endpoint in "${PROTECTED_ENDPOINTS[@]}"; do
|
|
|
|
|
|
read -r method path body <<< "$endpoint"
|
|
|
|
|
|
|
|
|
|
|
|
step "测试 $method $path (未登录)"
|
|
|
|
|
|
|
|
|
|
|
|
if [ "$method" == "GET" ]; then
|
|
|
|
|
|
RES=$(api_get "$path" "")
|
|
|
|
|
|
elif [ "$method" == "POST" ]; then
|
|
|
|
|
|
RES=$(api_post "$path" "${body:-{}}" "")
|
|
|
|
|
|
elif [ "$method" == "PATCH" ]; then
|
|
|
|
|
|
RES=$(api_patch "$path" "${body:-{}}" "")
|
|
|
|
|
|
elif [ "$method" == "DELETE" ]; then
|
|
|
|
|
|
RES=$(api_delete "$path" "")
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# 提取状态码
|
|
|
|
|
|
# 注意:Vigo 框架可能返回 HTTP 401 或 JSON code 40100
|
|
|
|
|
|
# check_http_code 默认提取 JSON 中的 code
|
|
|
|
|
|
code=$(echo "$RES" | jq -r '.code // 200')
|
|
|
|
|
|
|
|
|
|
|
|
# 允许 401 (Standard HTTP) 或 40100 (Vigo Unauthorized)
|
|
|
|
|
|
if [[ "$code" == "401" || "$code" == "40100" ]]; then
|
|
|
|
|
|
success "访问被拒绝 (Code: $code)"
|
|
|
|
|
|
else
|
|
|
|
|
|
error "期望 401/40100, 实际: $code"
|
|
|
|
|
|
info "响应: $RES"
|
|
|
|
|
|
# 标记失败但不立即退出,以便测试所有接口?
|
|
|
|
|
|
# 这里为了严格性,还是退出吧,或者用 fail_flag
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
test_end
|