{% extends "base.html" %} {% block title %}Audit Log{% endblock %} {% block page_title %}Audit Log{% endblock %} {% block content %}
{% if action %}{% endif %}
{% if logs %} {% for entry in logs %} {% endfor %}
Time Event Details IP
{{ entry.timestamp.strftime('%b %d, %H:%M:%S') }} {% set colors = { 'login_success':'#d1fae5|#065f46', 'login_success_2fa':'#d1fae5|#065f46', 'login_failed':'#fee2e2|#991b1b', 'totp_enabled':'#dbeafe|#1e40af', 'totp_disabled':'#fef3c7|#92400e', 'schwab_connected':'#d1fae5|#065f46', 'schwab_disconnected':'#fee2e2|#991b1b', 'teller_connected':'#d1fae5|#065f46', 'teller_disconnected':'#fee2e2|#991b1b', 'password_changed':'#ede9fe|#5b21b6', }.get(entry.action, '#f1f5f9|#475569').split('|') %} {{ entry.action | replace('_',' ') | title }} {{ entry.description or '—' }} {{ entry.ip_address or '—' }}
{% if pagination.pages > 1 %}
Page {{ pagination.page }} of {{ pagination.pages }} · {{ pagination.total }} events
{% if pagination.has_prev %} ← Prev {% endif %} {% if pagination.has_next %} Next → {% endif %}
{% endif %} {% else %}

No audit events recorded yet.

{% endif %}
{% endblock %}