{% extends 'layout.twig' %} {% block title %}{{ detail.ip }} — IRDB{% endblock %} {% macro flag(country) %} {%- set emoji = flag_emoji(country) -%} {%- if emoji -%} {{- emoji -}} {%- else -%} ?? {%- endif -%} {% endmacro %} {% macro status_pill(status) %} {%- set classes = { 'allowlisted': 'bg-emerald-100 text-emerald-900 dark:bg-emerald-900 dark:text-emerald-100', 'manually_blocked': 'bg-amber-100 text-amber-900 dark:bg-amber-900 dark:text-amber-100', 'scored': 'bg-red-100 text-red-900 dark:bg-red-900 dark:text-red-100', 'clean': 'bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300', } -%} {{ status }} {% endmacro %} {% block content %} {% import _self as h %}
{{ detail.isIpv4 ? 'IPv4' : 'IPv6' }}
{% if can_write|default(false) %}Enriched
{% endif %} {% else %}Unknown not yet enriched.
{% endif %} {% if geoip_provider == 'dbip' %}IP Geolocation by DB-IP (CC BY 4.0)
{% elseif geoip_provider == 'ipinfo' %}IP data powered by IPinfo
{% endif %}Allowlisted since
.
{% if detail.allowlist.reason %}
Reason: {{ detail.allowlist.reason }}{% endif %}
Manually blocked since
.
{% if detail.manualBlock.reason %}
Reason: {{ detail.manualBlock.reason }}{% endif %}
No manual override on this IP.
{% endif %}No scored categories.
{% endif %}No reports yet — nothing to plot.
· max: forecast assumes no new reports
{% if ev.category %}{{ ev.category }}{% endif %} {% if ev.reporter %} via {{ ev.reporter }}{% endif %} {% if ev.weight %} · w={{ ev.weight }}{% endif %}
{% if ev.metadata %}{{ ev.metadata|json_encode(constant('JSON_PRETTY_PRINT')) }}
{% endif %}
{% elseif ev.type == 'manual_block_added' %}
Manual block added{% if ev.reason %}: {{ ev.reason }}{% endif %}
{% elseif ev.type == 'allowlist_added' %}Allowlist entry added{% if ev.reason %}: {{ ev.reason }}{% endif %}
{% endif %}Showing the most recent 200 events. Older events are available via the API directly until the in-app pagination lands in a future milestone.
{% endif %} {% else %}No history yet.
{% endif %}