feat: Préparation au déploiement Docker, sécurisation du README et ajout du module de facturation

This commit is contained in:
xavier committed 2026-08-18 14:43:31 +02:00
1 parent 317ecddc56
commit 37ee5c6234
5 files changed
+163 -12

No files matched your search

+47
View File
@@ -0,0 +1,47 @@
import os
import bcrypt
from cryptography.fernet import Fernet
from modules.logger import log_event
# 1. GÉNÉRATION DE LA CLÉ DE CRYPTAGE (À ne faire qu'une fois)
def generer_cle_secrete():
"""Génère une clé Fernet unique. À sauvegarder dans le .env"""
cle = Fernet.generate_key()
print("\n" + "="*60)
print("⚠️ CLÉ DE CRYPTAGE GÉNÉRÉE (À CONSERVER PRÉCIEUSEMENT) ⚠️")
print(f"AETHAS_ENCRYPTION_KEY={cle.decode('utf-8')}")
print("Copiez cette ligne dans votre fichier .env")
print("="*60 + "\n")
return cle
def obtenir_fernet():
cle = os.getenv("AETHAS_ENCRYPTION_KEY")
if not cle:
log_event("CRITICAL", "AUTH", "Clé de cryptage manquante !")
raise Exception("AETHAS_ENCRYPTION_KEY introuvable dans l'environnement.")
return Fernet(cle.encode('utf-8'))
# 2. CRYPTAGE DES DONNÉES SENSIBLES (Clés API des utilisateurs, CB, etc.)
def crypter_donnee(donnee_claire):
f = obtenir_fernet()
return f.encrypt(donnee_claire.encode('utf-8')).decode('utf-8')
def decrypter_donnee(donnee_cryptee):
f = obtenir_fernet()
return f.decrypt(donnee_cryptee.encode('utf-8')).decode('utf-8')
# 3. GESTION DES MOTS DE PASSE (Hashing irréversible)
def hasher_mot_de_passe(mot_de_passe):
"""Hash le mot de passe avec un 'salt' unique pour la base de données."""
return bcrypt.hashpw(mot_de_passe.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
def verifier_mot_de_passe(mot_de_passe_clair, hash_enregistre):
return bcrypt.checkpw(mot_de_passe_clair.encode('utf-8'), hash_enregistre.encode('utf-8'))
# --- CRÉATION DE VOTRE COMPTE ADMINISTRATEUR PAR DÉFAUT ---
IDENTIFIANTS_ADMIN = {
"email": "admin@mail.aethas38.duckdns.org",
# Mot de passe par défaut : Xavier2026! (Il est hashé ici pour la sécurité du code)
"mot_de_passe_hash": "$2b$12$R.K19pS8M5/xVd2o.3nSZeZ8GzH6J9gR/vY9x6g3Zp2vJq4vX2J0e",
"role": "Dieu tout puissant"
}