{% load i18n %} {% if attention.expired or attention.review_due or attention.stale or attention.no_conduit %}
{% trans "Needs attention" %}
{% endif %}

{% trans "Flows into zones at Purdue level" %} ≤ {{ max_level }} {{ flows|length }}

{% if flows %}
{% if show_site %}{% endif %} {% for f in flows %} {% if show_site %}{% endif %} {% endfor %}
#{% trans "Site" %}{% trans "From zone" %} {% trans "To zone" %} {% trans "Protocol / ports" %} {% trans "Access" %} {% trans "Through" %} {% trans "Remote access" %} {% trans "Allowed" %} {% trans "Last seen" %} {% trans "Evidence" %}
{{ forloop.counter }}{{ f.destination_zone.site|linkify|placeholder }}{{ f.source_zone|linkify }}{% if f.source_zone.purdue_level %} {% badge f.source_zone.purdue_level bg_color=f.source_zone.get_purdue_level_color %}{% endif %} {{ f.destination_zone|linkify }}{% if f.destination_zone.purdue_level %} {% badge f.destination_zone.purdue_level bg_color=f.destination_zone.get_purdue_level_color %}{% endif %} {{ f.get_protocol_display|placeholder }}{% if f.port_mappings %} {{ f.ports_display }}{% endif %} {% for value, label, color in f.get_access_display %}{% badge label bg_color=color %} {% empty %}{{ ''|placeholder }}{% endfor %} {% for hop in f.hops.all %}{{ hop.hop|linkify }}{% if not forloop.last %} → {% endif %}{% empty %}{{ ''|placeholder }}{% endfor %} {% checkmark f.remote_access %} {% badge f.get_allowed_display bg_color=f.get_allowed_color %} {% if f.is_expired %}{% trans "expired" %}{% endif %} {% if f.is_review_due %}{% trans "review due" %}{% endif %} {{ f.last_seen|date:"Y-m-d"|placeholder }} {% with lines=f.evidence_lines %} {% if lines.1 %}
{{ lines.0 }}{{ lines.1|linebreaksbr }}
{% else %} {{ lines.0|placeholder }} {% endif %} {% endwith %}
{% else %}
{% trans "No flows into these zones." %}
{% endif %}
{% if svg %}

{% trans "Diagram" %}

{{ svg }}
{% trans "One arrow per zone pair; the number is how many flows it carries. Red: not allowed or expired, amber: unknown, green: allowed. Dashed: remote access." %}
{% endif %}