diff --git a/app/routers/qualys.py b/app/routers/qualys.py index ced0e8a..54dc9a2 100644 --- a/app/routers/qualys.py +++ b/app/routers/qualys.py @@ -1356,13 +1356,28 @@ async def qualys_asset_delete(request: Request, asset_id: int, db=Depends(get_db @router.get("/qualys/agents/{hostname}/audit-qualys", response_class=HTMLResponse) def qualys_agent_audit_page(hostname: str, request: Request, db=Depends(get_db), refresh: int = 0): - """Audit cible Qualys Agent (async). Background thread + page auto-refresh.""" + """Audit cible Qualys Agent (async). Background thread + page auto-refresh. + Bloque l'audit pour Windows (commandes shell Linux uniquement).""" user = get_current_user(request) if not user: return RedirectResponse(url="/login") perms = get_user_perms(db, user) if not can_view(perms, "qualys"): return RedirectResponse(url="/dashboard") + + # Garde-fou : audit non disponible pour Windows + asset_os = db.execute(text( + "SELECT os FROM qualys_assets WHERE LOWER(hostname)=LOWER(:h) LIMIT 1" + ), {"h": hostname}).scalar() + if asset_os and "windows" in asset_os.lower(): + ctx = base_context(request, db, user) + ctx.update({ + "hostname": hostname, "asset_os": asset_os, + "audit_status": "unsupported", "audit": None, + "audit_error": None, "audit_started_at": None, "audit_finished_at": None, + }) + return templates.TemplateResponse("qualys_agent_audit.html", ctx) + from app.services.realtime_audit_service import ( start_qualys_audit_async, get_qualys_audit_state ) diff --git a/app/templates/qualys_agent_audit.html b/app/templates/qualys_agent_audit.html index a8189cc..e8a4c58 100644 --- a/app/templates/qualys_agent_audit.html +++ b/app/templates/qualys_agent_audit.html @@ -6,6 +6,17 @@ {% endif %} +{% if audit_status == 'unsupported' %} +
+ L'audit SSH ciblé n'est disponible que pour les serveurs Linux.
+ Ce serveur est détecté comme Windows ({{ asset_os or '?' }}).
+