from main import * from tkinter import * from tkinter import messagebox import mysql.connector class Mysql: # On initialise une première fenêtre d'identification et de mot de passe def __init__(self, root): self.root = root self.root.title("Launcher OBS Extension Multistreaming") self.root.geometry("400x300") self.root.grid_rowconfigure(0, weight=1) self.root.grid_rowconfigure(1, weight=1) self.root.grid_rowconfigure(2, weight=1) self.root.grid_rowconfigure(3, weight=1) self.root.grid_columnconfigure(0, weight=1) self.root.grid_columnconfigure(1, weight=0) self.root.grid_columnconfigure(2, weight=0) self.root.grid_columnconfigure(3, weight=0) # On vérifie sur le serveur si l'identification correspond à des utilisateurs sur le serveur def authenticate_user(self, username, password): try: # Paramètres du serveur cnx = mysql.connector.connect(user='root', password='', host='127.0.0.1', database='obs_project') cur = cnx.cursor() # On lance une requête pour vérifier si le lastname et le service correspond à la base de donnée query = "SELECT * FROM utilisateurs WHERE username = %s AND password = %s" cur.execute(query, (username, password)) # Renvoie la première ligne de la base de donnée qui correspond user = cur.fetchone() # Si c'est le cas, on affiche le message suivant et on ouvre une nouvelle fenêtre if user: messagebox.showinfo("Validé", "Authentification réussi") self.ouvrir_nouvelle_fenetre(username, password) # Sinon on affiche un message d'erreur else: messagebox.showerror("Erreur", "Authentification erroné") # Message si une erreur innatendue except mysql.connector.Error as err: messagebox.showerror("Erreur", f"Erreur: {err}") # On ferme le tout, la connexion etc... finally: cur.close() cnx.close() # On va initialiser une nouvelle fenêtre après la connexion tout en fermant la première def ouvrir_nouvelle_fenetre(self, username, password): if self.root.winfo_exists(): # Vérifie si la fenêtre principale existe toujours self.root.withdraw() # Fermer la fenêtre actuelle NouvelleFenetre(self.root, username, password) # Création de la nouvelle fenêtre avec toutes les infos, utilitées etc... # Lorsqu'on clique sur la case identifiant, le texte se supprime pour pouvoir taper le sien def click_identifiant(self, event): entry_identifiant.configure(state=NORMAL) entry_identifiant.delete(0, END) entry_identifiant.unbind('', self.click_identifiant) # Lorsqu'on clique sur la case password, le texte se supprime pour pouvoir taper le sien def click_pass(self, event): entry_pass.configure(state=NORMAL) entry_pass.delete(0, END) entry_pass.unbind('', self.click_pass) # On test voir si le username et le password que l'on récupére, correspond pour s'identifier def msg_call_back(self): username = entry_identifiant.get() password = entry_pass.get() self.authenticate_user(username, password) # Creation de la fenetre principale fenetre = Tk() obj = Mysql(fenetre) # Ajout des boutons sur la fenêtre label = Label(fenetre, text="Connexion") label.grid(row = 0, column= 0) # Entrée du champs identifiant entry_identifiant = Entry(fenetre) entry_identifiant.grid(row = 1, column=0) entry_identifiant.focus() entry_identifiant.insert(0, "Admin") entry_identifiant.bind('', obj.click_identifiant) # Entrée du champs password entry_pass = Entry(fenetre, show='*') entry_pass.grid(row = 2, column=0) entry_pass.insert(0, "Admin") entry_pass.bind('', obj.click_pass) # Bouton de connexion avec la fonction msg_call_back boutonconnexion = Button(fenetre, text="Connexion", command=obj.msg_call_back, activebackground = "green") boutonconnexion.grid(row = 3, column = 0) # Lancer l'application fenetre.mainloop()