109 lines
4.3 KiB
Python
109 lines
4.3 KiB
Python
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 service
|
|
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()
|