c258d6091a
fix(qualys): resync_all_tags HTTP 400 - limitResults 10000 trop grand, capper a 1000
...
Qualys QPS API rejette limitResults au-dela de 1000 (HTTP 400 Bad Request).
Aligne sur les autres requetes du service (5, 20, 100, 200, 1000) et sur
qualys_tags_service.list_qualys_tags qui utilise deja 1000.
Reproductible via /qualys/tags > bouton Resync (msg=resync_ko_HTTP+400).
2026-04-23 12:19:31 +00:00
9a72fa7eb7
Optim: fix N+1 queries itop_service (pre-load batch) + macros Jinja2 badges
2026-04-17 23:23:32 +00:00
a0f90cd719
Optim: logging structure + query_helpers.py + fix exceptions silencieuses routers
2026-04-17 23:19:18 +00:00
MOUTAOUAKIL-ext Khalid
e2fb34f115
Sync SANEF : audit_service + schema.sql + data deploy + gitignore
2026-04-17 09:20:57 +02:00
1c661e2dc5
qualys_tags: respect qualys_bypass_proxy flag
...
_get_creds() ignorait le flag bypass_proxy et retournait toujours
qualys_proxy meme si l'utilisateur avait coche bypass en settings.
Comportement desormais aligne avec qualys_service._get_qualys_creds().
2026-04-17 00:28:57 +02:00
617bf94e31
Qualys agents sync: optims perf majeures (~3-5x plus rapide)
...
Refactor _refresh_all_agents_impl() avec 4 optimisations:
1. Pre-chargement des servers en dict Python au debut (hostname + IP)
-> elimine 2 queries SQL par asset (gain principal)
2. UPSERT 'INSERT ... ON CONFLICT DO UPDATE' + RETURNING (xmax=0)
-> une seule query au lieu de SELECT + INSERT/UPDATE
-> compte created/updated via xmax
3. HTTP Session reutilisee (requests.Session)
-> keep-alive, pas de handshake SSL a chaque page
4. ThreadPoolExecutor(5) pour executer les 5 filtres tagName en parallele
-> dedup par asset_id pour eviter traitement double
Bonus:
- max_pages 30 -> 500 par filtre (evite syncs incomplets silencieux)
- FQDN backfill cible via cache 'servers_need_fqdn' (pas d'UPDATE inutile)
- Commit unique en fin de traitement (suppression savepoint par asset)
- Retrait age-check redondant en mode diff (deja filtre cote API)
2026-04-16 23:34:51 +02:00
f1a1ca9c7b
Qualys Tags V3: unescape entites XML dans ruleText/name
...
Qualys renvoie les entites XML dans ruleText deja echappees (Bip&Go,
<?xml...). Jinja auto-escape les ressortait en double (&lt;...).
Unescape iteratif (jusqu'a 3 passes) pour couvrir le double-escape.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 15:40:04 +02:00
79a2cc896e
Qualys diff: format ISO sans microsec YYYY-MM-DDTHH:MM:SSZ (compat API QPS)
2026-04-15 14:28:57 +02:00
7924e64616
Qualys diff: filtre 'updated' (searchable) au lieu de 'lastCheckedIn' (non recunu API)
2026-04-15 14:06:27 +02:00
0ebf72d789
Qualys diff sync: sauve le timestamp DES LE DEBUT (resilient si annulation)
2026-04-15 13:29:36 +02:00
935c8003b4
Qualys sync: retry 3x avec backoff sur erreurs transitoires proxy/reseau
2026-04-15 12:44:49 +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
55f81de986
Qualys sync: fallback matching par IP integrer si hostname ne match pas
2026-04-15 12:25:27 +02:00
0dc9b07edd
audit _run: retry sans sudo accepte sortie vide (pas containers/failed = OK, pas erreur)
2026-04-15 12:18:35 +02:00
1a1af9e28a
Qualys sync multi-pass: filtres SRV/server/SED/SEI/EMV pour couvrir tags heterogenes
2026-04-15 12:17:02 +02:00
2746188f1c
audit _run: detection sudo refused plus robuste (accent-insensitive, sudo:, no tty)
2026-04-15 12:12: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
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
105a756008
Qualys hostname: retour a priorite name (sauf IP/localhost/vide), fqdn/netbios en fallback
2026-04-15 01:38:56 +02:00
c7291d3e6d
Qualys _parse_assets_full: hostname FQDN > NetBIOS > name (fix aussi cette fonction)
2026-04-15 01:20:28 +02:00
71260e20c3
Qualys sync: hostname depuis FQDN > NetBIOS > name (evite troncature display name)
2026-04-15 01:11:08 +02:00
7eb56bc9cd
Qualys sync: filtre SRV au lieu de server (matche OS-WIN-SRV/OS-LIN-SRV DYN SANEF v3)
2026-04-15 01:00:37 +02:00
7480bbf5ac
audit _run: fallback sans sudo si sudoers refuse bash -c (commandes read-only OK sans root)
2026-04-15 00:26:42 +02:00
3c4244597c
Audit: ThreadPoolExecutor avec parallel borne (evite saturation DB/PSMP)
2026-04-15 00:20:12 +02:00
596276441b
audit realtime: route via PSMP CyberArk si ssh_method=ssh_psmp
...
Nouvelle fonction _connect_via_psmp avec auth_interactive Vault Password,
lookup ssh_method par hostname avant _connect. Fallback SSH direct si
PSMP echoue.
2026-04-14 23:48:00 +02:00
9b3840bfa6
audit realtime: FQDN base = retour direct (plus de check port 22), boucle suffixes uniquement en fallback
2026-04-14 23:30:47 +02:00
e2b984c2c4
Servers: filtre licence (active/obsolete/els/sans licence)
2026-04-14 22:17:09 +02:00
4300eb1210
Fix zone filter: subquery sur zone_id (count query n'a pas le JOIN zones)
2026-04-14 21:17:56 +02:00
3211b81e60
Servers: filtre zone (liste zones + DMZ + Sans zone)
2026-04-14 21:15:49 +02:00
3c6e10944e
Servers list: SELECT s.environnement (colonne iTop) au lieu de e.name legacy
2026-04-14 18:58:24 +02:00
56fc1eaa7c
Servers filters: option (Sans etat)/(Sans env) pour NULL
2026-04-14 18:53:51 +02:00
1c2d0b958e
Etat/Environnement dropdowns alignes strict iTop SANEF
...
Etat: 6 valeurs lifecycle uniquement (Production, Implémentation,
Stock, Obsolète, prêt, tests). Suppression des valeurs condition
(Nouveau, Cassé, En panne, etc.) et de EOL qui n'existent pas
dans iTop SANEF.
Environnement: 7 valeurs iTop (Développement, Intégration, Pré-Prod,
Production, Recette, Test, Formation). Filtre env bascule de
e.code (legacy) vers s.environnement.
tools/import_etat_itop.py:
- CHECK 6 valeurs lifecycle + NULL
- Migration mappe les anciennes condition/EOL -> NULL
- Lit Status en priorite dans le CSV (lifecycle), fallback Etat
- Fix format print pour None
tools/import_sanef_*.py: ITOP_ETATS reduit a 6 valeurs
2026-04-14 18:48:30 +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
7b87074faa
Qualys page size 100
2026-04-14 16:58:03 +02:00
d15db654d4
Qualys: activation keys lazy (no API on page load if cache empty)
2026-04-14 16:24:45 +02:00
49b1865d13
Qualys page size 250 (lower timeout risk)
2026-04-14 16:19:29 +02:00
67287b8256
Qualys: cancel button for ongoing refresh
2026-04-14 16:12:44 +02:00
1bfdb16bfb
Qualys: actkeys cache 24h + refresh timeout 600s
2026-04-14 16:07:25 +02:00
07775a385f
Qualys activation keys: short timeout (5s)
2026-04-14 16:07:03 +02:00
347ea53c27
Qualys skip threshold: 5 min -> 40 min
2026-04-14 15:56:41 +02:00
ec90a4a9d1
Qualys: reduce refresh page size to 500
2026-04-14 15:55:35 +02:00
6db58952ec
Qualys refresh: early exit if no stale assets (< 5 min)
2026-04-14 15:48:41 +02:00
f66d728d2d
Qualys timeout 300s for bulk hostasset search
2026-04-14 15:37:50 +02:00
d24afa37b2
Qualys refresh: skip assets updated within last 5 minutes
2026-04-14 15:32:01 +02:00
d779426118
Bump Qualys page size back to 1000
2026-04-14 15:21:04 +02:00
71f83d5d4f
Qualys refresh: threading lock + 409 if already running
2026-04-14 15:20:17 +02:00
67f123e9f5
Qualys refresh: pagination + per-row savepoint to isolate errors
2026-04-14 15:13:48 +02:00
a422894f83
Sync Qualys FQDN to servers + use fqdn first for DNS resolution
2026-04-14 15:00:40 +02:00
92175992f8
Qualys: tagName + CONTAINS (API field, not UI syntax)
2026-04-14 14:53:54 +02:00
a19281a771
Qualys filter: CONTAINS instead of EQUALS for tag
2026-04-14 14:48:29 +02:00
a331d16a12
Qualys filter: tags.name instead of tagName
2026-04-14 14:47:48 +02:00
747e883d22
Smart DNS suffix order based on hostname convention (r=rec, p/i=prod)
2026-04-14 13:02:24 +02:00
53545585f0
Configurable DNS suffixes + 2s socket timeout for faster resolve
2026-04-14 12:58:54 +02:00
da1042fef4
Fix SSH key: read PEM content from settings + ssh_key_default_user
2026-04-14 12:56:09 +02:00
8dba0706b0
Filter Qualys agent refresh on tag name=server
2026-04-14 12:18:43 +02:00
677f621c81
Admin applications + correspondance cleanup + tools presentation DSI
...
- Admin applications: CRUD module (list/add/edit/delete/assign/multi-app)
avec push iTop bidirectionnel (applications.py + 3 templates)
- Correspondance prod<->hors-prod: migration vers server_correspondance
globale, suppression ancien code quickwin, ajout filtre environnement
et solution applicative, colonne environnement dans builder
- Servers page: colonne application_name + equivalent(s) via get_links_bulk,
filtre application_id, push iTop sur changement application
- Patching: bulk_update_application, bulk_update_excludes, validations
- Fix paramiko sftp.put (remote_path -> positional arg)
- Tools: wiki_to_pdf.py (DokuWiki -> PDF) + generate_ppt.py (PPTX 19 slides
DSI patching) + contenu source (processus_patching.txt, script_presentation.txt)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 21:11:58 +02:00
caa2be71a4
Misc: servers page (application + equivalent), campagne tweaks
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 18:51:36 +02:00
a706e240ca
Patching: exclusions + correspondance prod<->hors-prod + validations
...
- /patching/config-exclusions: exclusions iTop par serveur + bulk + push iTop
- /quickwin/config: liste globale reboot packages (au lieu de per-server)
- /patching/correspondance: builder mark PROD/NON-PROD + bulk change env/app
+ auto-detect par nomenclature + exclut stock/obsolete
- /patching/validations: workflow post-patching (en_attente/OK/KO/force)
validator obligatoire depuis contacts iTop
- /patching/validations/history/{id}: historique par serveur
- Auto creation patch_validation apres status='patched' dans QuickWin
- check_prod_validations: banniere rouge sur quickwin detail si non-prod non valides
- Menu: Correspondance sous Serveurs, Config exclusions+Validations sous Patching
- Colonne Equivalent(s) sur /servers + section Correspondance sur detail
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 18:51:30 +02:00
ba0bff0f6e
Remove: safe-patching (remplace par QuickWin) + audit-full
...
- Safe Patching v1 redondant avec QuickWin, supprime
- audit-full: page supprimee, tables DB preservees
- menu + main.py nettoyes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 18:51:17 +02:00
3f47fea8e6
Audit: jobs background paralleles + progression live
...
- Audit global/realtime: threads paralleles, job_id retourne immediat
- /audit/realtime/progress/{job_id}: KPIs + barre progression + tableau live
- Polling AJAX toutes les 2s, etapes animees (DNS/SSH/Audit/OK)
- PRETTY_NAME correction: extraction via grep -E 'PRETTY_NAME' + cut
- OS version: normalisation lors de save_audit_to_db (Debian GNU/Linux -> Debian X (Bookworm))
- Mise a jour base: itop sync bidirectionnel avec push OS version
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 18:51:05 +02:00
5ea4100f4c
Qualys: deploy agent background jobs + upgrade/downgrade + AJAX overlays
...
- Background job system pour deploiement (threads paralleles, progression live)
- Upgrade/downgrade: compare versions installee vs package, rpm -Uvh --oldpackage
- Checkbox "Forcer le downgrade" dans UI
- Choix auto DEB/RPM base sur os_version (centos/rhel/rocky/oracle -> RPM)
- Check agent: rpm -q / dpkg -s (evite faux positifs "agent installe mais inactif")
- Bouton "Rafraichir depuis Qualys" AJAX avec timer
- Agents page: colonne version installee + statut
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 18:50:56 +02:00
8479d7280e
Users/Contacts: workflow profils + LDAP + sync iTop + etat aligne
...
- Users: 4 profils (admin/coordinator/operator/viewer) remplacent la matrix
- /users/add: picker contacts iTop (plus de creation libre)
- /me/change-password: flow force_password_change
- LDAP: service + section settings + option login
- Sync iTop contacts: filtre par teams (SecOps/iPOP/Externe/DSI/Admin DSI)
- Auto-desactivation users si contact inactif
- etat: alignement sur enum iTop (production/implementation/stock/obsolete)
- Menu: Contacts dans Administration, Serveurs en groupe repliable
- Audit bases: demo/prod via JWT mode
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 18:50:43 +02:00
4fa5f67c32
Qualys agents: bouton Rafraichir + cron 6h
...
- refresh_all_agents(): bulk sync tous les assets depuis API Qualys QPS
- Bouton "Rafraîchir depuis Qualys" sur la page agents
- Cron toutes les 6h: refresh_agents.py (prod + demo)
- Message de confirmation après refresh
2026-04-11 21:56:59 +02:00
6411774004
Fix deploy page: NoneType sort + version extraite du nom fichier dans dropdown
2026-04-11 21:39:59 +02:00
3d053019e6
Deploiement Agent Qualys complet
...
- Page /qualys/deploy: selection serveurs, config agent, choix package
- Deploiement SSH: copie package, install rpm/dpkg, activation, verification
- Verification agent: check status/version sur serveurs selectionnes
- Auto-detect OS (deb vs rpm)
- Packages stockes dans /opt/patchcenter/agents/
- Filtres: hostname, domaine, environnement, OS
- Log detaille du deploiement
- Menu "Deployer Agent" dans la navigation Qualys
2026-04-11 21:26:45 +02:00
32d602975b
Sync contacts: role depuis Teams iTop (SecOps→referent_technique, iPOP→responsable_applicatif)
2026-04-11 14:33:12 +02:00
3707308063
Sync iTop: responsables domaine par fréquence + emails
...
- domain_environments.responsable_nom/email = responsable_domaine iTop le plus fréquent par couple domaine×env
- servers.responsable_nom/email = responsable_serveur iTop (par VM)
- servers.referent_nom/email = responsable_domaine iTop (par VM)
- Mapping Excel: Resp Domaine DTS → domain_environments.responsable, Valideur RA = par serveur
2026-04-11 14:22:29 +02:00
73cec814b6
Fix: typologies iTop sans org_id (DomaineApplicatif, Environnement, Zone, DomainLdap)
2026-04-11 14:01:20 +02:00
df4cd3be6f
Sync iTop: import emails responsable serveur/domaine dans servers + domain_environments
2026-04-11 13:55:25 +02:00
6683813743
Export iTop: sync responsable serveur et responsable domaine
2026-04-11 13:26:51 +02:00
d8a526368e
Refonte synchro iTop bidirectionnelle complète
...
- Import: typologies directement depuis iTop (Environnement, DomaineApplicatif, Zone, DomainLdap)
- Import: contacts, VMs avec tous champs custom, serveurs physiques, IPs
- Export: typologies + serveurs avec champs patching (tier, ssh, freq, window, excludes)
- Timestamp dernière synchro import/export
- Bandeau synchro visible sur TOUS les onglets du referentiel
2026-04-11 13:19:10 +02:00
1ff6b3fd4d
Sync to iTop: export referentiel (environnements, domaines, zones) + serveurs
2026-04-11 04:17:22 +02:00
66eeff99e8
Sync iTop: import IPs dans server_ips + traceback sur erreur sync
2026-04-11 03:54:45 +02:00
322fa71324
Fix sync iTop: champs corrects (patch_window, contacts.role, ssh_method constraint, rollback)
2026-04-11 03:20:04 +02:00
be6c5158b8
Sync iTop: tous les champs custom (tier, connexion, ssh_user, patch_freq, pref_jour/heure, domain_ldap, excludes)
...
Correspondance complete iTop <-> PatchCenter:
- tier_name -> tier (Tier 0 -> tier0)
- connexion_method_name -> ssh_method
- ssh_user_name -> ssh_user
- patch_frequency_name -> patch_frequency (Monthly -> monthly)
- pref_patch_jour_name -> pref_patch_jour
- pref_patch_heure_name -> pref_patch_heure
- patch_excludes -> patch_excludes
- domain_ldap_name -> domain_ltd
2026-04-11 02:28:39 +02:00
3b5f0992b3
Refonte sync iTop: import complet contacts/domaines/envs/zones/serveurs
...
- Tables referentielles videes (iTop = maitre)
- Import: Person -> contacts, domaine_applicatif -> domains, environnement -> environments, zone -> zones
- Import: domain_environments auto-crees depuis les combinaisons VM
- Import: VirtualMachine + Server avec responsable_serveur, responsable_domaine, IP, OS, description
- Export: status, description, creation VMs manquantes
- Matching par hostname court (sans FQDN)
2026-04-11 01:58:31 +02:00
ba48e75b68
Fix matching iTop: compare aussi par hostname court (sans .mpcz.fr)
2026-04-11 00:23:33 +02:00
db74111d58
Sync iTop enrichie: responsable_serveur + responsable_domaine + creation VMs
...
- Import: responsable_serveur_name → responsable_nom, responsable_domaine_name → referent_nom
- Import: environnement iTop synchronise
- Export: cree les VMs manquantes dans iTop (classe VirtualMachine, org MPCZ)
- Export: hostname comme nom (pas fqdn)
2026-04-11 00:14:09 +02:00
53e59e7305
Sync iTop: ajout responsable serveur (contacts_list) + commentaire/description
2026-04-10 23:23:48 +02:00
acf20c5890
Service iTop REST: synchro bidirectionnelle serveurs + contacts
...
- ITopClient: wrapper REST API v1.3 (get/create/update servers, contacts)
- sync_from_itop: import serveurs + contacts iTop vers PatchCenter
- sync_to_itop: export serveurs PatchCenter vers iTop
- Correspondance champs: hostname/name, os/osversion, etat/status, contacts
- Config iTop dans app_secrets (url, user, pass)
2026-04-10 23:11:32 +02:00
4801d805b1
Fix: ip_type='primary' au lieu de 'ipv4' dans server_ips
2026-04-10 20:57:14 +02:00
1be5e867dc
Fix: server_ips colonne ip_address au lieu de ip
2026-04-10 20:18:59 +02:00
369ca7e5a3
Audit: mise a jour table servers avec IP, OS, FQDN depuis resultats audit
...
- Apres un audit reussi, update servers.os_version et servers.fqdn
- Resout l'IP via DNS et l'insere dans server_ips
- Ne touche que les serveurs avec status OK
2026-04-10 20:10:27 +02:00
16315ab3b5
Fix SSH audit: lire settings DB au lieu de hardcoder user/key/suffixes
...
- SSH key et user lus depuis app_secrets (ssh_key_file, ssh_user)
- Ajout .mpcz.fr dans DNS_SUFFIXES
- Auto-detect Ed25519/RSA/ECDSA
- Fallback password depuis secrets
2026-04-10 20:01:15 +02:00
Khalid MOUTAOUAKIL
e96d79aae3
QuickWin: prereq/snapshot services, referentiel, logs, correspondance
...
- Split quickwin services: prereq, snapshot, log services
- Add referentiel router and template
- QuickWin detail: prereq/snapshot terminal divs for production
- Server edit partial updates
- QuickWin correspondance and logs templates
- Base template updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 18:13:00 +02:00
Khalid MOUTAOUAKIL
5cc10c5b6c
Module QuickWin complet + filtres serveurs OS/owner
...
- QuickWin: campagnes patching rapide avec exclusions générales (OS/reboot) et spécifiques (applicatifs)
- Config serveurs: pagination, filtres (search, env, domain, zone, per_page), dry run, bulk edit
- Détail campagne: pagination hprod/prod séparée, filtres (search, status, domain), section prod masquée si hprod non terminé
- Auth: redirection qw_only vers /quickwin, profil lecture seule quickwin
- Serveurs: filtres OS (Linux/Windows) et Owner (secops/ipop/na), exclusion EOL
- Sidebar: lien QuickWin conditionné sur permission campaigns ou quickwin
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 16:27:45 +02:00
Khalid MOUTAOUAKIL
29a377887f
KPI agents Qualys: actifs/inactifs/sans agent sur dashboard + page Agents avec liste détaillée
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 00:01:57 +02:00
Khalid MOUTAOUAKIL
c139dfbaa2
Cache mémoire 10min pour Qualys API, bouton Resync temps réel, page Agents (activation keys + versions)
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 23:04:48 +02:00
Khalid MOUTAOUAKIL
662b9c3535
Fix vulns: utiliser IPs au lieu de QPS asset IDs pour API VMDR
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 22:42:30 +02:00
Khalid MOUTAOUAKIL
f04d04224d
Qualys: vulnérabilités severity 3/4/5 dans résultats recherche (API VMDR)
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 22:38:56 +02:00
Khalid MOUTAOUAKIL
390a162cf4
Fix: inclure status partial (serveurs Ayoub) dans toutes les requetes audit/patching/dashboard
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 18:20:33 +02:00
Khalid MOUTAOUAKIL
2b2fac7c13
Dernier patch: date/semaine depuis Excel, colonne triable, couleur vert/jaune/rouge
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 17:48:11 +02:00
Khalid MOUTAOUAKIL
6834710af6
Fix CAST inet + IPv6 cleanup dans resolve_dest_server
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 16:23:32 +02:00
Khalid MOUTAOUAKIL
20cd9c7d80
Audit complet: import JSON, carte flux, carte applicative
...
- server_audit_full_service.py: SSH PSMP/cle, parsing, stockage JSONB, flow map
- server_audit.sh: script bash avec sudo (compatible PSMP cybsecope)
- audit_full router: import JSON, liste, detail, carte flux
- Templates: liste audits, detail 8 onglets, carte flux + carte applicative
- Jointures: server_id via servers, dest_server via server_ips
- Sous-menu Audit > Complet dans la sidebar
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 16:06:55 +02:00
Khalid MOUTAOUAKIL
49d5658475
Safe Patching wizard, SSE terminal, SSH password fallback, Qualys VMDR testé
...
Safe Patching Quick Win:
- Wizard 4 steps: Prérequis → Snapshot → Exécution → Post-patch
- Step 1: vérif SSH/disque/satellite par branche, exclure les KO
- Step 2: snapshot vSphere VMs
- Step 3: commande yum éditable, lancer hprod puis prod (100% requis)
- Step 4: vérification post-patch, export CSV
- Terminal SSE live (Server-Sent Events) avec couleurs
- Exclusion serveurs par checkbox dans chaque branche
- Label auto Quick Win SXX YYYY
SSH:
- Fallback password depuis settings si clé SSH absente
- Détection auto root (id -u) → pas de sudo si déjà root
- Testé sur VM doli CentOS 7 (10.0.2.4)
Qualys VMDR:
- API 2.0 testée et fonctionnelle avec compte sanef-ae
- Knowledge Base (CVE/QID/packages) accessible
- Host Detections (vulns par host) accessible
- Migration vers API 4.0 à prévoir (EOL dans 85 jours)
Qualys Agent installé sur doli (activation perso qg2)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 06:49:31 +02:00
Khalid MOUTAOUAKIL
032e91a90c
BOC SAP corrigé, stop/start order, patch waves, DMZ zone, préférences patching
...
- BOC SAP: stop_order ajouté (SolMan→CM→CC→AS→CI→HANA), conforme doc v3.1.4
- 3 serveurs BOC HO ajoutés (vpbocarep1, vpbocasec1, vpbocjump1)
- Patch waves: DNS (V1: 1+3, V2: 2+4), SMTP (V1: smtp2, V2: smtp1)
- Colonnes Stop order / Start order dans Spécifiques
- Campagne: colonne Zone (DMZ rouge, EMV jaune, LAN bleu) + KPI DMZ
- DMZ: filtre par zone au lieu de domaine (27 serveurs récupérés)
- Préférences patching: jour/heure éditables dans serveurs, hérités en campagne
- KPIs campagne en flex (une seule ligne)
- Limites intervenants: layout compact (max-width 400px)
- Tri campagne: domaine → hors-prod/prod → hostname
- Opérateur peut prendre en in_progress + planned
- Actions bulk campagne: prendre/assigner/exclure en masse
- Formulaires inline: fix Alpine.js → JS pur (display:none par défaut)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 03:52:46 +02:00
Khalid MOUTAOUAKIL
8e62b1fb11
Qualys complet, contacts, audit refactoré, bulk serveurs
...
Qualys:
- Recherche API temps réel + cache 24h base locale
- Tags: liste DYN/STAT, mapping V3 (DOM-*, TYP-*, APP-*), nb assets cliquable
- CRUD tags: créer STAT, supprimer, resync API
- Détail asset: infos + décodage nomenclature V3 + tags assignés
- Ajout/retrait tag unitaire avec autocomplete filtrable
- Bulk add/remove tag en masse avec dropdown filtrable
- Tags retirer: charge dynamiquement les STAT assignés aux assets sélectionnés
- Resync assets sélectionnés + retour même recherche
Contacts:
- 50 contacts importés avec 93 scopes (domaine/app/serveur/zone par env)
- 13 rôles (responsable_domaine, ra_prod, ra_recette, referent_technique...)
- Recherche par nom/email/serveur (affiche contacts liés)
- CRUD complet: éditer, scopes, activer/désactiver, supprimer
- Serveurs liés calculés dynamiquement depuis les scopes
Audit:
- Restructuré: Audit général + sous-menu Spécifique
- Dernier audit global affiché avec date
- Lancer audit général avec exclusions (domaines/zones) et parallélisme
- KPIs Qualys KO et S1 KO cliquables
- Export CSV
Serveurs:
- Actions groupées bulk (domaine, env, tier, état, owner, licence)
- Dashboard: KPI EOL ajouté
- Filtre état: EOL + en décommissionnement ajoutés
- 138 serveurs EOL importés depuis Qualys (owner=na, hors périmètre)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 00:47:26 +02:00
Khalid MOUTAOUAKIL
53c393b49b
Permissions DB, créneaux auto, assignations, audit Splunk, accents
...
- Permissions 100% depuis user_permissions (plus de hardcode)
- Middleware injecte perms dans chaque requête
- Créneaux auto: 09h-12h30 / 14h-16h45, pas 15min, hprod lun-mar, prod mer-jeu
- Assignations par défaut: par domaine, app_type, zone, serveur (table default_assignments)
- Auto-liaison app_group: même intervenant recette+prod
- Audit Splunk: /var/log/patchcenter_audit.json (JSON one-line par event)
- Login/logout/campagnes/prereqs loggés en base + fichier
- Page erreur maintenance (500/404) avec contact SecOps
- Accents français dans toute lUI
- Operator affiché comme Intervenant
- Session 1h, redirect / vers dashboard si connecté
- Demo mode prereqs (DEMO_MODE=True)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 15:25:43 +02:00
Khalid MOUTAOUAKIL
ba8a969366
Campagnes: workflow complet, audit serveurs, assignation operateurs
...
- Workflow: draft → pending_validation (COMEP) → planned → in_progress → completed
- Prereqs auto: SSH, disque (1.2Go /, 800Mo /var), satellite
- Assignation: operateurs prennent/liberent, coordinateur assigne/force
- Limites par operateur par campagne (max_servers + raison)
- Default intervenant permanent par serveur (auto-assigne)
- Planning jours: lun+mar hors-prod, mer+jeu prod, jamais vendredi
- Preferences serveur: pref_patch_jour, pref_patch_heure (permanents)
- Audit serveurs: import Excel, 29 colonnes, KPIs, detail HTMX
- Jours en francais (Lun, Mar, Mer, Jeu)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 13:06:08 +02:00
Khalid MOUTAOUAKIL
8277653c43
PatchCenter v2.0 — Initial commit
...
Modules: Dashboard, Serveurs, Campagnes, Planning, Specifiques, Settings, Users
Stack: FastAPI + Jinja2 + HTMX + Alpine.js + TailwindCSS + PostgreSQL
Features: Qualys sync, prereqs auto, planning annuel, server specifics, role-based access
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 03:00:12 +02:00