package main
import (
"bytes"
"html/template"
"net/http"
"git.neuromancer.ovh/bastien-mrq/gitfed/internal/i18n"
"git.neuromancer.ovh/bastien-mrq/gitfed/internal/store"
)
var adminAuditTpl = newTpl("admin-audit", `
<p><a href="/admin">← {{t .Lang "nav.admin"}}</a></p>
<h1>{{t .Lang "admin.audit_title"}}</h1>
<table>
<tr><th>{{t .Lang "admin.audit_col_time"}}</th><th>{{t .Lang "admin.audit_col_action"}}</th><th>{{t .Lang "admin.audit_col_principal"}}</th><th>{{t .Lang "admin.audit_col_repo_domain"}}</th><th>{{t .Lang "admin.audit_col_result"}}</th><th>{{t .Lang "admin.audit_col_detail"}}</th></tr>
{{range .Events}}
<tr>
<td class="muted">{{.Time.Local.Format "2006-01-02 15:04:05"}}</td>
<td>{{.Action}}</td>
<td>{{.Principal}}</td>
<td>{{if .Repo}}{{.Repo}}{{else}}{{.Domain}}{{end}}</td>
<td>{{if .Allowed}}<span class="badge trusted">{{t $.Lang "admin.audit_allow"}}</span>{{else}}<span class="badge pending">{{t $.Lang "admin.audit_deny"}}</span>{{end}}</td>
<td class="muted">{{.Detail}}</td>
</tr>
{{else}}
<tr><td colspan="6" class="muted">{{t .Lang "admin.audit_empty"}}</td></tr>
{{end}}
</table>
<p class="muted">{{t .Lang "admin.audit_note"}}</p>
`)
func (s *server) handleAdminAudit(w http.ResponseWriter, r *http.Request) {
lang := s.lang(r)
events, err := s.ops.ListAudit(200)
if err != nil {
s.serverError(w, r, err)
return
}
var buf bytes.Buffer
_ = adminAuditTpl.Execute(&buf, struct {
Events []store.AuditEvent
Lang string
}{events, string(lang)})
s.render(w, r, i18n.T(lang, "admin.audit_title"), "admin", template.HTML(buf.String()))
}