First commit

This commit is contained in:
2026-07-20 11:05:07 +02:00
commit b592ab669f
159 changed files with 10294 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
from typing import Any
from .models import BanEvent
def event_payload(instance: BanEvent, node_alias: str | None = None) -> dict[str, Any]:
"""Représentation JSON-sérialisable d'un BanEvent, partagée par le
WebSocket temps réel et le bootstrap initial du tableau de bord.
node_alias : alias lisible du noeud (NodeRegistry.display_name),
résolu par l'appelant plutôt qu'ici pour ne pas cacher une requête DB
par événement (voir views.py, qui résout tous les alias en une seule
requête avant d'appeler cette fonction en boucle)."""
return {
'id': instance.pk,
'received_at': instance.received_at.isoformat(),
'node': instance.node,
'node_alias': node_alias or instance.node,
'jail_name': instance.jail_name,
'action': instance.action,
'ip_address': instance.ip_address,
'port': instance.port,
'protocol': instance.protocol,
'bantime': instance.bantime,
'latitude': instance.latitude,
'longitude': instance.longitude,
'country': instance.country,
'country_code': instance.country_code,
'city': instance.city,
}