Audit exclusion: match par nom ET code (form UI envoie l'un ou l'autre)

This commit is contained in:
Pierre & Lumière 2026-04-15 00:14:39 +02:00
parent 1cc8d42e4a
commit 48efb07b49

View File

@ -139,10 +139,13 @@ async def audit_global(request: Request, db=Depends(get_db)):
# Matche sur domaine plain-text (via d.name) ou via d.code legacy # Matche sur domaine plain-text (via d.name) ou via d.code legacy
# et accepte les serveurs sans domaine attribue (ne pas penaliser le NULL) # et accepte les serveurs sans domaine attribue (ne pas penaliser le NULL)
if exclude_domains: if exclude_domains:
# Compare sur domaine plain-text puis fallback jointure. NULL = exclu. # Match par nom (servers.domaine / domains.name) ET par code (domains.code).
# Le form UI peut envoyer soit le name soit le code selon le template.
# NULL = exclu (serveur non tagge = pas auditable via UI).
where.append( where.append(
"COALESCE(s.domaine, d.name, d.code) IS NOT NULL " "(s.domaine IS NOT NULL OR d.name IS NOT NULL) "
"AND COALESCE(s.domaine, d.name, d.code) NOT IN :ed" "AND COALESCE(s.domaine, d.name) NOT IN :ed "
"AND COALESCE(d.code, '') NOT IN :ed"
) )
params["ed"] = tuple(exclude_domains) params["ed"] = tuple(exclude_domains)
if exclude_zones: if exclude_zones: