Files
attune/web/scripts/test-cors.sh
2026-02-04 17:46:30 -06:00

204 lines
6.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# CORS and Proxy Testing Script
# This script helps diagnose CORS and proxy configuration issues
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
print_header() {
echo -e "\n${BLUE}========================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}========================================${NC}\n"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
print_info() {
echo -e "${YELLOW}${NC} $1"
}
# Check if jq is installed
if ! command -v jq &> /dev/null; then
print_error "jq is not installed. Install it for better JSON formatting."
JQ_AVAILABLE=false
else
JQ_AVAILABLE=true
fi
print_header "Attune CORS & Proxy Diagnostic Tool"
# Test 1: Check if API server is running
print_header "Test 1: API Server Availability"
if curl -s -f http://localhost:8080/health > /dev/null 2>&1; then
print_success "API server is running on localhost:8080"
if [ "$JQ_AVAILABLE" = true ]; then
echo -e "\nHealth response:"
curl -s http://localhost:8080/health | jq .
fi
else
print_error "API server is NOT running on localhost:8080"
print_info "Start the API server with: ./scripts/start_services_test.sh"
exit 1
fi
# Test 2: Check if Vite dev server is running
print_header "Test 2: Vite Dev Server Availability"
if curl -s -f http://localhost:3000 > /dev/null 2>&1; then
print_success "Vite dev server is running on localhost:3000"
else
print_error "Vite dev server is NOT running on localhost:3000"
print_info "Start the dev server with: cd web && npm run dev"
exit 1
fi
# Test 3: Test Vite proxy for /auth route
print_header "Test 3: Vite Proxy - /auth Route"
echo "Testing: http://localhost:3000/auth/login"
echo ""
AUTH_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST http://localhost:3000/auth/login \
-H "Content-Type: application/json" \
-d '{"login":"admin","password":"admin"}' 2>&1)
HTTP_CODE=$(echo "$AUTH_RESPONSE" | tail -n1)
RESPONSE_BODY=$(echo "$AUTH_RESPONSE" | head -n-1)
if [ "$HTTP_CODE" = "200" ]; then
print_success "Proxy working! Got 200 response"
if [ "$JQ_AVAILABLE" = true ]; then
echo "$RESPONSE_BODY" | jq .
else
echo "$RESPONSE_BODY"
fi
elif [ "$HTTP_CODE" = "401" ]; then
print_info "Proxy working but credentials invalid (401)"
print_info "This means the proxy is working, just need correct credentials"
else
print_error "Proxy test failed with HTTP $HTTP_CODE"
echo "$RESPONSE_BODY"
fi
# Test 4: Test direct API access with CORS
print_header "Test 4: Direct API Access with CORS Headers"
echo "Testing: http://localhost:8080/auth/login with Origin header"
echo ""
CORS_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST http://localhost:8080/auth/login \
-H "Content-Type: application/json" \
-H "Origin: http://localhost:3000" \
-d '{"login":"admin","password":"admin"}' \
-v 2>&1)
if echo "$CORS_RESPONSE" | grep -q "Access-Control-Allow-Origin"; then
print_success "CORS headers present in response"
echo "$CORS_RESPONSE" | grep -i "access-control"
else
print_error "No CORS headers found in response"
print_info "This might cause issues if bypassing the proxy"
fi
# Test 5: CORS Preflight (OPTIONS request)
print_header "Test 5: CORS Preflight Request"
echo "Testing OPTIONS request to http://localhost:8080/auth/login"
echo ""
OPTIONS_RESPONSE=$(curl -s -i -X OPTIONS http://localhost:8080/auth/login \
-H "Origin: http://localhost:3000" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: Content-Type" 2>&1)
if echo "$OPTIONS_RESPONSE" | grep -q "Access-Control-Allow-Origin: http://localhost:3000"; then
print_success "CORS preflight successful for localhost:3000"
elif echo "$OPTIONS_RESPONSE" | grep -q "Access-Control-Allow-Origin"; then
ALLOWED_ORIGIN=$(echo "$OPTIONS_RESPONSE" | grep "Access-Control-Allow-Origin" | cut -d: -f2- | tr -d ' \r')
print_error "CORS configured for different origin: $ALLOWED_ORIGIN"
else
print_error "CORS preflight failed - no Access-Control-Allow-Origin header"
fi
echo -e "\nFull preflight response headers:"
echo "$OPTIONS_RESPONSE" | grep -i "access-control" || echo "No CORS headers found"
# Test 6: Check browser environment variables
print_header "Test 6: Environment Configuration"
if [ -f "web/.env" ]; then
print_info "Found web/.env file:"
cat web/.env
else
print_success "No web/.env file (using defaults)"
fi
if [ -f "web/.env.local" ]; then
print_info "Found web/.env.local file:"
cat web/.env.local
else
print_success "No web/.env.local file"
fi
# Test 7: Check api-config.ts
print_header "Test 7: Frontend API Configuration"
if [ -f "web/src/lib/api-config.ts" ]; then
echo "Current api-config.ts BASE URL setting:"
grep -A 1 "API_BASE_URL" web/src/lib/api-config.ts || print_error "Could not find API_BASE_URL"
echo -e "\nWITH_CREDENTIALS setting:"
grep "WITH_CREDENTIALS" web/src/lib/api-config.ts || print_error "Could not find WITH_CREDENTIALS"
else
print_error "web/src/lib/api-config.ts not found!"
fi
# Test 8: Check Vite config
print_header "Test 8: Vite Proxy Configuration"
if [ -f "web/vite.config.ts" ]; then
echo "Proxy configuration in vite.config.ts:"
grep -A 10 "proxy:" web/vite.config.ts | head -n 15 || print_error "Could not find proxy config"
else
print_error "web/vite.config.ts not found!"
fi
# Summary
print_header "Summary & Recommendations"
echo "1. API Server: $(curl -s -f http://localhost:8080/health > /dev/null 2>&1 && echo -e "${GREEN}Running${NC}" || echo -e "${RED}Not Running${NC}")"
echo "2. Vite Dev Server: $(curl -s -f http://localhost:3000 > /dev/null 2>&1 && echo -e "${GREEN}Running${NC}" || echo -e "${RED}Not Running${NC}")"
echo ""
print_info "Recommended Development Setup:"
echo " 1. Start API: ./scripts/start_services_test.sh"
echo " 2. Start Frontend: cd web && npm run dev"
echo " 3. Access UI at: http://localhost:3000"
echo " 4. All requests will be proxied automatically"
echo ""
print_info "Checklist for CORS Issues:"
echo " [ ] API server running on localhost:8080"
echo " [ ] Vite dev server running on localhost:3000"
echo " [ ] OpenAPI.BASE = \"\" in web/src/lib/api-config.ts"
echo " [ ] OpenAPI.WITH_CREDENTIALS = true"
echo " [ ] Vite proxy configured for /api and /auth"
echo " [ ] No VITE_API_BASE_URL environment variable set"
echo " [ ] Browser DevTools shows requests to localhost:3000 (not 8080)"
echo ""
print_info "If still having CORS errors:"
echo " 1. Restart Vite dev server (changes require restart)"
echo " 2. Clear browser cache and localStorage"
echo " 3. Check browser console for actual request URL"
echo " 4. Review web/CORS-TROUBLESHOOTING.md for detailed guide"