From 7df81eb227127e074926cce9f30caacf3cd9fcae Mon Sep 17 00:00:00 2001 From: artyom Date: Mon, 4 Mar 2024 15:11:53 +0300 Subject: [PATCH] fix: Password changing for external users --- webapp/managers.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/webapp/managers.py b/webapp/managers.py index eb6cf5d..fb91d5e 100644 --- a/webapp/managers.py +++ b/webapp/managers.py @@ -246,7 +246,6 @@ def get_submissions_statuses_by_info( def count_submissions_by_info(self, group: int, variant: int, task: int) -> int: registration = self.config.config.enable_registration - return self.checks.count_submissions_by_info(group, variant, task, registration) def get_submissions_statuses(self, student: Student, skip: int, take: int) -> list[SubmissionDto]: @@ -396,6 +395,9 @@ def register(self, email: str, password: str) -> str: return "Данный адрес электронной почты заблокирован." if self.confirmed(email): return "Такой адрес почты уже зарегистрирован! Нажмите кнопку 'Войти'." + student = self.students.find_by_email(email) + if student and student.provider: + return "Воспользуйтесь кнопкой 'Сменить пароль', если хотите выполнить вход по паролю." return (f"Пользователь не подтверждён! Отправьте пустое сообщение с Вашего адреса " f"электронной почты {email} на наш адрес {self.config.config.imap_login} " "для подтверждения. В течение 5 минут после отправки письма Ваш аккаунт " @@ -416,7 +418,8 @@ def change_password(self, email: str, new_password: str) -> str: return "Такой адрес почты не зарегистрирован!" if self.blocked(email): return "Данный адрес электронной почты заблокирован." - if not self.confirmed(email): + student = self.students.find_by_email(email) + if not self.confirmed(email) and not student.provider: return (f"Пользователь не подтверждён! Отправьте пустое сообщение с Вашего адреса " f"электронной почты {email} на наш адрес {self.config.config.imap_login} " "для подтверждения. В течение 5 минут после отправки письма Ваш аккаунт " @@ -434,6 +437,9 @@ def login(self, email: str, password: str) -> str | None: if self.blocked(email): return "Данный адрес электронной почты заблокирован." if not self.confirmed(email): + student = self.students.find_by_email(email) + if student and student.provider: + return "Воспользуйтесь кнопкой 'Сменить пароль', если хотите выполнить вход по паролю." return (f"Пользователь не подтверждён! Отправьте пустое сообщение с Вашего адреса " f"электронной почты {email} на наш адрес {self.config.config.imap_login} " "для подтверждения Вашего аккаунта. В течение 5 минут после отправки " @@ -452,7 +458,7 @@ def check_password(self, email: str, password: str) -> Student | None: def update_password(self, email: str, password: str) -> bool: student = self.students.find_by_email(email) - if student and student.password_hash: + if student and (student.password_hash or student.provider): given = password.encode('utf8') hashed = bcrypt.hashpw(given, bcrypt.gensalt()) self.students.change_password(email, hashed.decode('utf8'))