normogen/thoughts/test_auth.sh
goose 8b2c13501f Phase 2.3: JWT Authentication implementation
- Implemented JWT-based authentication system with access and refresh tokens
- Added password hashing service using PBKDF2
- Created authentication handlers: register, login, refresh, logout
- Added protected routes with JWT middleware
- Created user profile handlers
- Fixed all compilation errors
- Added integration tests for authentication endpoints
- Added reqwest dependency for testing
- Created test script and environment example documentation

All changes:
- backend/src/auth/: Complete auth module (JWT, password, claims)
- backend/src/handlers/: Auth, users, and health handlers
- backend/src/middleware/: JWT authentication middleware
- backend/src/config/: Added AppState with Clone derive
- backend/src/main.rs: Fixed imports and added auth routes
- backend/src/db/mod.rs: Changed error handling to anyhow::Result
- backend/Cargo.toml: Added reqwest for testing
- backend/tests/auth_tests.rs: Integration tests
- thoughts/: Documentation updates (STATUS.md, env.example, test_auth.sh)
2026-02-14 20:03:11 -03:00

82 lines
2.4 KiB
Bash
Executable file

#!/bin/bash
# Manual test script for authentication endpoints
BASE_URL="http://127.0.0.1:8000"
echo "=== Testing Normogen Authentication ==="
echo ""
# Test 1: Health check
echo "1. Testing health check..."
curl -s "$BASE_URL/health" | jq .
echo ""
# Test 2: Ready check
echo "2. Testing ready check..."
curl -s "$BASE_URL/ready" | jq .
echo ""
# Test 3: Register a new user
echo "3. Registering a new user..."
EMAIL="test_$(uuidgen | cut -d'-' -f1)@example.com"
REGISTER_RESPONSE=$(curl -s -X POST "$BASE_URL/api/auth/register" \
-H "Content-Type: application/json" \
-d '{"email":"'"$EMAIL"'","password_hash":"hashed_password_placeholder","encrypted_recovery_phrase":"encrypted_phrase_placeholder","recovery_phrase_iv":"iv_placeholder","recovery_phrase_auth_tag":"auth_tag_placeholder"}')
echo "$REGISTER_RESPONSE" | jq .
echo ""
# Extract user_id for later use
USER_ID=$(echo "$REGISTER_RESPONSE" | jq -r '.user_id')
echo "Created user ID: $USER_ID"
echo ""
# Test 4: Login
echo "4. Logging in..."
LOGIN_RESPONSE=$(curl -s -X POST "$BASE_URL/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"'"$EMAIL"'","password_hash":"hashed_password_placeholder"}')
echo "$LOGIN_RESPONSE" | jq .
echo ""
# Extract tokens
ACCESS_TOKEN=$(echo "$LOGIN_RESPONSE" | jq -r '.access_token')
REFRESH_TOKEN=$(echo "$LOGIN_RESPONSE" | jq -r '.refresh_token')
echo "Access Token: ${ACCESS_TOKEN:0:50}..."
echo "Refresh Token: ${REFRESH_TOKEN:0:50}..."
echo ""
# Test 5: Get profile without auth (should fail)
echo "5. Testing profile endpoint WITHOUT auth (should return 401)..."
curl -s "$BASE_URL/api/users/me" -i | head -n 1
echo ""
# Test 6: Get profile with auth (should succeed)
echo "6. Testing profile endpoint WITH auth (should return 200)..."
PROFILE_RESPONSE=$(curl -s "$BASE_URL/api/users/me" \
-H "Authorization: Bearer $ACCESS_TOKEN")
echo "$PROFILE_RESPONSE" | jq .
echo ""
# Test 7: Refresh token
echo "7. Testing refresh token..."
REFRESH_RESPONSE=$(curl -s -X POST "$BASE_URL/api/auth/refresh" \
-H "Content-Type: application/json" \
-d '{"refresh_token":"'"$REFRESH_TOKEN"'}')
echo "$REFRESH_RESPONSE" | jq .
echo ""
# Test 8: Logout
echo "8. Testing logout..."
LOGOUT_RESPONSE=$(curl -s -X POST "$BASE_URL/api/auth/logout" \
-H "Content-Type: application/json" \
-d '{"refresh_token":"'"$REFRESH_TOKEN"'}')
echo "$LOGOUT_RESPONSE" | jq .
echo ""
echo "=== Tests Complete ==="