summaryrefslogtreecommitdiff
path: root/src/database/dbuser.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/database/dbuser.py')
-rw-r--r--src/database/dbuser.py171
1 files changed, 171 insertions, 0 deletions
diff --git a/src/database/dbuser.py b/src/database/dbuser.py
new file mode 100644
index 0000000..e0a62fb
--- /dev/null
+++ b/src/database/dbuser.py
@@ -0,0 +1,171 @@
+
+
+############################################################################
+# #
+# 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 . 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, password, userStatus):
+ # 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
+ hash = 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,
+ hash,
+ datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
+ userStatus
+ ]
+ )
+ # 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, userId, isPro, userJobs=None):
+ # Préparation de la requète pour mise à jour des infos
+ # J'ai préféré faire deux requètes distinctes et ne pas utiliser des valeurs
+ # passées par POST (key => value) pour gérer les noms des colonnes
+ # car je préfère les passer en "dur" dans mes requêtes (risque d'injection SQL%s).
+ 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:
+ # # Exécution de la requète
+ # # https:#www.php.net/manual/fr/function.array-values.php
+ # # Pour passer de "dict" a "list" -> array_values()
+ # args = [i for i in userInfos]
+ # args.push(userId)
+ # self.exec_cmd(reqAddInfoClient, args)
+ # else:
+ # # https:#stackoverflow.com/questions/15986235/how-to-use-json-stringify-and-json-decode-properly
+ # # Récupération des emplois dans le JSON et supression de ces derniers de la liste
+ # selectedJobs = json_decode(html_entity_decode(userInfos["jobs"]))
+ # unset(userInfos["jobs"])
+ # # array_value -> Qu'est ce qui est présent dans 1 mais pas dans 2 %s
+ # # Comparaison des jobs anciennement présent avec ceux sélectionnés, donc ajoutés.
+ # jobsAdded = array_values(array_diff(selectedJobs, userJobs))
+ # # Comparaison des jobs deja présent avec ceux sélectionnés, donc ajoutés.
+ # jobsRemoved = array_values(array_diff(userJobs, selectedJobs))
+ # # on continue classiquement avec les autres éléments
+ # args = array_values(userInfos)
+ # array_push(args, userId)
+ # self.exec_cmd(reqAddInfoPro, args)
+ # for i in jobsAdded:
+ # self.exec_cmd(reqAddInfoProJobs, array(jobsAdded[i], userId))
+ # for i in jobsRemoved:
+ # self.exec_cmd(reqRemoveInfoProJobs, array(jobsRemoved[i], userId))
+
+ # ****************************************************************************
+ # 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])