moderation.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package moderation
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strings"
  6. "time"
  7. "github.com/owncast/owncast/controllers"
  8. "github.com/owncast/owncast/core/chat"
  9. "github.com/owncast/owncast/core/chat/events"
  10. "github.com/owncast/owncast/core/user"
  11. log "github.com/sirupsen/logrus"
  12. )
  13. // GetUserDetails returns the details of a chat user for moderators.
  14. func GetUserDetails(w http.ResponseWriter, r *http.Request) {
  15. type connectedClient struct {
  16. ConnectedAt time.Time `json:"connectedAt"`
  17. UserAgent string `json:"userAgent"`
  18. Geo string `json:"geo,omitempty"`
  19. Id uint `json:"id"`
  20. MessageCount int `json:"messageCount"`
  21. }
  22. type response struct {
  23. User *user.User `json:"user"`
  24. ConnectedClients []connectedClient `json:"connectedClients"`
  25. Messages []events.UserMessageEvent `json:"messages"`
  26. }
  27. pathComponents := strings.Split(r.URL.Path, "/")
  28. uid := pathComponents[len(pathComponents)-1]
  29. u := user.GetUserByID(uid)
  30. if u == nil {
  31. w.WriteHeader(http.StatusNotFound)
  32. return
  33. }
  34. c, _ := chat.GetClientsForUser(uid)
  35. clients := make([]connectedClient, len(c))
  36. for i, c := range c {
  37. client := connectedClient{
  38. Id: c.Id,
  39. MessageCount: c.MessageCount,
  40. UserAgent: c.UserAgent,
  41. ConnectedAt: c.ConnectedAt,
  42. }
  43. if c.Geo != nil {
  44. client.Geo = c.Geo.CountryCode
  45. }
  46. clients[i] = client
  47. }
  48. messages, err := chat.GetMessagesFromUser(uid)
  49. if err != nil {
  50. log.Errorln(err)
  51. }
  52. res := response{
  53. User: u,
  54. ConnectedClients: clients,
  55. Messages: messages,
  56. }
  57. w.Header().Set("Content-Type", "application/json")
  58. if err := json.NewEncoder(w).Encode(res); err != nil {
  59. controllers.InternalErrorHandler(w, err)
  60. }
  61. }