adam-hassen
version finale avec modele des news
7f997f8
Raw
History Blame Contribute Delete
7.56 kB
import sqlite3
import bcrypt
from services.database import get_connection
def create_user(email, password, face_image=None, prenom=None, nom=None, telephone=None, is_admin=0):
"""Crée un utilisateur normal (admin=0 par défaut)"""
conn = get_connection()
cursor = conn.cursor()
hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt())
try:
cursor.execute("SELECT id FROM users WHERE email = ?", (email,))
if cursor.fetchone():
print(f" Email déjà existant: {email}")
conn.close()
return False
cursor.execute(
"INSERT INTO users (email, password, face_image, prenom, nom, telephone, is_admin) VALUES (?, ?, ?, ?, ?, ?, ?)",
(email, hashed, face_image, prenom, nom, telephone, is_admin)
)
conn.commit()
print(f" Utilisateur créé: {email} (admin: {is_admin})")
conn.close()
return True
except Exception as e:
print(f" Erreur création: {e}")
conn.close()
return False
def verify_user(email, password):
"""Vérifie les identifiants et retourne les infos utilisateur"""
conn = get_connection()
cursor = conn.cursor()
cursor.execute("SELECT password, is_admin FROM users WHERE email=?", (email,))
result = cursor.fetchone()
conn.close()
if result and bcrypt.checkpw(password.encode(), result[0]):
return {"email": email, "is_admin": result[1]}
return None
def get_user_by_email(email):
"""Récupère les infos d'un utilisateur"""
conn = get_connection()
cursor = conn.cursor()
cursor.execute(
"SELECT id, email, is_admin, face_image, prenom, nom, telephone, created_at, public_stats, COALESCE(is_online, 0) FROM users WHERE email=?",
(email,)
)
result = cursor.fetchone()
conn.close()
if result:
return {
"id": result[0],
"email": result[1],
"is_admin": result[2],
"face_image": result[3],
"prenom": result[4] or "",
"nom": result[5] or "",
"telephone": result[6] or "",
"created_at": result[7] or "",
"public_stats": bool(result[8]),
"is_online": bool(result[9]),
}
return None
def set_online_status(email, value: bool):
"""Active ou désactive le statut en ligne de l'utilisateur"""
conn = get_connection()
cursor = conn.cursor()
try:
cursor.execute("UPDATE users SET is_online = ? WHERE email = ?", (1 if value else 0, email))
conn.commit()
return True
except Exception as e:
print(f"Erreur set_online_status: {e}")
return False
finally:
conn.close()
def set_public_stats(email, value: bool):
"""Active ou désactive la visibilité publique des stats de l'utilisateur"""
conn = get_connection()
cursor = conn.cursor()
try:
cursor.execute("UPDATE users SET public_stats = ? WHERE email = ?", (1 if value else 0, email))
conn.commit()
return True
except Exception as e:
print(f"Erreur set_public_stats: {e}")
return False
finally:
conn.close()
def update_user_profile(email, prenom, nom, telephone):
"""Met à jour les informations de profil d'un utilisateur"""
conn = get_connection()
cursor = conn.cursor()
try:
cursor.execute(
"UPDATE users SET prenom=?, nom=?, telephone=? WHERE email=?",
(prenom, nom, telephone, email)
)
conn.commit()
return cursor.rowcount > 0
except Exception as e:
print(f" Erreur mise à jour profil: {e}")
return False
finally:
conn.close()
def is_admin(email):
"""Vérifie si un utilisateur est admin"""
user = get_user_by_email(email)
return user and user["is_admin"] == 1
def promote_to_admin(email):
"""Promouvoir un utilisateur en admin"""
conn = get_connection()
cursor = conn.cursor()
cursor.execute("UPDATE users SET is_admin = 1 WHERE email = ?", (email,))
conn.commit()
success = cursor.rowcount > 0
conn.close()
if success:
print(f" {email} est maintenant admin")
return success
def demote_from_admin(email):
"""Rétrograder un admin en utilisateur normal"""
conn = get_connection()
cursor = conn.cursor()
# Vérifier que ce n'est pas le dernier admin
cursor.execute("SELECT COUNT(*) FROM users WHERE is_admin = 1")
admin_count = cursor.fetchone()[0]
if admin_count <= 1:
print(" Impossible de rétrograder le dernier admin")
conn.close()
return False
cursor.execute("UPDATE users SET is_admin = 0 WHERE email = ?", (email,))
conn.commit()
success = cursor.rowcount > 0
conn.close()
return success
def get_all_users():
"""Récupère tous les utilisateurs (pour admin)"""
conn = get_connection()
cursor = conn.cursor()
cursor.execute("SELECT id, email, is_admin, face_image FROM users ORDER BY id DESC")
users = cursor.fetchall()
conn.close()
return users
# Ajoute ces fonctions à la fin du fichier auth_service.py
def promote_to_admin(email):
"""Promouvoir un utilisateur en admin"""
conn = get_connection()
cursor = conn.cursor()
try:
cursor.execute("UPDATE users SET is_admin = 1 WHERE email = ?", (email,))
conn.commit()
success = cursor.rowcount > 0
if success:
print(f" {email} promu admin")
return success
except Exception as e:
print(f" Erreur promotion: {e}")
return False
finally:
conn.close()
def demote_from_admin(email):
"""Rétrograder un admin en utilisateur normal"""
conn = get_connection()
cursor = conn.cursor()
try:
# Vérifier que ce n'est pas le dernier admin
cursor.execute("SELECT COUNT(*) FROM users WHERE is_admin = 1")
admin_count = cursor.fetchone()[0]
if admin_count <= 1:
print(" Impossible de rétrograder le dernier admin")
return False
cursor.execute("UPDATE users SET is_admin = 0 WHERE email = ?", (email,))
conn.commit()
success = cursor.rowcount > 0
if success:
print(f" {email} rétrogradé")
return success
except Exception as e:
print(f" Erreur rétrogradation: {e}")
return False
finally:
conn.close()
def delete_user(user_id):
"""Supprimer un utilisateur par son ID"""
conn = get_connection()
cursor = conn.cursor()
try:
# Vérifier que ce n'est pas le dernier admin
cursor.execute("SELECT email, is_admin FROM users WHERE id = ?", (user_id,))
user = cursor.fetchone()
if user and user[1] == 1: # C'est un admin
cursor.execute("SELECT COUNT(*) FROM users WHERE is_admin = 1")
admin_count = cursor.fetchone()[0]
if admin_count <= 1:
print(" Impossible de supprimer le dernier admin")
return False
cursor.execute("DELETE FROM users WHERE id = ?", (user_id,))
conn.commit()
deleted = cursor.rowcount > 0
if deleted:
print(f" Utilisateur {user_id} supprimé")
return deleted
except Exception as e:
print(f" Erreur suppression: {e}")
return False
finally:
conn.close()
# ... (garde les autres fonctions comme get_users_with_faces, etc.)