Public Access
Auto-updater, limites CPU 60% et facturation corrigés
Build and Push Docker Image / build-and-push (push) Successful in 1m55s
Build and Push Docker Image / build-and-push (push) Successful in 1m55s
This commit is contained in:
1 parent
71d6f51ee0
commit
b4ed2947d4
15 files changed
+7413
-122
No files matched your search
@@ -11,6 +11,9 @@ from modules.chat_handler import handle_chat_request
|
||||
from modules.security import verifier_et_bloquer_vpn, journaliser_ip
|
||||
from modules.auth_manager import IDENTIFIANTS_ADMIN, verifier_mot_de_passe
|
||||
|
||||
# Lancement du module d'auto-mise à jour en arrière-plan
|
||||
import modules.model_updater
|
||||
|
||||
# --- MIDDLEWARE DE SÉCURITÉ ---
|
||||
class SecurityMiddleware(BaseHTTPMiddleware):
|
||||
async def dispatch(self, request, call_next):
|
||||
@@ -20,7 +23,10 @@ class SecurityMiddleware(BaseHTTPMiddleware):
|
||||
if not request.url.path.startswith("/Logo") and not request.url.path.startswith("/login"):
|
||||
if verifier_et_bloquer_vpn(ip, utilisateur):
|
||||
return HTMLResponse("<h1 style='color:red; text-align:center;'>Accès refusé</h1><p style='text-align:center;'>VPN ou Proxy strictement interdit.</p>", status_code=403)
|
||||
journaliser_ip(ip, f"Accès à {request.url.path}")
|
||||
|
||||
# Exclusion stricte du spam de logs (Silence pour /ping et /favicon)
|
||||
if request.url.path not in ["/ping", "/favicon.ico"]:
|
||||
journaliser_ip(ip, f"Accès à {request.url.path}")
|
||||
|
||||
return await call_next(request)
|
||||
|
||||
@@ -45,7 +51,7 @@ async def post(request, session):
|
||||
if form.get("email") == IDENTIFIANTS_ADMIN["email"] and verifier_mot_de_passe(form.get("password"), IDENTIFIANTS_ADMIN["mot_de_passe_hash"]):
|
||||
session['user'] = "xavier"
|
||||
resp = RedirectResponse('/', status_code=303)
|
||||
resp.set_cookie("aethas_user", "xavier", max_age=86400) # Utilisé par le Middleware
|
||||
resp.set_cookie("aethas_user", "xavier", max_age=86400)
|
||||
return resp
|
||||
return render_login_page(error="Accès refusé. Identifiants incorrects.")
|
||||
|
||||
@@ -58,16 +64,27 @@ def get(session):
|
||||
|
||||
# --- ROUTES PROTÉGÉES ---
|
||||
@rt('/')
|
||||
def get(session):
|
||||
if 'user' not in session:
|
||||
def get(session, request):
|
||||
utilisateur = session.get('user') or request.cookies.get('aethas_user')
|
||||
if not utilisateur:
|
||||
return RedirectResponse('/login', status_code=303)
|
||||
|
||||
session['user'] = utilisateur
|
||||
if 'current_chat_id' not in session or not session['current_chat_id']:
|
||||
session['current_chat_id'] = str(uuid.uuid4())
|
||||
return render_main_page(session['current_chat_id'], utilisateur_nom=session['user'])
|
||||
|
||||
@rt('/chat')
|
||||
async def post(request, session: dict):
|
||||
if 'user' not in session: return HTMLResponse("Non autorisé", status_code=401)
|
||||
async def post(request, session):
|
||||
utilisateur = session.get('user') or request.cookies.get('aethas_user')
|
||||
if not utilisateur:
|
||||
return HTMLResponse(
|
||||
"<div style='color:red; background:#300; padding:15px; border-radius:10px; margin-top:10px;'>"
|
||||
"<b>❌ Session expirée ou non autorisée.</b> Veuillez rafraîchir la page (F5) pour vous reconnecter."
|
||||
"</div>",
|
||||
status_code=401
|
||||
)
|
||||
session['user'] = utilisateur
|
||||
return await handle_chat_request(request, session)
|
||||
|
||||
@rt('/favicon.ico')
|
||||
|
||||
Reference in new issue
Block a user