142 lines
6.2 KiB
Bash
Executable File
142 lines
6.2 KiB
Bash
Executable File
#!/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" |