Commit Graph

116 Commits

Author SHA1 Message Date
cdcb85917d feat(qualys/agents): audit en background thread + page d'attente auto-refresh (fix ERR_CONNECTION_RESET sur audits longs) 2026-04-27 23:25:50 +02:00
03229d4d08 feat(qualys/agents): bouton Check + page audit cible Qualys agent (status + version + logs agent/systeme via SSH) 2026-04-27 23:09:05 +02:00
cc550c2d84 fix(qualys/duplicates): scan async (background thread) + bandeau scan en cours - evite 503 HAProxy 2026-04-25 10:31:07 +00:00
3d043af194 feat(qualys): page doublons + suppression API Qualys 1-clic 2026-04-25 10:17:40 +00:00
0ab4f2d8fa fix(qualys/dashboard): vire flag in-memory + safety net thread + flex layout 6 KPI 2026-04-25 00:13:22 +00:00
34cca6f77b fix(qualys/dashboard): user est un dict, utiliser user.get(sub) au lieu de .username 2026-04-25 00:09:15 +00:00
9a7f446637 fix(qualys/dashboard): insert pending row dans la route avant spawn thread (no race) 2026-04-25 00:07:22 +00:00
daf87891a7 feat(qualys/dashboard): is_running base sur DB (multi-worker safe) + bouton Annuler 2026-04-25 00:05:49 +00:00
8f8e8c4d8f feat(qualys): dashboard vulnerabilites avec KPI + historique 2026-04-24 23:49:46 +00:00
b06aedfc3b fix(qualys): force vuln cache refresh on bulk resync redirect 2026-04-24 22:51:11 +00:00
392c8f4fe5 fix(qualys/search): KPI vuln_map est dict total/severityN, pas int 2026-04-24 22:34:16 +00:00
3c00f05263 feat(qualys/agents): colonne Version OS dans table sans-agent 2026-04-24 22:30:39 +00:00
c57ef61adb feat(qualys/search): KPI total/avec-vuln/sans-vuln + filtre vuln_filter 2026-04-24 22:27:55 +00:00
5fedfb5f80 Add page Tour de garde SecOps : import xlsx + table + vue hebdo + competences 2026-04-17 23:39:11 +00:00
a0f90cd719 Optim: logging structure + query_helpers.py + fix exceptions silencieuses routers 2026-04-17 23:19:18 +00:00
9097872e57 Secu: verif permissions can_view/can_edit sur endpoints HTMX detail/edit 2026-04-17 23:15:04 +00:00
2bf2fa5042 patch_history: tolere parametres vides dans les filtres (week=, source=, etc.) 2026-04-17 12:42:58 +00:00
2ab2ceabba Historique patching : filtres OS/zone/domaine/intervenant + colonnes table 2026-04-17 12:10:45 +00:00
4b1794d4d1 Add page Historique patching : vue unifiee import xlsx + campagnes + quickwin 2026-04-17 08:47:25 +00:00
8b212df7a1 Qualys 'sans agent': match via server_id (couvre alias hostname Qualys != iTop) 2026-04-15 13:54:07 +02:00
245777fd46 Qualys agents: exclut Win10/11/Workstation de la liste 'Sans agent' 2026-04-15 13:49:05 +02:00
a3a1ec7e6d Qualys deploy: bouton 'Sauvegarder ces valeurs' (ActivationId/Customer/Uri persistes) 2026-04-15 13:34:24 +02:00
5b6e113792 Qualys deploy: filtre s.os_family=linux + retire dropdown OS du UI 2026-04-15 13:18:09 +02:00
55d08921f9 Qualys deploy: persiste activation_ids/customer/uri en secrets + selection auto Linux/Windows 2026-04-15 13:12:15 +02:00
f59c6dcbdb Qualys deploy: 2 dropdowns ActivationId Linux et Windows (separes) 2026-04-15 13:04:34 +02:00
0095f7914f Qualys deploy: POD SANEF = QG1 par defaut (pas QG2) 2026-04-15 13:00:45 +02:00
2972baca1f Qualys deploy: dropdown ActivationId depuis API + ServerUri auto-deduit URL Qualys 2026-04-15 12:53:18 +02:00
9e03fd84c0 Qualys tags page: bandeau sync en cours + bouton Resync API disable 2026-04-15 12:39:40 +02:00
48249d1c82 Qualys agents page: bandeau sync en cours + boutons sync desactives + bouton Annuler 2026-04-15 12:37:49 +02:00
1dc7560f44 Qualys tags resync: message clair si busy + erreur API detaillee 2026-04-15 12:35:34 +02:00
a62f9a4146 Qualys sync dual mode: diff (rapide, lastCheckedIn) + full (complet)
- refresh_all_agents accepte mode='diff'|'full' (defaut diff)
- Mode diff: filtre Qualys lastCheckedIn > qualys_last_diff_sync (settings)
- Mode full: pull tous les assets (comme avant)
- Skip early-exit en diff si dernier diff < 5 min
- 2 boutons UI: 'Sync rapide (diff)' et 'Sync complete'
- JS refreshAgents(mode) passe le mode en query param
2026-04-15 12:33:48 +02:00
2f880da275 Top bar: affiche display_name (Prenom NOM) + (AD) si LDAP + login en gris 2026-04-15 12:00:41 +02:00
67fa28a2af Fix LDAP auto-provision: colonne display_name (pas full_name) 2026-04-15 11:52:20 +02:00
f013aaaab6 LDAP auto-provision: user cree DESACTIVE par defaut + role viewer (admin doit l'activer) 2026-04-15 11:46:22 +02:00
53d4f71607 LDAP: restriction groupe AD + auto-provisioning users (sans permissions)
- Settings ldap_required_group (DN groupe autorise) + ldap_default_role
- ldap_authenticate verifie memberOf vs required_group avant bind
- auth.py: si user inconnu + LDAP + groupe OK -> auto-create user, role default,
  zero permission (admin doit assigner via /users)
2026-04-15 11:45:33 +02:00
d508072969 Add /qualys/tagsv3/catalog: page de reference nom/type/QQL/couleur par categorie
- Template catalog.html affiche les 6 categories + prefixes
- Tags avec QQL en font mono user-select:all pour copy-paste facile
- Export JSON dispo via /qualys/tagsv3/catalog.json
- Navigation croisee entre Vue/Catalog/Gap
2026-04-15 10:20:41 +02:00
ec7712f0c9 Add module Qualys Tags V3: catalogue YAML + service + pages /qualys/tagsv3 et /gap
- deploy/qualys_tags_v3.yaml: catalogue 19 DYN + 6 SPEC manuel + prefixes
- app/services/qualys_tags_service.py: list/analyze_gap/create_static/delete via API
- app/routers/qualys_tags.py: routes /qualys/tagsv3 et /gap
- templates: qualys_tagsv3.html (liste) + qualys_tagsv3_gap.html (diff catalogue)
- Route /qualys/tagsv3/create-all-static pour creer les STAT manquants en bulk
- DYN manquants affiches avec QQL copy-paste pour console Qualys (API ne permet pas)
- PyYAML ajoute aux requirements
2026-04-15 10:14:10 +02:00
2a10ec55ab Page /audit: liste les audits en cours avec bouton Reprendre 2026-04-15 00:22:22 +02:00
3c4244597c Audit: ThreadPoolExecutor avec parallel borne (evite saturation DB/PSMP) 2026-04-15 00:20:12 +02:00
48efb07b49 Audit exclusion: match par nom ET code (form UI envoie l'un ou l'autre) 2026-04-15 00:14:39 +02:00
ca4f779e48 Fix audit exclusion: NULL domaine = exclu (evite audit de 690 serveurs non-tagges) 2026-04-15 00:05:16 +02:00
69cedff0fe Fix audit exclusion: match sur servers.domaine OR d.name OR d.code, NULL = non-exclu
Les serveurs sans domain_env_id (majorite) etaient exclus a tort car
d.code=NULL et 'NULL NOT IN (...)' = NULL. Utilise COALESCE avec la
colonne plain-text s.domaine en priorite.
2026-04-14 23:59:36 +02:00
09e92c8b70 Fix export CSV: colonne zone (alias dans SELECT = 'zone' pas 'zone_name') 2026-04-14 23:26:30 +02:00
0be4849ef2 Fix filtres zone/licence perdus lors tri/pagination/export CSV
Les macros sort_url et qs + le lien Export CSV ne propageaient pas les
parametres zone/licence ajoutes recemment. Ajout dans:
- servers.html (macros + export link)
- servers.py (endpoint export-csv: signature + filters dict)
2026-04-14 22:25:57 +02:00
e2b984c2c4 Servers: filtre licence (active/obsolete/els/sans licence) 2026-04-14 22:17:09 +02:00
5e9625764a Dashboard: try/except autour KPIs DMZ/patch_history (resilient si table absente) 2026-04-14 21:47:41 +02:00
6ec1c4575d Dashboard: KPIs DMZ + patching 2026 depuis patch_history
- Stats DMZ (cliquable vers filtre zone)
- Patched 2026, never patched, last week (depuis patch_history Excel)
- Couverture patching = patched / patchable
- KPIs cards cliquables (lien vers /servers filtre pre-applique)
- Fix alias stats.eol -> stats.obsolete
2026-04-14 21:45:36 +02:00
3211b81e60 Servers: filtre zone (liste zones + DMZ + Sans zone) 2026-04-14 21:15:49 +02:00
753d4076c9 Migre etat vers labels iTop verbatim (Production, Nouveau, etc.)
Aligne la colonne servers.etat sur les valeurs iTop exactes au lieu
des codes lowercase internes.

Impact:
- servers.etat stocke: Production, Implémentation, Stock, Obsolète,
  EOL, prêt, tests, Nouveau, A récupérer, Cassé, Cédé, En panne,
  Perdu, Recyclé, Occasion, A détruire, Volé
- Remplace tous les 'production'/'obsolete'/'stock'/'eol'/'implementation'
  en WHERE/comparisons par les labels iTop verbatim (~10 fichiers)
- Templates badges/filtres: valeurs + labels iTop
- itop_service: maintient mapping iTop API internal code <-> DB label
- import_sanef_*: norm_etat retourne la valeur iTop verbatim ou None
  (plus de fallback silencieux sur 'production')

Ajoute:
- tools/import_etat_itop.py : migration lowercase -> iTop + re-import CSV
- tools/import_environnement.py : fix dry-run pour ADD COLUMN idempotent

Supprime:
- tools/fix_etat_extend.py (obsolete par import_etat_itop.py)
2026-04-14 18:40:56 +02:00
67287b8256 Qualys: cancel button for ongoing refresh 2026-04-14 16:12:44 +02:00