############################################################################ # # # Description: Ensemble de méthodes pour étendre dbmain # # afin de gérer les utilisateurs # # # ############################################################################ from datetime import datetime from passlib.hash import sha512_crypt # Import de dbmain from src.database import dbmain # Extension de cette classe avec dbmain class DbUser(dbmain.DbMain): # **************************************************************************** # GESTION DES UTILISATEURS # **************************************************************************** # Enregistrement d'un nouvel utilisateur def register_user(self, email: str, password: str, userStatus: int) -> int: # On vérifie si l'email existe deja dans la bdd exist = self.check_exist_email(email) # Si non if not exist: # Chiffrement du pass passwordHash = self.crypt_pass(password) # Préparation de la requète reqAddUser = """ INSERT INTO """ + self.TABLEUSERACCOUNT + """ (email, password, inscriptionDate, userStatus) VALUES (%s, %s, %s, %s)""" # Execution de la requète self.exec_cmd( reqAddUser, [email, passwordHash, datetime.now().strftime("%Y-%m-%d %H:%M:%S"), userStatus], True ) # Retourne 1 pour réussite return 1 else: # Retourne 0 pour échec return 0 # Vérification de la combinaison email - pass pour authentification def check_user_credential(self, email, password): # Préparation de la requète pour récupérer les infos ou l'email est présent reqCheckCredential = """ SELECT userId, password FROM """ + self.TABLEUSERACCOUNT + """ WHERE email = %s """ # Execution de la requète self.exec_cmd(reqCheckCredential, [email]) result = self.cur.fetchone() # Vérifiaction de correspondance email & pass if result and sha512_crypt.verify(password, result[1]): return result[0] # Mise à jour des infos d'un utilisateur def update_user_infos( self, userInfos: list, userId: int, isPro: bool, oldJobs: list = None, newJobs: list = None) -> None: # Préparation de la requète pour mise à jour des infos reqAddInfoClient = """ REPLACE INTO """ + self.TABLEUSERINFO + """ (lastname, firstname, phoneNumber, adress, zipCode, city, userId) VALUES (%s, %s, %s, %s, %s, %s, %s)""" reqAddInfoPro = """ REPLACE INTO """ + self.TABLEUSERINFO + """ (lastname, firstname, phoneNumber, adress, zipCode, city, degree, capability, description, userId) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""" reqAddInfoProJobs = """ INSERT INTO """ + self.TABLEUSERJOB + """ (jobCategoryId, userId) VALUES (%s, %s)""" reqRemoveInfoProJobs = """ DELETE FROM """ + self.TABLEUSERJOB + """ WHERE jobCategoryId = %s AND userId = %s""" if not isPro: userInfos.append(userId) self.exec_cmd(reqAddInfoClient, userInfos, True) else: userInfos.append(userId) self.exec_cmd(reqAddInfoPro, userInfos, True) jobsAdded = [i for i in newJobs if i not in oldJobs] jobsRemoved = [i for i in oldJobs if i not in newJobs] for i in jobsAdded: self.exec_cmd(reqAddInfoProJobs, [i, userId], True) for i in jobsRemoved: self.exec_cmd(reqRemoveInfoProJobs, [i, userId], True) # **************************************************************************** # GESTION DU TOKEN AUTOLOGIN # **************************************************************************** # Vérification de la combinaison email - jeton d'auto-login pour authentification def check_token_autologin(self, email, token): # Préparation de la requète pour récupérer les infos ou l'email est présent reqCheckToken = """ SELECT userId, tokenAutoLogin FROM """ + self.TABLEUSERACCOUNT + """ WHERE email = %s""" # Exécution de la requète self.exec_cmd(reqCheckToken, [email]) result = self.cur.fetchone() # Vérifiaction de correspondance email & jeton d'auto-connection if result and result[1] == token: return result[0] # Mise à jour du jeton d'auto-login def update_token_autologin(self, email, token): # Préparation de la requète pour mise à jour du jeton d'auto-connection reqUpdateToken = """ UPDATE """ + self.TABLEUSERACCOUNT + """ SET tokenAutoLogin = %s WHERE email = %s""" # Execution de la requète self.exec_cmd(reqUpdateToken, [token, email]) # Supression du jeton d'auto-login def del_token_autologin(self, email): # Préparation de la requète pour supression du jeton d'auto-connection reqDeleteToken = """ UPDATE """ + self.TABLEUSERACCOUNT + """ SET tokenAutoLogin = NULL WHERE email = %s""" # Execution de la requète self.exec_cmd(reqDeleteToken, [email])