home to your local SPACEGIRL 馃挮 arimelody.space
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 68 lines 2.1 kB view raw
1package admin 2 3import ( 4 "arimelody-web/admin/templates" 5 "arimelody-web/log" 6 "arimelody-web/model" 7 "fmt" 8 "net/http" 9 "os" 10 "strings" 11) 12 13func logsHandler(app *model.AppState) http.Handler { 14 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 15 if r.Method != http.MethodGet { 16 http.NotFound(w, r) 17 return 18 } 19 20 session := r.Context().Value("session").(*model.Session) 21 22 levelFilter := []log.LogLevel{} 23 typeFilter := []string{} 24 25 query := r.URL.Query().Get("q") 26 27 for key, value := range r.URL.Query() { 28 if strings.HasPrefix(key, "level-") && value[0] == "on" { 29 m := map[string]log.LogLevel{ 30 "info": log.LEVEL_INFO, 31 "warn": log.LEVEL_WARN, 32 } 33 level, ok := m[strings.TrimPrefix(key, "level-")] 34 if ok { 35 levelFilter = append(levelFilter, level) 36 } 37 continue 38 } 39 40 if strings.HasPrefix(key, "type-") && value[0] == "on" { 41 typeFilter = append(typeFilter, string(strings.TrimPrefix(key, "type-"))) 42 continue 43 } 44 } 45 46 logs, err := app.Log.Search(levelFilter, typeFilter, query, 100, 0) 47 if err != nil { 48 fmt.Fprintf(os.Stderr, "WARN: Failed to fetch audit logs: %v\n", err) 49 http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) 50 return 51 } 52 53 type LogsResponse struct { 54 adminPageData 55 Logs []*log.Log 56 } 57 58 err = templates.LogsTemplate.Execute(w, LogsResponse{ 59 adminPageData: adminPageData{ Path: r.URL.Path, Session: session }, 60 Logs: logs, 61 }) 62 if err != nil { 63 fmt.Fprintf(os.Stderr, "WARN: Failed to render audit logs page: %v\n", err) 64 http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) 65 return 66 } 67 }) 68}