+
FIRST SEEN:
{new Date(attacker.first_seen).toLocaleString()}
@@ -947,6 +959,21 @@ const AttackerDetail: React.FC = () => {
UPDATED:
{new Date(attacker.updated_at).toLocaleString()}
+
+ ORIGIN:
+ {attacker.country_code ? (
+
+ {attacker.country_code}
+ {attacker.country_source && (
+
+ ({attacker.country_source})
+
+ )}
+
+ ) : (
+ unknown
+ )}
+
diff --git a/decnet_web/src/components/Attackers.css b/decnet_web/src/components/Attackers.css
index dc8bbc1e..1de6638c 100644
--- a/decnet_web/src/components/Attackers.css
+++ b/decnet_web/src/components/Attackers.css
@@ -72,6 +72,18 @@
color: var(--matrix);
font-variant-numeric: tabular-nums;
letter-spacing: 1px;
+ display: inline-flex;
+ align-items: baseline;
+ gap: 8px;
+}
+.attackers-root .ak-card .ak-cc {
+ font-size: 0.62rem;
+ letter-spacing: 2px;
+ padding: 1px 6px;
+ border: 1px solid var(--border);
+ color: var(--matrix);
+ opacity: 0.75;
+ font-weight: 600;
}
.attackers-root .ak-meta {
diff --git a/decnet_web/src/components/Attackers.tsx b/decnet_web/src/components/Attackers.tsx
index 9e54eaed..3f9afc70 100644
--- a/decnet_web/src/components/Attackers.tsx
+++ b/decnet_web/src/components/Attackers.tsx
@@ -23,6 +23,8 @@ interface AttackerEntry {
credential_count: number;
fingerprints: any[];
commands: any[];
+ country_code: string | null;
+ country_source: string | null;
updated_at: string;
}
@@ -187,7 +189,17 @@ const Attackers: React.FC = () => {
onClick={() => navigate(`/attackers/${a.uuid}`)}
>
- {a.ip}
+
+ {a.ip}
+ {a.country_code && (
+
+ {a.country_code}
+
+ )}
+
{activity.toUpperCase()}