Accents dans tous les templates: audité, réseau, corrélation, patché, données, décommissionnés

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Khalid MOUTAOUAKIL 2026-04-06 22:28:33 +02:00
parent cb8ade24e4
commit 40b0307f62
5 changed files with 19 additions and 19 deletions

View File

@ -16,8 +16,8 @@
{% if is_partial %}
<div class="card p-8 text-center mb-4" style="background:#111827;">
<div class="text-3xl font-bold text-gray-500 mb-2">Pas encore audite</div>
<p class="text-sm text-gray-600">Ce serveur n'a pas encore ete audite via SSH (Windows, EMV...)</p>
<div class="text-3xl font-bold text-gray-500 mb-2">Pas encore audité</div>
<p class="text-sm text-gray-600">Ce serveur n'a pas encore été audité via SSH (Windows, EMV...)</p>
<p class="text-xs text-gray-600 mt-2">{{ a.hostname }} — {{ a.os_release or 'OS inconnu' }}</p>
{% if a.last_patch_week %}<p class="text-xs text-cyber-green mt-2">Dernier patch : {{ a.last_patch_week }} {{ a.last_patch_year }}</p>{% endif %}
</div>
@ -35,7 +35,7 @@
<!-- Onglets -->
<div x-data="{ tab: 'services' }">
<div class="flex gap-1 mb-3 flex-wrap">
{% for t, label in [('services','Services'),('processes','Processus'),('ports','Ports'),('connections','Connexions'),('flux','Flux'),('disk','Disque'),('firewall','Firewall'),('correlation','Correlation')] %}
{% for t, label in [('services','Services'),('processes','Processus'),('ports','Ports'),('connections','Connexions'),('flux','Flux'),('disk','Disque'),('firewall','Firewall'),('correlation','Corrélation')] %}
<button @click="tab='{{ t }}'" class="px-3 py-1 text-xs rounded" :class="tab==='{{ t }}' ? 'bg-cyber-accent text-black font-bold' : 'bg-cyber-border text-gray-400'">{{ label }}</button>
{% endfor %}
</div>
@ -200,7 +200,7 @@
{% endif %}
</div>
<!-- Correlation -->
<!-- Corrélation -->
<div x-show="tab==='correlation'" class="space-y-3">
{% if correlation %}
<div class="card overflow-x-auto">

View File

@ -3,7 +3,7 @@
{% block content %}
<a href="/audit-full" class="text-xs text-gray-500 hover:text-gray-300">< Retour</a>
<div class="flex justify-between items-center mb-4">
<h2 class="text-xl font-bold text-cyber-accent">Carte des flux reseau</h2>
<h2 class="text-xl font-bold text-cyber-accent">Carte des flux réseau</h2>
<button onclick="resetZoom()" class="btn-sm bg-cyber-border text-gray-400 px-2 py-1 text-xs">Reset vue</button>
</div>
@ -53,7 +53,7 @@
<!-- Legende -->
<div class="flex gap-4 mt-2 text-xs text-gray-500">
<span><span style="color:#22c55e;">---></span> Flux reseau</span>
<span><span style="color:#22c55e;">---></span> Flux réseau</span>
<span id="stats-nodes">0 serveurs</span>
<span id="stats-links">0 flux</span>
</div>

View File

@ -4,12 +4,12 @@
<div class="flex justify-between items-center mb-4">
<div>
<h2 class="text-xl font-bold text-cyber-accent">Audit complet serveurs</h2>
<p class="text-xs text-gray-500 mt-1">Applicatif + reseau + correlation — import JSON depuis le standalone</p>
<p class="text-xs text-gray-500 mt-1">Applicatif + réseau + corrélation — import JSON depuis le standalone</p>
</div>
<div class="flex gap-2 items-center">
<form method="POST" action="/audit-full/import" enctype="multipart/form-data" class="flex gap-2 items-center">
<input type="file" name="file" accept=".json" class="text-xs" required>
<button type="submit" class="btn-primary px-4 py-2 text-sm" data-loading="Import en cours...|Insertion des donnees">Importer JSON</button>
<button type="submit" class="btn-primary px-4 py-2 text-sm" data-loading="Import en cours...|Insertion des données">Importer JSON</button>
</form>
<a href="/audit-full/export-csv{% if filter %}?filter={{ filter }}{% endif %}{% if search %}&q={{ search }}{% endif %}{% if domain %}&domain={{ domain }}{% endif %}" class="btn-sm bg-cyber-green text-black px-4 py-2">Exporter CSV</a>
<a href="/audit-full/flow-map" class="btn-sm bg-cyber-border text-cyber-accent px-4 py-2">Carte flux</a>
@ -20,7 +20,7 @@
<div class="mb-3 p-2 rounded text-sm {% if 'error' in msg %}bg-red-900/30 text-cyber-red{% else %}bg-green-900/30 text-cyber-green{% endif %}">
{% if msg.startswith('imported_') %}
{% set parts = msg.split('_') %}
{{ parts[1] }} serveur(s) importe(s){% if parts[2]|int > 0 %}, {{ parts[2] }} erreur(s){% endif %}.
{{ parts[1] }} serveur(s) importé(s){% if parts[2]|int > 0 %}, {{ parts[2] }} erreur(s){% endif %}.
{% elif msg.startswith('error_') %}Erreur: {{ msg[6:] }}{% endif %}
</div>
{% endif %}

View File

@ -41,7 +41,7 @@
{% set pct = (kpis.patched / kpis.total * 100)|int if kpis.total > 0 else 0 %}
<div style="display:flex;flex-wrap:nowrap;gap:6px;margin-bottom:12px;">
<div class="card p-2 text-center" style="flex:1;min-width:0"><div class="text-xl font-bold text-cyber-accent">{{ kpis.total }}</div><div style="font-size:10px;" class="text-gray-500">Total</div></div>
<div class="card p-2 text-center" style="flex:1;min-width:0"><div class="text-xl font-bold text-cyber-green">{{ kpis.patched }}</div><div style="font-size:10px;" class="text-gray-500">Patches</div></div>
<div class="card p-2 text-center" style="flex:1;min-width:0"><div class="text-xl font-bold text-cyber-green">{{ kpis.patched }}</div><div style="font-size:10px;" class="text-gray-500">Patchés</div></div>
<div class="card p-2 text-center" style="flex:1;min-width:0"><div class="text-xl font-bold text-green-300">{{ kpis.once }}</div><div style="font-size:10px;" class="text-gray-500">1 fois</div></div>
<div class="card p-2 text-center" style="flex:1;min-width:0"><div class="text-xl font-bold text-blue-400">{{ kpis.twice }}</div><div style="font-size:10px;" class="text-gray-500">2+ fois</div></div>
<div class="card p-2 text-center" style="flex:1;min-width:0"><div class="text-xl font-bold text-purple-400">{{ kpis.thrice }}</div><div style="font-size:10px;" class="text-gray-500">3+ fois</div></div>
@ -59,7 +59,7 @@
<div class="grid grid-cols-2 gap-4 mb-4">
{% if patch_weekly %}
<div class="card p-3">
<div class="text-xs text-gray-500 mb-2">Derniere semaine de patch par serveur</div>
<div class="text-xs text-gray-500 mb-2">Dernière semaine de patch par serveur</div>
<div style="display:flex;align-items:flex-end;gap:2px;height:100px;">
{% set max_cnt = patch_weekly|map(attribute='cnt')|max %}
{% for w in patch_weekly %}
@ -125,7 +125,7 @@
<th class="p-2">Domaine</th>
<th class="p-2">Env</th>
<th class="p-2">Zone</th>
<th class="p-2"><a href="/audit-full/patching?year={{ year }}&sort=count&dir={% if sort == 'count' and sort_dir == 'desc' %}asc{% else %}desc{% endif %}{{ qs }}" class="hover:text-cyber-accent">Nb patches {% if sort == 'count' %}{{ '▲' if sort_dir == 'asc' else '▼' }}{% endif %}</a></th>
<th class="p-2"><a href="/audit-full/patching?year={{ year }}&sort=count&dir={% if sort == 'count' and sort_dir == 'desc' %}asc{% else %}desc{% endif %}{{ qs }}" class="hover:text-cyber-accent">Nb patchs {% if sort == 'count' %}{{ '▲' if sort_dir == 'asc' else '▼' }}{% endif %}</a></th>
<th class="text-left p-2">Semaines</th>
<th class="p-2"><a href="/audit-full/patching?year={{ year }}&sort=last&dir={% if sort == 'last' and sort_dir == 'desc' %}asc{% else %}desc{% endif %}{{ qs }}" class="hover:text-cyber-accent">Dernier {% if sort == 'last' %}{{ '▲' if sort_dir == 'asc' else '▼' }}{% endif %}</a></th>
</tr></thead>

View File

@ -21,11 +21,11 @@
<div style="display:flex;flex-wrap:nowrap;gap:6px;margin-bottom:12px;">
<a href="/audit-full" class="card p-2 text-center hover:bg-cyber-hover" style="flex:1;min-width:0;background:#111827;">
<div class="text-xl font-bold text-cyber-accent">{{ patch_stats.audited }}</div>
<div style="font-size:10px;" class="text-gray-500">Audites</div>
<div style="font-size:10px;" class="text-gray-500">Audités</div>
</a>
<a href="/audit-full?filter=app_patch2026" class="card p-2 text-center hover:bg-cyber-hover" style="flex:1;min-width:0;background:#111827;">
<div class="text-xl font-bold text-cyber-green">{{ patch_stats.patched_2026 }}</div>
<div style="font-size:10px;" class="text-gray-500">Patches 2026</div>
<div style="font-size:10px;" class="text-gray-500">Patchés 2026</div>
</a>
<div class="card p-2 text-center" style="flex:1;min-width:0;background:#111827;">
<div class="text-xl font-bold text-cyber-green">{{ patch_stats.patched_once }}</div>
@ -87,7 +87,7 @@
<div>
<div class="text-xs text-gray-500 mb-2">Par domaine</div>
<table class="w-full table-cyber text-xs">
<thead><tr><th class="text-left p-1">Domaine</th><th class="p-1">Total</th><th class="p-1">Patche</th><th class="p-1">2x</th><th class="p-1">%</th></tr></thead>
<thead><tr><th class="text-left p-1">Domaine</th><th class="p-1">Total</th><th class="p-1">Patché</th><th class="p-1">2x</th><th class="p-1">%</th></tr></thead>
<tbody>
{% for d in patch_by_domain %}
{% set pct_d = (d.patched / d.total * 100)|int if d.total > 0 else 0 %}
@ -109,7 +109,7 @@
<!-- Par environnement -->
<div class="text-xs text-gray-500 mb-2">Par environnement</div>
<table class="w-full table-cyber text-xs mb-4">
<thead><tr><th class="text-left p-1">Env</th><th class="p-1">Total</th><th class="p-1">Patche</th><th class="p-1">%</th></tr></thead>
<thead><tr><th class="text-left p-1">Env</th><th class="p-1">Total</th><th class="p-1">Patché</th><th class="p-1">%</th></tr></thead>
<tbody>
{% for e in patch_by_env %}
{% set pct_e = (e.patched / e.total * 100)|int if e.total > 0 else 0 %}
@ -124,9 +124,9 @@
</table>
<!-- Par zone -->
<div class="text-xs text-gray-500 mb-2">Par zone reseau</div>
<div class="text-xs text-gray-500 mb-2">Par zone réseau</div>
<table class="w-full table-cyber text-xs">
<thead><tr><th class="text-left p-1">Zone</th><th class="p-1">Total</th><th class="p-1">Patche</th><th class="p-1">Jamais</th><th class="p-1">%</th></tr></thead>
<thead><tr><th class="text-left p-1">Zone</th><th class="p-1">Total</th><th class="p-1">Patché</th><th class="p-1">Jamais</th><th class="p-1">%</th></tr></thead>
<tbody>
{% for z in patch_by_zone %}
{% set pct_z = (z.patched / z.total * 100)|int if z.total > 0 else 0 %}
@ -180,7 +180,7 @@
<div class="card p-4">
<h3 class="text-sm font-bold text-cyber-accent mb-3">Quick stats</h3>
<div class="space-y-2 text-xs">
<div class="flex justify-between"><span class="text-gray-500">Decommissionnes</span><span class="text-cyber-red font-bold">{{ stats.decom }}</span></div>
<div class="flex justify-between"><span class="text-gray-500">Décommissionnés</span><span class="text-cyber-red font-bold">{{ stats.decom }}</span></div>
<div class="flex justify-between"><span class="text-gray-500">EOL</span><span class="text-cyber-red font-bold">{{ stats.eol }}</span></div>
<div class="flex justify-between"><span class="text-gray-500">Assets Qualys</span><span class="text-cyber-accent font-bold">{{ stats.qualys_assets }}</span></div>
<div class="flex justify-between"><span class="text-gray-500">Tags Qualys</span><span class="text-cyber-yellow font-bold">{{ stats.qualys_tags }}</span></div>