add register

This commit is contained in:
unknown 2025-09-26 03:47:48 +03:00
parent 4276b147f2
commit 0f13849b23
2 changed files with 64 additions and 8 deletions

View File

@ -50,6 +50,48 @@ async def login(login, password):
# Другие непредвиденные ошибки
return False, f"Произошла ошибка: {e}"
async def register(login, password, invite=None):
"""
Отправляет запрос на регистрацию нового пользователя.
:param login: Логин
:param password: Пароль
:param invite: Инвайт-код (опционально)
:return: Кортеж (успех: bool, сообщение: str)
"""
url = f"{config.BASE_URL}/v1/auth/register"
payload = {"login": login, "password": password}
if invite:
payload["invite"] = invite
try:
async with httpx.AsyncClient(http2=True) as client:
response = await client.post(url, json=payload)
if response.status_code == 201:
return True, "Регистрация прошла успешно!"
# Обрабатываем специфичные ошибки
error_data = response.json()
error_message = error_data.get("detail", "Произошла неизвестная ошибка")
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, "Данные не прошли валидацию. Проверьте длину логина и пароля."
else:
return False, f"Ошибка сервера ({response.status_code}): {error_message}"
except httpx.RequestError as e:
return False, f"Ошибка сети: {e}"
except Exception as e:
return False, f"Произошла ошибка: {e}"
# Пример использования (для тестирования)
async def main():
# Замените на реальные данные для теста

View File

@ -283,15 +283,14 @@ class LoginView(QWidget):
return True, ""
def handle_register(self):
# Trigger validation for all fields
# self.name_input.on_text_changed(self.name_input.text())
# Принудительная валидация всех полей
self.reg_login_input.on_text_changed(self.reg_login_input.text())
self.reg_password_input.on_text_changed(self.reg_password_input.text())
self.confirm_password_input.on_text_changed(self.confirm_password_input.text())
self.invite_code_input.on_text_changed(self.invite_code_input.text())
# Проверка, что все поля валидны
if not all([
# self.name_input.is_valid,
self.reg_login_input.is_valid,
self.reg_password_input.is_valid,
self.confirm_password_input.is_valid,
@ -300,13 +299,28 @@ class LoginView(QWidget):
QMessageBox.warning(self, localizer.translate("Ошибка"), localizer.translate("Пожалуйста, исправьте ошибки в форме"))
return
# name = self.name_input.text()
login = self.reg_login_input.text()
# password = self.reg_password_input.text()
# invite = self.invite_code_input.text()
password = self.reg_password_input.text()
invite = self.invite_code_input.text() or None # Отправляем None, если строка пустая
QMessageBox.information(self, "Успех", f"{localizer.translate("Регистрация прошла успешно для")} {login}")
# Блокируем кнопку на время запроса
self.register_button.setEnabled(False)
self.register_button.setText(localizer.translate("Регистрация..."))
try:
success, message = asyncio.run(auth_service.register(login, password, invite))
if success:
QMessageBox.information(self, localizer.translate("Успех"), message)
self.show_login_form()
else:
QMessageBox.warning(self, localizer.translate("Ошибка"), message)
finally:
# Возвращаем кнопку в исходное состояние
self.register_button.setEnabled(True)
self.register_button.setText(localizer.translate("Зарегистрироваться"))
def change_language(self, display_name):
lang_code = self.lang_map.get(display_name)