File size: 2,585 Bytes
f490d20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# 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)