1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
############################################################################
# #
# 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.dbmain import DbMain
# Extension de cette classe avec dbmain
class DbUser(DbMain):
"""
Classe avec les méthodes pour gérer les utilisateurs
"""
# 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: str, password: str) -> int:
# 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)
|