first commit
This commit is contained in:
116
client/pages/auth/forgot_password.py
Normal file
116
client/pages/auth/forgot_password.py
Normal file
@@ -0,0 +1,116 @@
|
||||
import flet as ft
|
||||
from helpers.emails import send_gmail
|
||||
from helpers.validations import Validations
|
||||
import requests
|
||||
import string
|
||||
import secrets
|
||||
import os
|
||||
|
||||
class ForgotPassword:
|
||||
def __init__(self, page: ft.Page, login, auth):
|
||||
self.page = page
|
||||
self.login = login
|
||||
self.auth = auth
|
||||
self.email = ft.TextField(label="E-mail", expand=True)
|
||||
self.code = ft.TextField(label="Codul de securitate", expand=True)
|
||||
self.password = ft.TextField(label="Parola", password=True, can_reveal_password=True, expand=True)
|
||||
self.confirm_password = ft.TextField(label="Confirmați parola", password=True, can_reveal_password=True, expand=True)
|
||||
self.error_message = ft.Text(color=ft.Colors.RED)
|
||||
self.inserted_code = ft.TextField(label="Codul de verificare primit pe email", expand=True)
|
||||
|
||||
self.otp_code = self._generate_numeric_code()
|
||||
self.validate = Validations(self.error_message, self.page)
|
||||
|
||||
self.title = ft.Text(
|
||||
"Ai uitat parola?",
|
||||
text_align=ft.TextAlign.CENTER,
|
||||
size=20,
|
||||
weight=ft.FontWeight.BOLD,
|
||||
width=350
|
||||
)
|
||||
|
||||
self.main_column = ft.Column(
|
||||
[
|
||||
self.title,
|
||||
self.email,
|
||||
self.error_message,
|
||||
ft.Button("Recupereaza parola", on_click=self.send_code_on_email),
|
||||
],
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER
|
||||
)
|
||||
self.go_to_login = ft.TextButton("Mergeti la autentificare", on_click=self.on_go_to_login_btn_click, width=350)
|
||||
|
||||
self.page_column = ft.Column(
|
||||
[
|
||||
self.main_column,
|
||||
ft.Text(),
|
||||
self.go_to_login
|
||||
]
|
||||
)
|
||||
|
||||
def _generate_numeric_code(self) -> str:
|
||||
digits = string.digits
|
||||
return ''.join(secrets.choice(digits) for _ in range(6))
|
||||
|
||||
def send_code_on_email(self, e):
|
||||
if self.validate.is_valid_email(self.email.value):
|
||||
self.main_column.controls.clear()
|
||||
self.main_column.controls.append(self.title)
|
||||
self.main_column.controls.append(self.inserted_code)
|
||||
self.main_column.controls.append(self.error_message)
|
||||
self.main_column.controls.append("Verifica", width=150, on_click=self.verfy_code)
|
||||
self.main_column.update()
|
||||
#print(self.otp_code)
|
||||
send_gmail(
|
||||
to_email=self.email.value,
|
||||
subject="Cod de verificare",
|
||||
body=f"Codul tau de verificare este: {self.otp_code}"
|
||||
)
|
||||
|
||||
def verfy_code(self, e):
|
||||
inserted_code = self.inserted_code.value
|
||||
if inserted_code == self.otp_code:
|
||||
self.main_column.controls.clear()
|
||||
self.main_column.controls.append(self.title)
|
||||
self.main_column.controls.append(self.password)
|
||||
self.main_column.controls.append(self.confirm_password)
|
||||
self.main_column.controls.append(self.error_message)
|
||||
self.main_column.controls.append(
|
||||
ft.Button("Salveaza", width=150, on_click=self.on_save_btn_click)
|
||||
)
|
||||
self.error_message.value = ''
|
||||
else:
|
||||
self.error_message.value = "Code invalid sau expirat!"
|
||||
print(inserted_code)
|
||||
print(self.otp_code)
|
||||
|
||||
def on_go_to_login_btn_click(self, e):
|
||||
self.auth.placeholder.content = self.login.build()
|
||||
|
||||
def on_save_btn_click(self, e):
|
||||
password = self.password.value
|
||||
repeat_password = self.confirm_password.value
|
||||
if self.validate.is_password_strong(password):
|
||||
if self.validate.check_repeat_password(password, repeat_password):
|
||||
base_url = self.page.session.store.get('api_base_url')
|
||||
token = os.getenv('PASSWORD_TOKEN')
|
||||
response = requests.post(f'{base_url}/auth/update_passwrod', json={"email": self.email.value, "password": password, "token": token})
|
||||
if response.status_code == 200:
|
||||
self.error_message.value = 'Parola a fost salvata cu succes. Acum va puteti autentifica!'
|
||||
self.error_message.color = ft.Colors.GREEN
|
||||
self.error_message.update()
|
||||
|
||||
self.page_column.controls.clear()
|
||||
self.page_column.controls.append(self.title)
|
||||
self.page_column.controls.append(self.error_message)
|
||||
self.page_column.controls.append(self.go_to_login)
|
||||
self.go_to_login.content = "Mergeti la autentificare"
|
||||
else:
|
||||
self.error_message.value = 'Recuperarea parolei a esuat. Va rugam conactati administratorul.'
|
||||
self.error_message.color = ft.Colors.RED
|
||||
self.error_message.update()
|
||||
|
||||
def build(self):
|
||||
return self.page_column
|
||||
|
||||
|
||||
Reference in New Issue
Block a user