# auth_backend.py import json import uuid from datetime import datetime from werkzeug.security import generate_password_hash, check_password_hash from git_storage import ( load_users_data, save_users_data, create_user_data_structure, ) # Fonction pour valider l'email def is_valid_email(email): # Une validation simple return "@" in email and "." in email # Fonction d'inscription de l'utilisateur def register_user(email, password): # 1. Validation de base if not is_valid_email(email) or len(password) < 8: return None, "Email invalide ou mot de passe trop court (min 8 caractères)." users = load_users_data() # 2. Vérification de l'existence if any(u.get("email") == email for u in users.values()): return None, "Cet email est déjà enregistré." # 3. Création du nouvel utilisateur user_id = str(uuid.uuid4()) hashed_password = generate_password_hash(password) new_user = { "email": email, "password_hash": hashed_password, "user_id": user_id, "created_at": datetime.now().isoformat() } users[user_id] = new_user # 4. Sauvegarde et commit de users.json success_save = save_users_data(users, commit_message=f"feat: New user registration for {email}") if not success_save: return None, "Erreur lors de la sauvegarde des données utilisateur (Hugging Face)." # 5. Création de la structure de données et de la première conversation (si nécessaire) # L'implémentation actuelle de create_user_data_structure crée un fichier vide. # Vous pouvez ajouter ici la logique pour une première conversation si vous le souhaitez. create_user_data_structure(user_id) # Retourne l'ID et un message de succès return user_id, "Inscription réussie." # Fonction de connexion de l'utilisateur def login_user(email, password): users = load_users_data() # 1. Recherche de l'utilisateur par email user = next((u for u in users.values() if u.get("email") == email), None) if user is None: return None, "Email ou mot de passe incorrect." # 2. Vérification du mot de passe if not check_password_hash(user["password_hash"], password): return None, "Email ou mot de passe incorrect." # 3. Connexion réussie return user["user_id"], "Connexion réussie." # Fonction pour obtenir les données utilisateur par ID def get_user_by_id(user_id): users = load_users_data() return users.get(user_id)