Projet_multi_stream_obs/methode1/mysqlco.py

109 lines
4.3 KiB
Python
Raw Normal View History

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('<Button-1>', 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('<Button-1>', 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('<Button-1>', 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('<Button-1>', 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()