handlers.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package authlogger
  2. import (
  3. "encoding/json"
  4. "log"
  5. "net/http"
  6. "regexp"
  7. "sort"
  8. "time"
  9. )
  10. type summaryDate []string
  11. func (s summaryDate) Len() int {
  12. return len(s)
  13. }
  14. func (s summaryDate) Swap(i, j int) {
  15. s[i], s[j] = s[j], s[i]
  16. }
  17. func (s summaryDate) Less(i, j int) bool {
  18. layout := "Jan-2006"
  19. timei, err := time.Parse(layout, s[i])
  20. if err != nil {
  21. log.Println(err)
  22. }
  23. timej, err := time.Parse(layout, s[j])
  24. if err != nil {
  25. log.Println(err)
  26. }
  27. return timei.Unix() < timej.Unix()
  28. }
  29. //Handle of listing of the logger index (months)
  30. func (l *Logger) HandleIndexListing(w http.ResponseWriter, r *http.Request) {
  31. indexes := l.ListSummary()
  32. sort.Sort(summaryDate(indexes))
  33. js, err := json.Marshal(indexes)
  34. if err != nil {
  35. sendErrorResponse(w, err.Error())
  36. return
  37. }
  38. sendJSONResponse(w, string(js))
  39. }
  40. //Handle of the listing of a given index (month)
  41. func (l *Logger) HandleTableListing(w http.ResponseWriter, r *http.Request) {
  42. //Get the record name request for listing
  43. month, err := mv(r, "record", true)
  44. if err != nil {
  45. sendErrorResponse(w, err.Error())
  46. return
  47. }
  48. records, err := l.ListRecords(month)
  49. if err != nil {
  50. sendErrorResponse(w, err.Error())
  51. return
  52. }
  53. //Filter the records before sending it to web UI
  54. results := []LoginRecord{}
  55. for _, record := range records {
  56. //Replace the username with a regex filtered one
  57. reg, _ := regexp.Compile("[^a-zA-Z0-9]+")
  58. filteredUsername := reg.ReplaceAllString(record.TargetUsername, "░")
  59. record.TargetUsername = filteredUsername
  60. results = append(results, record)
  61. }
  62. js, _ := json.Marshal(results)
  63. sendJSONResponse(w, string(js))
  64. }