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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
############################################################################
# #
# Description: Fenêtre principale avec les éléments pour s'enregistrer #
# #
############################################################################
# Import pour effectuer des regex
import re
# Import de PyQt5
from PyQt5.QtWidgets import (
QPushButton, QHBoxLayout,
QGroupBox, QLabel,
QLineEdit, QWidget,
QVBoxLayout, QComboBox,
QGridLayout, QMessageBox
)
# Import des éléments locals
from src.app import mainLogin, mainHome, mainLogout
from src.database.dbuser import DbUser
def core_register(mainWindow: object, email: str, password: str, userStatus: str) -> None:
"""
Fonction vérifiant les données fournies par l'utilisateur pour une inscription,
un email valide et un mot de passe un minimum robuste et utilise si tel est le cas
utilise une fonction de DbUser pour inscrire l'utilisateur.
"""
dbuser: object = DbUser(mainWindow)
regNumb: str = "[0-9]"
regUpper: str = "[A-Z]"
regSpecial: str = "[`!@#$%^&*()_+\-=\[\]{};':\"\\|,.<>\/?~µ°€£]"
regEmail: str = "^[a-z0-9._-]+@[a-z0-9-]+\.[a-z]+"
# Si l'email est vide
if not email:
QMessageBox.warning(
mainWindow,
"Email invalide",
"Veuillez renseigner un email"
)
return
# Si le mot de passe est vide
if not password:
QMessageBox.warning(
mainWindow,
"Mot de passe invalide",
"Veuillez renseigner un mot de passe"
)
return
# Si le status de l'utilisateur n'est pas défini
if userStatus == None:
QMessageBox.warning(
mainWindow,
"Mauvais rôle",
"Veuillez selectionner un rôle"
)
return
# Si la regex pour verifier si l'email est valide
if not re.fullmatch(regEmail, email):
QMessageBox.warning(
mainWindow,
"Email invalid",
"Email non conforme"
)
return
# Les regex pour savoir si le mot de passe est un minimum robuste
if len(password) < 8\
or not re.search(regNumb, password)\
or not re.search(regUpper, password)\
or not re.search(regSpecial, password):
QMessageBox.warning(
mainWindow,
"Mot de passe invalide",
("Le mot de passe doit avoir:\n"
"-Au moins 8 characters\n"
"-Une majuscule\n"
"-Un chiffre\n"
"-Un character spécial")
)
return
# Si l'email est deja présent
if dbuser.check_exist_email(email):
QMessageBox.warning(
mainWindow,
"Email invalid",
"Email déja utilisé"
)
return
# Enregistrement du nouvel utilisateur
succes: int = dbuser.register_user(email, password, userStatus)
if succes:
QMessageBox.information(
mainWindow,
"Inscription",
"Inscription réussie!"
)
mainHome.window_main(mainWindow)
else:
QMessageBox.warning(
mainWindow,
"Erreur bdd",
"Erreur lors de l'inscritpion"
)
def window_main(mainWindow: object) -> None:
"""
Page principale de l'app d'où l'on peut s'inscrire
"""
# On check si la variable userConnected de la classe principale est vrai ou pas
# pour savoir si un utilisateur est connecté, on crée le widget QLabel en conséquence
if not mainWindow.userConnected:
connexionState: object = QLabel("Non connecté.")
else:
connexionState: object = QLabel(
f"Connecté: {mainWindow.userEmail} - {mainWindow.userStatus}"
)
# On rajoute les QPushBoutton pour retourner à l'accueil
btnAccueil: object = QPushButton("Accueil")
btnAccueil.clicked.connect(lambda: mainHome.window_main(mainWindow))
# On adapte les widgets QPushButton en fonction
if not mainWindow.userConnected:
btnConnexion: object = QPushButton("Connexion")
btnConnexion.clicked.connect(lambda: mainLogin.window_main(mainWindow))
else:
btnDeconnexion: object = QPushButton("Déconnexion")
btnDeconnexion.clicked.connect(
lambda: [
mainLogout.core_logout(mainWindow),
mainHome.window_main(mainWindow, True)
]
)
# Partie layout des boutons de navigation
layoutUser: object = QHBoxLayout()
layoutUser.addWidget(btnAccueil)
layoutUser.addStretch()
if not mainWindow.userConnected:
layoutUser.addWidget(btnConnexion)
else:
layoutUser.addWidget(btnDeconnexion)
# GroupBox des boutons de navigation
grpUser: object = QGroupBox("Gestion de l'utilisateur")
grpUser.setLayout(layoutUser)
# Widgets pour s'inscrire
labMail: object = QLabel("Email")
leditMail: object = QLineEdit(maxLength=128)
labPassword: object = QLabel("Mot de passe")
leditPassword: object = QLineEdit(maxLength=128)
leditPassword.setEchoMode(QLineEdit.Password)
labStatus: object = QLabel("Rôle")
comboStatus: object = QComboBox()
comboStatus.addItem("Admin", 0)
comboStatus.addItem("Pro", 1)
comboStatus.addItem("Client", 2)
btnRegister: object = QPushButton("S'inscrire")
btnRegister.clicked.connect(
lambda: core_register(
mainWindow,
leditMail.text(),
leditPassword.text(),
comboStatus.currentData()
)
)
# GridLayout pour les champs de l'inscription
LayoutInfoConnexion: object = QGridLayout()
LayoutInfoConnexion.addWidget(labMail, 0, 0)
LayoutInfoConnexion.addWidget(leditMail, 0, 1)
LayoutInfoConnexion.addWidget(labPassword, 1, 0)
LayoutInfoConnexion.addWidget(leditPassword, 1, 1)
LayoutInfoConnexion.addWidget(labStatus, 2, 0)
LayoutInfoConnexion.addWidget(comboStatus, 2, 1)
LayoutInfoConnexion.addWidget(btnRegister, 3, 1)
# Layout accueillant le GridLayout
layoutGroupConnexion: object = QHBoxLayout()
layoutGroupConnexion.addStretch()
layoutGroupConnexion.addLayout(LayoutInfoConnexion)
layoutGroupConnexion.addStretch()
# GroupBox du menu pour s'inscrire
grpConnexion: object = QGroupBox("Inscription")
grpConnexion.setLayout(layoutGroupConnexion)
# Layout du widget principal
layoutMain: object = QVBoxLayout()
layoutMain.addWidget(connexionState)
layoutMain.addWidget(grpUser)
layoutMain.addStretch()
layoutMain.addWidget(grpConnexion)
layoutMain.addStretch()
# On supprime l'ancien QWidget et on en crée un nouveau
# avec les éléments et la lyout de cette de la fonction
mainWindow.mainWidget.deleteLater()
mainWindow.mainWidget = QWidget()
mainWindow.mainWidget.setLayout(layoutMain)
mainWindow.setCentralWidget(mainWindow.mainWidget)
|