Initial vibeproxy implementation
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
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
{{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}}
|
||||
Reference in New Issue
Block a user