Spaces:
Sleeping
Sleeping
import streamlit as st | |
import sys | |
import os | |
from datetime import datetime | |
import pytz | |
import logging # Ajout de l'import logging | |
from utils.admin import supabase | |
# Configuration du logging | |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
# IMPORTANT : set_page_config doit être la première commande Streamlit | |
st.set_page_config( | |
page_title="Vérification de l'email", | |
page_icon="✉️", | |
layout="centered" | |
) | |
# Cacher les éléments de navigation | |
hide_streamlit_style = """ | |
<style> | |
#MainMenu {visibility: hidden;} | |
header {visibility: hidden;} | |
.css-1544g2n {display: none;} | |
section[data-testid="stSidebar"] {display: none;} | |
</style> | |
""" | |
st.markdown(hide_streamlit_style, unsafe_allow_html=True) | |
def verify_email_token(token: str) -> tuple[bool, str]: | |
"""Vérifie le token et active le compte""" | |
try: | |
# Vérifier le token | |
verification = supabase.table("email_verification").select("*").eq( | |
"verification_token", token | |
).eq("is_verified", False).execute() | |
if not verification.data: | |
return False, "Token de vérification invalide ou déjà utilisé." | |
verification_data = verification.data[0] | |
expires_at = datetime.fromisoformat(verification_data['expires_at'].replace('Z', '+00:00')) | |
if expires_at < datetime.now(pytz.UTC): | |
return False, "Le lien de vérification a expiré." | |
# Activer l'utilisateur | |
supabase.table("users").update({ | |
"is_active": True | |
}).eq("id", verification_data['user_id']).execute() | |
# Marquer comme vérifié | |
supabase.table("email_verification").update({ | |
"is_verified": True | |
}).eq("id", verification_data['id']).execute() | |
return True, "Email vérifié avec succès!" | |
except Exception as e: | |
logging.error(f"Erreur lors de la vérification : {str(e)}") | |
return False, f"Erreur lors de la vérification : {str(e)}" | |
# Titre de la page | |
st.title("✉️ Vérification de l'email") | |
# Debug: Afficher le token reçu dans les logs | |
token = st.query_params.get("token", None) | |
logging.info(f"Token reçu : {token if token else 'Aucun token'}") | |
if not token: | |
st.error("Token de vérification manquant.") | |
st.stop() | |
# Vérifier le token et activer le compte | |
success, message = verify_email_token(token) | |
if success: | |
st.success(message) | |
st.info("Votre compte est maintenant actif. Vous pouvez vous connecter.") | |
# Bouton pour aller à la page de connexion | |
if st.button("Aller à la page de connexion"): | |
st.switch_page("app.py") | |
else: | |
st.error(message) | |
if "expiré" in message: | |
st.info("Veuillez demander un nouveau lien de vérification.") |