#!/bin/bash # Скрипт для тестирования полного цикла аутентификации # Регистрация -> Авторизация -> Получение Bearer токена echo "🔐 Тестирование полного цикла аутентификации" echo "=============================================" # Проверяем, что сервис запущен echo "🔍 Проверяем доступность User Service..." if ! curl -s http://localhost:8001/api/v1/health > /dev/null; then echo "❌ User Service недоступен. Запустите сервис командой:" echo " cd services/user_service && python -m uvicorn main:app --host 0.0.0.0 --port 8001" exit 1 fi echo "✅ User Service доступен" # Генерируем уникальный email для тестирования TIMESTAMP=$(date +%s) EMAIL="test_user_${TIMESTAMP}@example.com" echo -e "\n📝 Тестовые данные:" echo "Email: $EMAIL" echo "Password: TestPassword123" echo "First Name: Тест" echo "Last Name: Пользователь" echo "Phone: +7-900-123-45-67" # 1. РЕГИСТРАЦИЯ ПОЛЬЗОВАТЕЛЯ echo -e "\n🔵 Шаг 1: Регистрация нового пользователя" echo "============================================" REGISTRATION_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X POST "http://localhost:8001/api/v1/register" \ -H "Content-Type: application/json" \ -d "{ \"email\": \"$EMAIL\", \"password\": \"TestPassword123\", \"first_name\": \"Тест\", \"last_name\": \"Пользователь\", \"phone\": \"+7-900-123-45-67\" }") # Извлекаем HTTP статус и тело ответа HTTP_STATUS=$(echo $REGISTRATION_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://') REGISTRATION_BODY=$(echo $REGISTRATION_RESPONSE | sed -e 's/HTTPSTATUS:.*//g') if [ "$HTTP_STATUS" -eq 201 ] || [ "$HTTP_STATUS" -eq 200 ]; then echo "✅ Регистрация успешна!" echo "📋 Данные пользователя:" echo "$REGISTRATION_BODY" | jq . 2>/dev/null || echo "$REGISTRATION_BODY" # Извлекаем UUID пользователя USER_UUID=$(echo "$REGISTRATION_BODY" | jq -r '.uuid' 2>/dev/null) echo "🆔 UUID пользователя: $USER_UUID" else echo "❌ Ошибка регистрации. HTTP Status: $HTTP_STATUS" echo "📋 Ответ сервера:" echo "$REGISTRATION_BODY" | jq . 2>/dev/null || echo "$REGISTRATION_BODY" exit 1 fi # 2. АВТОРИЗАЦИЯ ПОЛЬЗОВАТЕЛЯ echo -e "\n🔵 Шаг 2: Авторизация пользователя" echo "==================================" LOGIN_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X POST "http://localhost:8001/api/v1/login" \ -H "Content-Type: application/json" \ -d "{ \"email\": \"$EMAIL\", \"password\": \"TestPassword123\" }") # Извлекаем HTTP статус и тело ответа HTTP_STATUS=$(echo $LOGIN_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://') LOGIN_BODY=$(echo $LOGIN_RESPONSE | sed -e 's/HTTPSTATUS:.*//g') if [ "$HTTP_STATUS" -eq 200 ]; then echo "✅ Авторизация успешна!" echo "📋 Данные авторизации:" echo "$LOGIN_BODY" | jq . 2>/dev/null || echo "$LOGIN_BODY" # Извлекаем Bearer токен BEARER_TOKEN=$(echo "$LOGIN_BODY" | jq -r '.access_token' 2>/dev/null) TOKEN_TYPE=$(echo "$LOGIN_BODY" | jq -r '.token_type' 2>/dev/null) if [ "$BEARER_TOKEN" != "null" ] && [ "$BEARER_TOKEN" != "" ]; then echo -e "\n🎯 Bearer Token получен успешно!" echo "==================================" echo "🔑 Token Type: $TOKEN_TYPE" echo "🔐 Access Token: $BEARER_TOKEN" echo "" echo "📋 Полный Authorization Header:" echo "Authorization: $TOKEN_TYPE $BEARER_TOKEN" echo "" echo "📋 Для использования в curl:" echo "curl -H \"Authorization: $TOKEN_TYPE $BEARER_TOKEN\" http://localhost:8001/api/v1/protected-endpoint" else echo "❌ Не удалось извлечь Bearer токен из ответа" exit 1 fi else echo "❌ Ошибка авторизации. HTTP Status: $HTTP_STATUS" echo "📋 Ответ сервера:" echo "$LOGIN_BODY" | jq . 2>/dev/null || echo "$LOGIN_BODY" exit 1 fi # 3. ТЕСТИРОВАНИЕ ТОКЕНА (если есть защищенный эндпоинт) echo -e "\n🔵 Шаг 3: Проверка профиля пользователя с токеном" echo "===============================================" PROFILE_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X GET "http://localhost:8001/api/v1/profile" \ -H "Authorization: $TOKEN_TYPE $BEARER_TOKEN") # Извлекаем HTTP статус и тело ответа HTTP_STATUS=$(echo $PROFILE_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://') PROFILE_BODY=$(echo $PROFILE_RESPONSE | sed -e 's/HTTPSTATUS:.*//g') if [ "$HTTP_STATUS" -eq 200 ]; then echo "✅ Токен работает! Профиль получен:" echo "$PROFILE_BODY" | jq . 2>/dev/null || echo "$PROFILE_BODY" else echo "⚠️ Не удалось получить профиль. HTTP Status: $HTTP_STATUS" echo "📋 Ответ сервера:" echo "$PROFILE_BODY" | jq . 2>/dev/null || echo "$PROFILE_BODY" echo "💡 Возможно, эндпоинт /profile не реализован или требует другой путь" fi echo -e "\n🎉 Тестирование завершено!" echo "==========================" echo "✅ Регистрация: Успешно" echo "✅ Авторизация: Успешно" echo "✅ Bearer Token: Получен" echo "" echo "🔐 Ваш Bearer Token:" echo "$TOKEN_TYPE $BEARER_TOKEN" echo "" echo "💾 Токен сохранен в переменную окружения для использования:" echo "export AUTH_TOKEN=\"$TOKEN_TYPE $BEARER_TOKEN\"" echo "" echo "📖 Для тестирования других эндпоинтов используйте:" echo "curl -H \"Authorization: \$AUTH_TOKEN\" http://localhost:8001/api/v1/your-endpoint"