diff --git a/Outils/Test_sms.py b/Outils/Test_sms.py index 4460aac..601e63a 100644 --- a/Outils/Test_sms.py +++ b/Outils/Test_sms.py @@ -1,6 +1,6 @@ from alerte_sms import envoyer_sms_ovh -site = "Saclay" # ou "Meudon", selon ce que tu veux tester +site = "Meudon" # ou "Meudon", selon ce que tu veux tester message = "✅ Test SMS depuis le script Monitor - tout fonctionne bien" envoyer_sms_ovh(message, site) diff --git a/domo91.py b/domo91.py index ba174d8..92ba62f 100644 --- a/domo91.py +++ b/domo91.py @@ -235,6 +235,45 @@ def ajouter_utilisateur(utilisateur, mot_de_passe, role, lieu, expiration): except Exception as e: return False, f"⚠️ Erreur : {e}" +def afficher_gestion_expiration(conn): + st.subheader("🔐 Gestion des expirations d'accès") + + # Récupérer les utilisateurs avec leurs dates d'expiration + cursor = conn.cursor(dictionary=True) + cursor.execute("SELECT Id, utilisateur, Expiration FROM MotsDePasse") + users = cursor.fetchall() + cursor.close() + + df = pd.DataFrame(users) + df['Expiration'] = pd.to_datetime(df['Expiration']).dt.date + + for _, row in df.iterrows(): + est_expire = row['Expiration'] < date.today() + fond = "#ffe6e6" if est_expire else "#f8f9fa" + with st.container(): + st.markdown(f"
", + unsafe_allow_html=True) + col1, col2, col3 = st.columns([4, 2, 1]) + with col1: + st.markdown(f"**Utilisateur :** {row['utilisateur']}") + if est_expire: + st.markdown("⛔ Accès expiré", + unsafe_allow_html=True) + + with col2: + new_date = st.date_input("Expiration", row['Expiration'], key=f"exp_{row['Id']}") + with col3: + if st.button("✅", key=f"save_{row['Id']}"): + try: + cursor = conn.cursor() + cursor.execute("UPDATE MotsDePasse SET Expiration = %s WHERE Id = %s", + (new_date, row['Id'])) + conn.commit() + st.success(f"✅ {row['utilisateur']} mis à jour") + cursor.close() + except Exception as e: + st.error(f"Erreur : {e}") + # 📄 Affichage bouton PDF si une date est choisie site_pdf = ( st.session_state.get("lieu_autorise") @@ -627,46 +666,8 @@ if st.session_state["authenticated"]: elif onglet == "Entretien": st.markdown("## 🧰 Gestion des sondes en entretien") - # --- Gérer les expirations comptes --- - def afficher_gestion_expiration(conn): - st.subheader("🔐 Gestion des expirations d'accès") - # Récupérer les utilisateurs avec leurs dates d'expiration - cursor = conn.cursor(dictionary=True) - cursor.execute("SELECT Id, utilisateur, Expiration FROM MotsDePasse") - users = cursor.fetchall() - cursor.close() - - df = pd.DataFrame(users) - df['Expiration'] = pd.to_datetime(df['Expiration']).dt.date - - for _, row in df.iterrows(): - est_expire = row['Expiration'] < date.today() - fond = "#ffe6e6" if est_expire else "#f8f9fa" # rouge clair si expiré, gris clair sinon - with st.container(): - st.markdown(f"
", - unsafe_allow_html=True) - col1, col2, col3 = st.columns([4, 2, 1]) - with col1: - st.markdown(f"**Utilisateur :** {row['utilisateur']}") - if est_expire: - st.markdown("⛔ Accès expiré", - unsafe_allow_html=True) - - with col2: - new_date = st.date_input("Expiration", row['Expiration'], key=f"exp_{row['Id']}") - with col3: - if st.button("✅", key=f"save_{row['Id']}"): - try: - cursor = conn.cursor() - cursor.execute("UPDATE MotsDePasse SET Expiration = %s WHERE Id = %s", - (new_date, row['Id'])) - conn.commit() - st.success(f"✅ {row['utilisateur']} mis à jour") - cursor.close() - except Exception as e: - st.error(f"Erreur : {e}") - st.markdown("

", unsafe_allow_html=True) + st.markdown("

", unsafe_allow_html=True) role = st.session_state.get("role", "utilisateur") lieu = st.session_state.get("lieu_autorise") if role != "superviseur" else st.selectbox("Choisir un lieu :", ["Saclay", "Meudon"]) @@ -709,16 +710,6 @@ if st.session_state["authenticated"]: except Exception as e: st.error(f"Erreur lors du chargement des sondes : {e}") - # 👉 Gestion des expirations visibles uniquement pour les superviseurs - if role == "superviseur": - try: - conn = mysql.connector.connect(**db_config) - afficher_gestion_expiration(conn) - conn.close() - except Exception as e: - st.error(f"Erreur lors du chargement des comptes : {e}") - - # --- ONGLET TRAFFIC ------ elif onglet == "Traffic": st.markdown("## 🚦 Connexions récentes") @@ -778,14 +769,18 @@ if st.session_state["authenticated"]: cursor.execute("SELECT utilisateur, role, Lieu, Expiration FROM MotsDePasse ORDER BY utilisateur") users = cursor.fetchall() cursor.close() - conn.close() if users: - import pandas as pd - df_users = pd.DataFrame(users) st.dataframe(df_users) else: st.info("Aucun utilisateur trouvé.") + + # ✅ Appel de la gestion des expirations + afficher_gestion_expiration(conn) + conn.close() + except Exception as e: - st.error(f"Erreur lors du chargement des utilisateurs : {e}") \ No newline at end of file + st.error(f"Erreur lors du chargement des utilisateurs : {e}") + + diff --git a/hash_passwords.py b/hash_passwords.py deleted file mode 100644 index 2cfe2be..0000000 --- a/hash_passwords.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -import mysql.connector -import bcrypt -from dotenv import load_dotenv -import os - -# Charger les variables d'environnement depuis .env -load_dotenv() - -conn = mysql.connector.connect( - host=os.getenv("DB_HOST"), - user=os.getenv("DB_USER"), - password=os.getenv("DB_PASSWORD"), - database=os.getenv("DB_NAME") -) -cursor = conn.cursor() - -cursor.execute("SELECT utilisateur, mot_de_passe FROM MotsDePasse") -utilisateurs = cursor.fetchall() - -def hash_password(plain_text_password): - return bcrypt.hashpw(plain_text_password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8') - -for utilisateur, mot_de_passe in utilisateurs: - if mot_de_passe.startswith('$2b$') or mot_de_passe.startswith('$2a$'): - print(f"{utilisateur} : déjà haché") - continue - - hashe = hash_password(mot_de_passe) - cursor.execute("UPDATE MotsDePasse SET mot_de_passe = %s WHERE utilisateur = %s", (hashe, utilisateur)) - print(f"{utilisateur} : mot de passe haché") - -conn.commit() -conn.close() -print("Mise à jour terminée.") - - - -