Something went wrong. Try again.
home to your local SPACEGIRL 💫 arimelody.space
Something went wrong. Try again.
2.1 kB · 68 lines
Go
at dev
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869package admin
import ( "arimelody-web/admin/templates" "arimelody-web/log" "arimelody-web/model" "fmt" "net/http" "os" "strings")
func logsHandler(app *model.AppState) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.NotFound(w, r) return }
session := r.Context().Value("session").(*model.Session)
levelFilter := []log.LogLevel{} typeFilter := []string{}
query := r.URL.Query().Get("q")
for key, value := range r.URL.Query() { if strings.HasPrefix(key, "level-") && value[0] == "on" { m := map[string]log.LogLevel{ "info": log.LEVEL_INFO, "warn": log.LEVEL_WARN, } level, ok := m[strings.TrimPrefix(key, "level-")] if ok { levelFilter = append(levelFilter, level) } continue }
if strings.HasPrefix(key, "type-") && value[0] == "on" { typeFilter = append(typeFilter, string(strings.TrimPrefix(key, "type-"))) continue } }
logs, err := app.Log.Search(levelFilter, typeFilter, query, 100, 0) if err != nil { fmt.Fprintf(os.Stderr, "WARN: Failed to fetch audit logs: %v\n", err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return }
type LogsResponse struct { adminPageData Logs []*log.Log }
err = templates.LogsTemplate.Execute(w, LogsResponse{ adminPageData: adminPageData{ Path: r.URL.Path, Session: session }, Logs: logs, }) if err != nil { fmt.Fprintf(os.Stderr, "WARN: Failed to render audit logs page: %v\n", err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } })}