Public Access
feat: Préparation au déploiement Docker, sécurisation du README et ajout du module de facturation
This commit is contained in:
1 parent
317ecddc56
commit
37ee5c6234
5 files changed
+163
-12
No files matched your search
@@ -2,18 +2,40 @@ import uuid
|
||||
from fasthtml.common import *
|
||||
from starlette.staticfiles import StaticFiles
|
||||
from starlette.responses import FileResponse
|
||||
from starlette.middleware.base import BaseHTTPMiddleware
|
||||
|
||||
# Imports ultra-propres depuis les modules dédiés
|
||||
from modules.theme import get_theme_hdrs
|
||||
from modules.database import nettoyer_vieilles_discussions, HISTORY_FILE, load_history, save_history
|
||||
from modules.ui_components import render_main_page, render_sidebar
|
||||
from modules.chat_handler import handle_chat_request
|
||||
from modules.security import verifier_et_bloquer_vpn, journaliser_ip
|
||||
|
||||
# --- MIDDLEWARE DE SÉCURITÉ ---
|
||||
class SecurityMiddleware(BaseHTTPMiddleware):
|
||||
async def dispatch(self, request, call_next):
|
||||
# Récupération de l'IP du client (gère le proxy NPM si configuré avec X-Forwarded-For)
|
||||
ip = request.headers.get("X-Forwarded-For", request.client.host).split(",")[0].strip()
|
||||
|
||||
# On exclut les requêtes internes et statiques pour ne pas spammer les logs
|
||||
if ip not in ["127.0.0.1", "localhost", "::1"] and not request.url.path.startswith("/Logo"):
|
||||
# 1. Vérification VPN
|
||||
if verifier_et_bloquer_vpn(ip):
|
||||
return HTMLResponse("<h1 style='color:red; text-align:center;'>Accès refusé</h1><p style='text-align:center;'>Les connexions via VPN, Proxy ou Datacenter sont strictement interdites sur cette plateforme.</p>", status_code=403)
|
||||
# 2. Journalisation RGPD
|
||||
journaliser_ip(ip, f"Accès à {request.url.path}")
|
||||
|
||||
return await call_next(request)
|
||||
|
||||
# On exécute le nettoyage au démarrage
|
||||
nettoyer_vieilles_discussions()
|
||||
|
||||
# Initialisation du serveur FastHTML
|
||||
app, rt = fast_app(hdrs=get_theme_hdrs(), secret_key="super_secret_aethas")
|
||||
# Initialisation du serveur FastHTML avec le Middleware de sécurité
|
||||
app, rt = fast_app(
|
||||
hdrs=get_theme_hdrs(),
|
||||
secret_key="super_secret_aethas",
|
||||
middleware=[Middleware(SecurityMiddleware)]
|
||||
)
|
||||
|
||||
# Montage du dossier statique pour rendre accessible le logo
|
||||
app.mount("/Logo", StaticFiles(directory="Logo"), name="Logo")
|
||||
|
||||
Reference in new issue
Block a user