12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package moderation
- import (
- "encoding/json"
- "net/http"
- "strings"
- "time"
- "github.com/owncast/owncast/controllers"
- "github.com/owncast/owncast/core/chat"
- "github.com/owncast/owncast/core/chat/events"
- "github.com/owncast/owncast/core/user"
- log "github.com/sirupsen/logrus"
- )
- // GetUserDetails returns the details of a chat user for moderators.
- func GetUserDetails(w http.ResponseWriter, r *http.Request) {
- type connectedClient struct {
- ConnectedAt time.Time `json:"connectedAt"`
- UserAgent string `json:"userAgent"`
- Geo string `json:"geo,omitempty"`
- Id uint `json:"id"`
- MessageCount int `json:"messageCount"`
- }
- type response struct {
- User *user.User `json:"user"`
- ConnectedClients []connectedClient `json:"connectedClients"`
- Messages []events.UserMessageEvent `json:"messages"`
- }
- pathComponents := strings.Split(r.URL.Path, "/")
- uid := pathComponents[len(pathComponents)-1]
- u := user.GetUserByID(uid)
- if u == nil {
- w.WriteHeader(http.StatusNotFound)
- return
- }
- c, _ := chat.GetClientsForUser(uid)
- clients := make([]connectedClient, len(c))
- for i, c := range c {
- client := connectedClient{
- Id: c.Id,
- MessageCount: c.MessageCount,
- UserAgent: c.UserAgent,
- ConnectedAt: c.ConnectedAt,
- }
- if c.Geo != nil {
- client.Geo = c.Geo.CountryCode
- }
- clients[i] = client
- }
- messages, err := chat.GetMessagesFromUser(uid)
- if err != nil {
- log.Errorln(err)
- }
- res := response{
- User: u,
- ConnectedClients: clients,
- Messages: messages,
- }
- w.Header().Set("Content-Type", "application/json")
- if err := json.NewEncoder(w).Encode(res); err != nil {
- controllers.InternalErrorHandler(w, err)
- }
- }
|