############################################################################ # # # 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)