mirror of https://github.com/veypi/OneAuth.git
fix bug
parent
26bd0bfd29
commit
5daab97008
@ -1,3 +1,11 @@
|
|||||||
# VBase
|
# VBase
|
||||||
|
|
||||||
基于 vhtml/vigo 框架实现,提供用户认证、数据库存储、文件存储等功能。
|
基于 vhtml/vigo 框架实现,提供用户认证、数据库存储、文件存储等功能。
|
||||||
|
|
||||||
|
## 测试
|
||||||
|
|
||||||
|
```bash
|
||||||
|
//重置数据库
|
||||||
|
go run cli/main.go db drop && go run cli/main.go db migrate
|
||||||
|
go run cli/main.go -p 4000
|
||||||
|
```
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
#
|
||||||
|
# start.sh
|
||||||
|
# Copyright (C) 2026 veypi <i@veypi.com>
|
||||||
|
#
|
||||||
|
# Distributed under terms of the MIT license.
|
||||||
|
#
|
||||||
|
|
||||||
|
go run cli/main.go db drop -y
|
||||||
|
|
||||||
@ -0,0 +1,224 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
BASE_URL="http://localhost:4000"
|
||||||
|
TIMESTAMP=$(date +%s)
|
||||||
|
USERNAME="user_$TIMESTAMP"
|
||||||
|
PASSWORD="password123"
|
||||||
|
EMAIL="${USERNAME}@example.com"
|
||||||
|
ORG_CODE="org_$TIMESTAMP"
|
||||||
|
ORG_NAME="Org $TIMESTAMP"
|
||||||
|
|
||||||
|
echo "Testing against $BASE_URL"
|
||||||
|
echo "User: $USERNAME"
|
||||||
|
echo "Org: $ORG_CODE"
|
||||||
|
|
||||||
|
# Helper function to check for errors
|
||||||
|
check_error() {
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: $1"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_http_code() {
|
||||||
|
RESPONSE=$1
|
||||||
|
EXPECTED=$2
|
||||||
|
|
||||||
|
if [ -z "$RESPONSE" ] || [ "$RESPONSE" == "null" ]; then
|
||||||
|
if [ "$EXPECTED" == "200" ]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Expected code $EXPECTED, got empty response"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if .code exists and is a number. If not, assume 200.
|
||||||
|
CODE=$(echo "$RESPONSE" | jq -r 'if (.code | type) == "number" then .code else 200 end')
|
||||||
|
|
||||||
|
if [ "$CODE" != "$EXPECTED" ] && [ "$EXPECTED" != "200" ]; then
|
||||||
|
echo "Expected code $EXPECTED, got $CODE"
|
||||||
|
echo "Response: $RESPONSE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# Handle implicit 200 (when code field is missing or not a number)
|
||||||
|
if [ "$EXPECTED" == "200" ] && [ "$CODE" != "200" ] && [ "$CODE" != "0" ]; then
|
||||||
|
echo "Expected code 200, got $CODE"
|
||||||
|
echo "Response: $RESPONSE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "1. Registering User..."
|
||||||
|
REGISTER_RES=$(curl -s -X POST "$BASE_URL/api/auth/register" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"username\": \"$USERNAME\", \"password\": \"$PASSWORD\", \"email\": \"$EMAIL\"}")
|
||||||
|
echo "Register Response: $REGISTER_RES"
|
||||||
|
check_http_code "$REGISTER_RES" 200
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "2. Logging in..."
|
||||||
|
LOGIN_RES=$(curl -s -X POST "$BASE_URL/api/auth/login" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"username\": \"$USERNAME\", \"password\": \"$PASSWORD\"}")
|
||||||
|
echo "Login Response: $LOGIN_RES"
|
||||||
|
check_http_code "$LOGIN_RES" 200
|
||||||
|
|
||||||
|
ACCESS_TOKEN=$(echo "$LOGIN_RES" | jq -r '.access_token')
|
||||||
|
REFRESH_TOKEN=$(echo "$LOGIN_RES" | jq -r '.refresh_token')
|
||||||
|
|
||||||
|
if [ -z "$ACCESS_TOKEN" ] || [ "$ACCESS_TOKEN" == "null" ]; then
|
||||||
|
echo "Failed to get access token"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Got Access Token"
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "3. Get User Info (Me)..."
|
||||||
|
ME_RES=$(curl -s -X GET "$BASE_URL/api/auth/me" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN")
|
||||||
|
echo "Me Response: $ME_RES"
|
||||||
|
check_http_code "$ME_RES" 200
|
||||||
|
USER_ID=$(echo "$ME_RES" | jq -r '.id')
|
||||||
|
echo "User ID: $USER_ID"
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "4. Update User Info (Patch Me)..."
|
||||||
|
UPDATE_ME_RES=$(curl -s -X PATCH "$BASE_URL/api/auth/me" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"nickname\": \"Updated Nickname\"}")
|
||||||
|
echo "Update Me Response: $UPDATE_ME_RES"
|
||||||
|
check_http_code "$UPDATE_ME_RES" 200
|
||||||
|
NEW_NICKNAME=$(echo "$UPDATE_ME_RES" | jq -r '.nickname')
|
||||||
|
if [ "$NEW_NICKNAME" != "Updated Nickname" ]; then
|
||||||
|
echo "Nickname update failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "5. Change Password..."
|
||||||
|
CHANGE_PW_RES=$(curl -s -X POST "$BASE_URL/api/auth/me/change-password" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"old_password\": \"$PASSWORD\", \"new_password\": \"newpassword123\"}")
|
||||||
|
echo "Change Password Response: $CHANGE_PW_RES"
|
||||||
|
check_http_code "$CHANGE_PW_RES" 200
|
||||||
|
|
||||||
|
# Verify login with new password
|
||||||
|
echo "Verifying new password..."
|
||||||
|
LOGIN_NEW_RES=$(curl -s -X POST "$BASE_URL/api/auth/login" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"username\": \"$USERNAME\", \"password\": \"newpassword123\"}")
|
||||||
|
check_http_code "$LOGIN_NEW_RES" 200
|
||||||
|
echo "Login with new password successful"
|
||||||
|
|
||||||
|
# Get new token
|
||||||
|
ACCESS_TOKEN=$(echo "$LOGIN_NEW_RES" | jq -r '.access_token')
|
||||||
|
REFRESH_TOKEN=$(echo "$LOGIN_NEW_RES" | jq -r '.refresh_token')
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "6. Refresh Token..."
|
||||||
|
REFRESH_RES=$(curl -s -X POST "$BASE_URL/api/auth/refresh" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"refresh_token\": \"$REFRESH_TOKEN\"}")
|
||||||
|
echo "Refresh Response: $REFRESH_RES"
|
||||||
|
check_http_code "$REFRESH_RES" 200
|
||||||
|
NEW_ACCESS_TOKEN=$(echo "$REFRESH_RES" | jq -r '.access_token')
|
||||||
|
if [ -z "$NEW_ACCESS_TOKEN" ] || [ "$NEW_ACCESS_TOKEN" == "null" ]; then
|
||||||
|
echo "Failed to refresh token"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
ACCESS_TOKEN=$NEW_ACCESS_TOKEN
|
||||||
|
echo "Token Refreshed"
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "7. Create Organization..."
|
||||||
|
CREATE_ORG_RES=$(curl -s -X POST "$BASE_URL/api/orgs" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"name\": \"$ORG_NAME\", \"code\": \"$ORG_CODE\", \"description\": \"Test Description\"}")
|
||||||
|
echo "Create Org Response: $CREATE_ORG_RES"
|
||||||
|
check_http_code "$CREATE_ORG_RES" 200
|
||||||
|
ORG_ID=$(echo "$CREATE_ORG_RES" | jq -r '.id')
|
||||||
|
echo "Org ID: $ORG_ID"
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "8. Get Organization..."
|
||||||
|
GET_ORG_RES=$(curl -s -X GET "$BASE_URL/api/orgs/$ORG_ID" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN")
|
||||||
|
# Need to pass X-Org-ID or use context?
|
||||||
|
# The get endpoint logic: Router.Get("/{org_id}", ..., setOrgID, auth.VBaseAuth.Perm("org:read"), get)
|
||||||
|
# setOrgID sets org_id from path param.
|
||||||
|
# Perm checks permission for that org_id.
|
||||||
|
# User should have admin role in that org.
|
||||||
|
echo "Get Org Response: $GET_ORG_RES"
|
||||||
|
check_http_code "$GET_ORG_RES" 200
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "9. Update Organization..."
|
||||||
|
UPDATE_ORG_RES=$(curl -s -X PATCH "$BASE_URL/api/orgs/$ORG_ID" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"name\": \"${ORG_NAME}_Updated\"}")
|
||||||
|
echo "Update Org Response: $UPDATE_ORG_RES"
|
||||||
|
check_http_code "$UPDATE_ORG_RES" 200
|
||||||
|
UPDATED_NAME=$(echo "$UPDATE_ORG_RES" | jq -r '.name')
|
||||||
|
if [ "$UPDATED_NAME" != "${ORG_NAME}_Updated" ]; then
|
||||||
|
echo "Failed to update organization name"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "10. List Org Members..."
|
||||||
|
MEMBERS_RES=$(curl -s -X GET "$BASE_URL/api/orgs/$ORG_ID/members" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN")
|
||||||
|
echo "List Members Response: $MEMBERS_RES"
|
||||||
|
check_http_code "$MEMBERS_RES" 200
|
||||||
|
|
||||||
|
# Verify member count is at least 1 (the owner)
|
||||||
|
TOTAL=$(echo "$MEMBERS_RES" | jq -r '.total')
|
||||||
|
if [ "$TOTAL" -lt 1 ]; then
|
||||||
|
echo "Expected at least 1 member, got $TOTAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "11. List Users..."
|
||||||
|
USERS_RES=$(curl -s -X GET "$BASE_URL/api/users" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN")
|
||||||
|
echo "List Users Response: $USERS_RES"
|
||||||
|
check_http_code "$USERS_RES" 200
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "12. Delete Organization..."
|
||||||
|
DELETE_ORG_RES=$(curl -s -X DELETE "$BASE_URL/api/orgs/$ORG_ID" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN")
|
||||||
|
echo "Delete Org Response: $DELETE_ORG_RES"
|
||||||
|
check_http_code "$DELETE_ORG_RES" 200
|
||||||
|
|
||||||
|
# Verify deletion
|
||||||
|
VERIFY_RES=$(curl -s -X GET "$BASE_URL/api/orgs/$ORG_ID" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN")
|
||||||
|
echo "Verify Delete Response: $VERIFY_RES"
|
||||||
|
# Expect 404
|
||||||
|
CODE=$(echo "$VERIFY_RES" | jq -r '.code')
|
||||||
|
if [ "$CODE" != "404" ]; then
|
||||||
|
echo "Organization not deleted properly, got code $CODE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "13. Logout..."
|
||||||
|
LOGOUT_RES=$(curl -s -X POST "$BASE_URL/api/auth/logout" \
|
||||||
|
-H "Authorization: Bearer $ACCESS_TOKEN")
|
||||||
|
echo "Logout Response: $LOGOUT_RES"
|
||||||
|
check_http_code "$LOGOUT_RES" 200
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "All Tests Passed Successfully!"
|
||||||
Loading…
Reference in New Issue