Check if password respect the app policy
This commit is contained in:
parent
5f16d56a88
commit
9d85e5adc6
1 changed files with 44 additions and 10 deletions
54
main.py
54
main.py
|
@ -1,6 +1,8 @@
|
||||||
import tkinter.messagebox as messagebox
|
import tkinter.messagebox as messagebox
|
||||||
|
|
||||||
from tkinter import *
|
from tkinter import *
|
||||||
|
from re import sub
|
||||||
|
|
||||||
from users import Utilisateurs # import de mon fichier pour gérer la base de donnée
|
from users import Utilisateurs # import de mon fichier pour gérer la base de donnée
|
||||||
|
|
||||||
def dimensionsFenetre(fenetre, taille: tuple):
|
def dimensionsFenetre(fenetre, taille: tuple):
|
||||||
|
@ -18,20 +20,52 @@ class GesMag:
|
||||||
def demarrer(self) -> None:
|
def demarrer(self) -> None:
|
||||||
"""Lance le programme GesMag."""
|
"""Lance le programme GesMag."""
|
||||||
print("Lancement de l'interface de gestion d'une caisse d'un magasin...")
|
print("Lancement de l'interface de gestion d'une caisse d'un magasin...")
|
||||||
self.font = ("Comfortaa", 14) # Police par défaut
|
self.font = ("Comfortaa", 14) # police par défaut
|
||||||
Utilisateurs().creationTable() # On créer la base de donnée si elle n'existe pas déjà
|
Utilisateurs().creationTable() # on créer la base de donnée si elle n'existe pas déjà
|
||||||
self.parent = Tk() # On créer notre fenêtre principale
|
self.parent = Tk() # on créer notre fenêtre principale
|
||||||
|
|
||||||
self._interfaceConnexion() # On créer la variable `self.f` qui est la frame a affiché
|
self._interfaceConnexion() # on créer la variable `self.f` qui est la frame a affiché
|
||||||
self.f.grid() # On affiche la frame
|
self.f.grid() # on affiche la frame
|
||||||
|
|
||||||
self.parent.mainloop() # On affiche la fenêtre
|
self.parent.mainloop() # on affiche la fenêtre
|
||||||
|
|
||||||
|
def motDePasseCorrect(self, motDPasse: str) -> tuple:
|
||||||
|
"""Détermine si un mot de passe suit la politique du programme ou non."""
|
||||||
|
if len(motDPasse) == 0: # si le champs est vide
|
||||||
|
return (False, "Mot de passe incorrect.")
|
||||||
|
if len(motDPasse) < 8: # si le mot de passe est plus petit que 8 caractères
|
||||||
|
return (False, "Un mot de passe doit faire 8 caractères minimum.")
|
||||||
|
"""
|
||||||
|
Pour le regex, je réfléchie comme dans la fonction `self.connexion`.
|
||||||
|
J'utilises pas `match` parce que je suis plus à l'aise avec `sub`.
|
||||||
|
"""
|
||||||
|
if not sub(r"[A-Z]", '', motDPasse) != motDPasse:
|
||||||
|
return (False, "Un mot de passe doit au moins contenir une lettre majuscule.")
|
||||||
|
if not sub(r"[a-z]", '', motDPasse) != motDPasse:
|
||||||
|
return (False, "Un mot de passe doit au moins contenir une lettre minuscule.")
|
||||||
|
if not sub(r" *?[^\w\s]+", '', motDPasse) != motDPasse:
|
||||||
|
return (False, "Un mot de passe doit au moins contenir un caractère spécial.")
|
||||||
|
|
||||||
|
return (True,) # si aucun des tests précédents n'est valide, alors le mot de passe est valide
|
||||||
|
|
||||||
def connexion(self, utilisateur: str, motDePasse: str):
|
def connexion(self, utilisateur: str, motDePasse: str):
|
||||||
"""Gère la connexion aux différentes interfaces de l'application."""
|
"""Gère la connexion aux différentes interfaces de l'application."""
|
||||||
# Vérification nom d'utilisateur / mot de passe correctement entré
|
"""
|
||||||
if len(utilisateur) == 0 or len(motDePasse) == 0 or len(motDePasse) < 8:
|
Vérification nom d'utilisateur / mot de passe correctement entré
|
||||||
messagebox.showerror("Erreur", "Utilisateur ou mot de passe incorrect.")
|
-> Pour le nom d'utilisateur on vérifie si le champs n'est pas vide
|
||||||
|
et si il y a bien que des lettres et des chiffres (le regex élimine tout
|
||||||
|
ce qui n'est pas ça, alors si la fonction `sub` renvoie pas exactement
|
||||||
|
la même chaîne de charactère alors c'est qu'il y avait un charactère
|
||||||
|
interdit dans le nom d'utilisateur).
|
||||||
|
-> Pour le mot de passe on demande à la fonction `motDePasseCorrect` pour
|
||||||
|
éviter de faire tout les tests ici.
|
||||||
|
"""
|
||||||
|
if len(utilisateur) == 0 or sub(r" *?[^\w\s]+", '', utilisateur) != utilisateur:
|
||||||
|
messagebox.showerror("Erreur", "Utilisateur incorrect.")
|
||||||
|
return
|
||||||
|
mdpOk = self.motDePasseCorrect(motDePasse)
|
||||||
|
if not mdpOk[0]:
|
||||||
|
messagebox.showerror("Erreur", mdpOk[1])
|
||||||
return
|
return
|
||||||
|
|
||||||
# Redirection vers la bonne interface
|
# Redirection vers la bonne interface
|
||||||
|
@ -51,7 +85,7 @@ class GesMag:
|
||||||
|
|
||||||
# Affichage des labels et boutons
|
# Affichage des labels et boutons
|
||||||
tentativeDeConnexion = lambda _ = None: self.connexion(utilisateur.get(), motDpasse.get()) # lambda pour envoyer les informations entrés dans le formulaire
|
tentativeDeConnexion = lambda _ = None: self.connexion(utilisateur.get(), motDpasse.get()) # lambda pour envoyer les informations entrés dans le formulaire
|
||||||
ecart = 80 # Ecart pour avoir un affichage centré
|
ecart = 80 # écart pour avoir un affichage centré
|
||||||
Label(self.f).grid(row=0, pady=50) # utilisé pour du padding (meilleur affichage)
|
Label(self.f).grid(row=0, pady=50) # utilisé pour du padding (meilleur affichage)
|
||||||
|
|
||||||
Label(self.f, text="Utilisateur", font=self.font).grid(column=0, row=1, columnspan=2, padx=ecart - 20, pady=20, sticky=W)
|
Label(self.f, text="Utilisateur", font=self.font).grid(column=0, row=1, columnspan=2, padx=ecart - 20, pady=20, sticky=W)
|
||||||
|
|
Reference in a new issue