Self-contained HTTP/HTTPS/TCP/UDP reverse proxy manager written in Go, with SQLite storage, a Bootstrap 5 admin UI (Go templates, no JS framework), and a REST API under /api/v1. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QTXFrNP1imCW7jtfL5SZrw
35 lines
1.3 KiB
HTML
35 lines
1.3 KiB
HTML
{{define "logs_audit"}}{{template "header" .}}
|
|
{{$d := .Data}}
|
|
<ul class="nav nav-pills mb-3">
|
|
<li class="nav-item"><a class="nav-link" href="/logs">Requests</a></li>
|
|
<li class="nav-item"><a class="nav-link active" href="/logs/audit">Audit</a></li>
|
|
</ul>
|
|
<div class="card">
|
|
<div class="table-responsive">
|
|
<table class="table table-sm align-middle mb-0">
|
|
<thead class="table-light"><tr><th>Time</th><th>Actor</th><th>Action</th><th>Target</th><th>Details</th></tr></thead>
|
|
<tbody>
|
|
{{range $d.Logs}}
|
|
<tr>
|
|
<td>{{fmtTime .Timestamp}}</td>
|
|
<td>{{.Actor}}</td>
|
|
<td><span class="badge text-bg-light border">{{.Action}}</span></td>
|
|
<td>{{.Target}}</td>
|
|
<td class="text-secondary">{{.Details}}</td>
|
|
</tr>
|
|
{{else}}
|
|
<tr><td colspan="5" class="text-center text-secondary py-4">No audit events yet.</td></tr>
|
|
{{end}}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
{{if gt $d.TotalPages 1}}
|
|
<nav class="mt-3"><ul class="pagination pagination-sm">
|
|
{{range $i := iterate $d.TotalPages}}
|
|
<li class="page-item {{if eq (add $i 1) $d.Page}}active{{end}}"><a class="page-link" href="/logs/audit?page={{add $i 1}}">{{add $i 1}}</a></li>
|
|
{{end}}
|
|
</ul></nav>
|
|
{{end}}
|
|
{{template "footer" .}}{{end}}
|