Refonte Domo91.py, mot de passe bcrypt
This commit is contained in:
@@ -17,7 +17,7 @@ st.set_page_config(page_title="Domo91 - Surveillance", layout="wide")
|
||||
if "authenticated" not in st.session_state:
|
||||
st.session_state["authenticated"] = False
|
||||
st.session_state["role"] = None
|
||||
st.session_state["lieu_autorise"] = None
|
||||
st.session_state["site_autorise"] = None
|
||||
|
||||
st.title("📡 Supervision Températures")
|
||||
|
||||
@@ -154,8 +154,8 @@ if "authenticated" not in st.session_state:
|
||||
st.session_state["authenticated"] = False
|
||||
if "role" not in st.session_state:
|
||||
st.session_state["role"] = None
|
||||
if "lieu_autorise" not in st.session_state:
|
||||
st.session_state["lieu_autorise"] = None
|
||||
if "site_autorise" not in st.session_state:
|
||||
st.session_state["site_autorise"] = None
|
||||
|
||||
# --- Connexion utilisateur dans la sidebar ---
|
||||
st.sidebar.header("🔐 Connexion")
|
||||
@@ -178,7 +178,7 @@ if not st.session_state.get("authenticated"):
|
||||
st.stop()
|
||||
st.session_state["authenticated"] = True
|
||||
st.session_state["role"] = result["role"]
|
||||
st.session_state["lieu_autorise"] = result["Lieu"]
|
||||
st.session_state["site_autorise"] = result["Lieu"]
|
||||
st.success(f"Connecté comme {result['role']} ({result['Lieu']})")
|
||||
# Enregistrement de la connexion dans Connexion_Log
|
||||
try:
|
||||
@@ -202,31 +202,12 @@ else:
|
||||
if st.sidebar.button("🔓 Déconnexion", key="logout_sidebar"):
|
||||
st.session_state["authenticated"] = False
|
||||
st.session_state["role"] = None
|
||||
st.session_state["lieu_autorise"] = None
|
||||
st.session_state["site_autorise"] = None
|
||||
st.rerun()
|
||||
|
||||
def hash_password(password):
|
||||
return bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
|
||||
|
||||
def ajouter_utilisateur(utilisateur, mot_de_passe, role, lieu, expiration):
|
||||
try:
|
||||
conn = mysql.connector.connect(**db_config)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("SELECT * FROM MotsDePasse WHERE utilisateur = %s", (utilisateur,))
|
||||
if cursor.fetchone():
|
||||
return False, "❌ Utilisateur déjà existant."
|
||||
|
||||
hash_mdp = hash_password(mot_de_passe)
|
||||
cursor.execute("""
|
||||
INSERT INTO MotsDePasse (utilisateur, mot_de_passe, role, Lieu, Expiration)
|
||||
VALUES (%s, %s, %s, %s, %s)
|
||||
""", (utilisateur, hash_mdp, role, lieu, expiration))
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
return True, "✅ Utilisateur ajouté avec succès."
|
||||
except Exception as e:
|
||||
return False, f"⚠️ Erreur : {e}"
|
||||
|
||||
def afficher_gestion_expiration(conn):
|
||||
st.subheader("🔐 Gestion des expirations d'accès")
|
||||
@@ -269,7 +250,7 @@ def afficher_gestion_expiration(conn):
|
||||
|
||||
# 📄 Affichage bouton PDF si une date est choisie
|
||||
site_pdf = (
|
||||
st.session_state.get("lieu_autorise")
|
||||
st.session_state.get("site_autorise")
|
||||
if st.session_state.get("role") != "superviseur"
|
||||
|
||||
else st.session_state.get("selected_site")
|
||||
@@ -285,7 +266,7 @@ if site_pdf and date_pdf:
|
||||
# --- Forcer une alerte de test dynamique (réservé aux superviseurs)
|
||||
if st.session_state.get("authenticated") and st.session_state.get("role") == "superviseur":
|
||||
site_actuel = (
|
||||
st.session_state.get("lieu_autorise") or "Saclay"
|
||||
st.session_state.get("site_autorise") or "Saclay"
|
||||
if st.session_state.get("role") != "superviseur"
|
||||
else st.session_state.get("selected_site")
|
||||
)
|
||||
@@ -338,14 +319,14 @@ if st.session_state.get("authenticated") and st.session_state.get("role") == "su
|
||||
if st.button("🔓 Déconnexion", key="logout_main"):
|
||||
st.session_state["authenticated"] = False
|
||||
st.session_state["role"] = None
|
||||
st.session_state["lieu_autorise"] = None
|
||||
st.session_state["site_autorise"] = None
|
||||
st.rerun()
|
||||
|
||||
st.markdown("---")
|
||||
st.subheader("📄 Rapport PDF")
|
||||
if "selected_date" in st.session_state:
|
||||
if st.button("📅 Télécharger l'état du jour (PDF)"):
|
||||
site = st.session_state["lieu_autorise"]
|
||||
site = st.session_state["site_autorise"]
|
||||
date_val = st.session_state["selected_date"].strftime("%Y-%m-%d")
|
||||
generer_pdf(site, date_val, periode)
|
||||
else:
|
||||
@@ -382,10 +363,10 @@ if st.session_state["authenticated"]:
|
||||
if "role" not in st.session_state:
|
||||
st.session_state["role"] = None
|
||||
|
||||
if "lieu_autorise" not in st.session_state:
|
||||
st.session_state["lieu_autorise"] = None
|
||||
if "site_autorise" not in st.session_state:
|
||||
st.session_state["site_autorise"] = None
|
||||
site_selectionne = (
|
||||
st.session_state["lieu_autorise"]
|
||||
st.session_state["site_autorise"]
|
||||
if st.session_state["role"] != "superviseur"
|
||||
else st.session_state.get("selected_site", "Saclay")
|
||||
)
|
||||
@@ -421,7 +402,46 @@ if st.session_state["authenticated"]:
|
||||
onglet = st.sidebar.radio("📁 Navigation", onglets_possibles, index=onglets_possibles.index(onglet))
|
||||
st.session_state["onglet_actif"] = onglet
|
||||
|
||||
# --- ONGLET ACCUEIL ---
|
||||
# --- Bandeau Alertes ---
|
||||
try:
|
||||
conn = get_connection()
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
|
||||
# Récupérer le site autorisé depuis la session
|
||||
site = st.session_state.get("lieu_autorise")
|
||||
|
||||
if site:
|
||||
# Lecture des alertes non acquittées pour ce site
|
||||
cursor.execute(f"""
|
||||
SELECT Id, Sonde, Debut_defaut, Etat
|
||||
FROM Alertes_{site}
|
||||
WHERE Etat != 'Acquitté'
|
||||
ORDER BY Debut_defaut DESC
|
||||
""")
|
||||
alertes = cursor.fetchall()
|
||||
|
||||
if alertes:
|
||||
st.markdown(
|
||||
f"<div style='background-color:#ffcccc;padding:10px;border-radius:8px;'>"
|
||||
f"🚨 <b>{len(alertes)} alerte(s) non résolue(s)</b> sur <b>{site}</b>"
|
||||
f"</div>",
|
||||
unsafe_allow_html=True
|
||||
)
|
||||
else:
|
||||
st.markdown(
|
||||
f"<div style='background-color:#ccffcc;padding:10px;border-radius:8px;'>"
|
||||
f"✅ Aucune alerte en cours sur <b>{site}</b>"
|
||||
f"</div>",
|
||||
unsafe_allow_html=True
|
||||
)
|
||||
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
except Exception as e:
|
||||
st.error(f"Erreur lors de la récupération des alertes : {e}")
|
||||
|
||||
# --- ONGLET ACCUEIL ---
|
||||
if onglet == "Accueil":
|
||||
st.markdown("## Sélection du site et de la date")
|
||||
try:
|
||||
@@ -432,12 +452,12 @@ if st.session_state["authenticated"]:
|
||||
site_selectionne = st.selectbox("📍 Choisissez un site :", sites_possibles)
|
||||
st.session_state["selected_site"] = site_selectionne
|
||||
else:
|
||||
site_selectionne = st.session_state["lieu_autorise"]
|
||||
site_selectionne = st.session_state["site_autorise"]
|
||||
st.info(f"Site imposé : {site_selectionne}")
|
||||
|
||||
selected_date = st.date_input("📅 Date du relevé", value=date.today())
|
||||
st.session_state["selected_date"] = selected_date
|
||||
site_selectionne = st.session_state.get("lieu_autorise") or st.session_state.get("selected_site")
|
||||
site_selectionne = st.session_state.get("site_autorise") or st.session_state.get("selected_site")
|
||||
|
||||
if not site_selectionne:
|
||||
st.warning("Aucun site sélectionné.")
|
||||
@@ -514,7 +534,7 @@ if st.session_state["authenticated"]:
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
|
||||
site = (
|
||||
st.session_state["lieu_autorise"]
|
||||
st.session_state["site_autorise"]
|
||||
if st.session_state["role"] != "superviseur"
|
||||
else st.session_state.get("selected_site", "Saclay")
|
||||
)
|
||||
@@ -589,7 +609,7 @@ if st.session_state["authenticated"]:
|
||||
st.error(f"Erreur lors de l'ajout de la sonde : {e}")
|
||||
# --- Affichage automatique des alertes non acquittées ---
|
||||
site_selectionne = (
|
||||
st.session_state.get("lieu_autorise")
|
||||
st.session_state.get("site_autorise")
|
||||
if st.session_state.get("role") != "superviseur"
|
||||
else st.session_state.get("selected_site")
|
||||
)
|
||||
@@ -662,7 +682,7 @@ if st.session_state["authenticated"]:
|
||||
|
||||
st.markdown("</div><br>", 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 :",
|
||||
lieu = st.session_state.get("site_autorise") if role != "superviseur" else st.selectbox("Choisir un lieu :",
|
||||
["Saclay", "Meudon"])
|
||||
if not lieu:
|
||||
st.warning("Aucun site sélectionné.")
|
||||
|
||||
Reference in New Issue
Block a user