diff --git a/app/core/services/auth_service.py b/app/core/services/auth_service.py index 7126f61..b4d6e79 100644 --- a/app/core/services/auth_service.py +++ b/app/core/services/auth_service.py @@ -2,6 +2,7 @@ import httpx import asyncio from app.core import config from app.core.database import add_session +from app.core.localizer import localizer async def login(login, password): """ @@ -26,29 +27,28 @@ async def login(login, password): access_token=token_data["access_token"], refresh_token=token_data["refresh_token"] ) - return True, "Успешный вход" + return True, localizer.translate("Успешный вход") else: - return False, data.get("detail", "Неизвестная ошибка ответа") + return False, data.get("detail", localizer.translate("Неизвестная ошибка ответа")) - elif response.status_code in [401, 403]: + elif response.status_code in [401]: error_data = response.json() - return False, error_data.get("detail", "Неверный логин или пароль") - + return False, error_data.get("detail", localizer.translate("Неверный логин или пароль")) + + elif response.status_code in [403]: + error_data = response.json() + return False, error_data.get("detail", localizer.translate("Учетная запись пользователя отключена")) + elif response.status_code == 422: - # Ошибка валидации Pydantic - error_data = response.json() - # Можно будет позже реализовать более детальный разбор ошибок - return False, error_data.get("detail", "Некорректные данные для входа") + return False, localizer.translate("Некорректные данные для входа") else: - return False, f"Ошибка сервера: {response.status_code}" + return False, f"{localizer.translate('Ошибка сервера')}: {response.status_code}" except httpx.RequestError as e: - # Ошибка сети, таймаут и т.д. - return False, f"Ошибка сети: {e}" + return False, f"{localizer.translate('Ошибка сети')}: {e}" except Exception as e: - # Другие непредвиденные ошибки - return False, f"Произошла ошибка: {e}" + return False, f"{localizer.translate('Произошла ошибка')}: {e}" async def register(login, password, invite=None): """ @@ -69,27 +69,26 @@ async def register(login, password, invite=None): response = await client.post(url, json=payload) if response.status_code == 201: - return True, "Регистрация прошла успешно!" + return True, localizer.translate("Регистрация прошла успешно!") - # Обрабатываем специфичные ошибки error_data = response.json() - error_message = error_data.get("detail", "Произошла неизвестная ошибка") + error_message = error_data.get("detail", localizer.translate("Произошла ошибка")) - if response.status_code == 409: # Конфликт (логин занят) - return False, "Этот логин уже занят." - elif response.status_code == 400: # Неверный инвайт - return False, "Неверный инвайт-код." - elif response.status_code == 403: # Регистрация отключена - return False, "Регистрация в данный момент отключена." - elif response.status_code == 422: # Ошибка валидации - return False, "Данные не прошли валидацию. Проверьте длину логина и пароля." + if response.status_code == 409: + return False, localizer.translate("Этот логин уже занят.") + elif response.status_code == 400: + return False, localizer.translate("Неверный инвайт-код.") + elif response.status_code == 403: + return False, localizer.translate("Регистрация в данный момент отключена.") + elif response.status_code == 422: + return False, localizer.translate("Данные не прошли валидацию. Проверьте длину логина и пароля.") else: - return False, f"Ошибка сервера ({response.status_code}): {error_message}" + return False, f"{localizer.translate('Ошибка сервера')} ({response.status_code}): {error_message}" except httpx.RequestError as e: - return False, f"Ошибка сети: {e}" + return False, f"{localizer.translate('Ошибка сети')}: {e}" except Exception as e: - return False, f"Произошла ошибка: {e}" + return False, f"{localizer.translate('Произошла ошибка')}: {e}" # Пример использования (для тестирования) diff --git a/app/locales/en.json b/app/locales/en.json index 488fcdc..2584a76 100644 --- a/app/locales/en.json +++ b/app/locales/en.json @@ -7,15 +7,29 @@ "Повторите пароль": "Repeat password", "Инвайт-код": "Invite code", "Войти": "Login", + "Вход...": "Logging in...", "Зарегистрироваться": "Sign up", + "Регистрация...": "Signing up...", "Уже есть аккаунт? Войти": "Already have an account? Log in", "Нет аккаунта? Регистрация": "Don't have an account? Sign up", "Ошибка": "Error", + "Успех": "Success", "Пожалуйста, исправьте ошибки в форме": "Please correct the form errors", "Неверный логин или пароль": "Incorrect username or password", + "Учетная запись пользователя отключена": "User account is disabled", "Пароли не совпадают": "Passwords do not match", "Регистрация прошла успешно для": "Successfully registered for", + "Неизвестная ошибка ответа": "Unknown response error", + "Некорректные данные для входа": "Invalid login credentials", + "Ошибка сервера": "Server error", + "Ошибка сети": "Network error", + "Произошла ошибка": "An error has occurred", + "Этот логин уже занят.": "This username is already taken.", + "Неверный инвайт-код.": "Invalid invite code.", + "Регистрация в данный момент отключена.": "Registration is currently disabled.", + "Данные не прошли валидацию. Проверьте длину логина и пароля.": "Data validation failed. Check username and password length.", + "Login must be between 3 and 32 characters long": "Login must be between 3 and 32 characters long", "Login must not contain whitespace characters": "Login must not contain whitespace characters", "Login must not start with an underscore": "Login must not start with an underscore", diff --git a/app/locales/ru.json b/app/locales/ru.json index ef89d9f..8ff02b0 100644 --- a/app/locales/ru.json +++ b/app/locales/ru.json @@ -7,15 +7,29 @@ "Повторите пароль": "Повторите пароль", "Инвайт-код": "Инвайт-код", "Войти": "Войти", + "Вход...": "Вход...", "Зарегистрироваться": "Зарегистрироваться", + "Регистрация...": "Регистрация...", "Уже есть аккаунт? Войти": "Уже есть аккаунт? Войти", "Нет аккаунта? Регистрация": "Нет аккаунта? Регистрация", "Ошибка": "Ошибка", + "Успех": "Успех", "Пожалуйста, исправьте ошибки в форме": "Пожалуйста, исправьте ошибки в форме", "Неверный логин или пароль": "Неверный логин или пароль", + "Учетная запись пользователя отключена": "Учетная запись пользователя отключена", "Пароли не совпадают": "Пароли не совпадают", "Регистрация прошла успешно для": "Регистрация прошла успешно для", + "Неизвестная ошибка ответа": "Неизвестная ошибка ответа", + "Некорректные данные для входа": "Некорректные данные для входа", + "Ошибка сервера": "Ошибка сервера", + "Ошибка сети": "Ошибка сети", + "Произошла ошибка": "Произошла ошибка", + "Этот логин уже занят.": "Этот логин уже занят.", + "Неверный инвайт-код.": "Неверный инвайт-код.", + "Регистрация в данный момент отключена.": "Регистрация в данный момент отключена.", + "Данные не прошли валидацию. Проверьте длину логина и пароля.": "Данные не прошли валидацию. Проверьте длину логина и пароля.", + "Login must be between 3 and 32 characters long": "Логин должен быть от 3 до 32 символов", "Login must not contain whitespace characters": "Логин не должен содержать пробелы", "Login must not start with an underscore": "Логин не должен начинаться с символа подчёркивания",