Gitfed
bastien-mrq/gitfed / cmd / gitfed-web / handlers_admin_audit.go
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">&larr; {{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()))
}