go-wiki/handler/audit_page.go
2026-07-14 20:46:19 +02:00

49 lines
1.5 KiB
Go

// Dieses File implementiert die Admin-Ansicht des Audit-Logs unter /admin/audit.
package handler
import (
"html/template"
"io/fs"
"net/http"
)
// auditPageTemplateData bündelt die Daten für das audit.html-Template.
type auditPageTemplateData struct {
Events []AuditEvent
}
// AuditPageHandler zeigt die letzten Audit-Log-Einträge als Tabelle an.
type AuditPageHandler struct {
logger *AuditLogger
template *template.Template
}
// NewAuditPageHandler lädt das Template und erstellt einen neuen AuditPageHandler.
func NewAuditPageHandler(templatesFS fs.FS, logger *AuditLogger) (*AuditPageHandler, error) {
tmpl, err := template.ParseFS(templatesFS, "templates/audit.html")
if err != nil {
return nil, err
}
return &AuditPageHandler{logger: logger, template: tmpl}, nil
}
// maxAuditEventsShown begrenzt wie viele Einträge auf der Seite angezeigt werden.
const maxAuditEventsShown = 200
// HandleAuditPage verarbeitet GET /admin/audit. Nur mit dem globalen Admin-Zugang
// erreichbar — Teams sehen ihr eigenes Audit-Log (noch) nicht im Web.
func (h *AuditPageHandler) HandleAuditPage(w http.ResponseWriter, r *http.Request) {
if !IsAdminFromContext(r.Context()) {
http.Error(w, "Nur für den Admin-Zugang verfügbar", http.StatusForbidden)
return
}
events, err := h.logger.Tail(maxAuditEventsShown)
if err != nil {
http.Error(w, "Audit-Log konnte nicht gelesen werden", http.StatusInternalServerError)
return
}
h.template.Execute(w, auditPageTemplateData{Events: events})
}