mirror of
https://github.com/owncast/owncast.git
synced 2024-11-27 09:45:36 +03:00
72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
|
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 {
|
||
|
MessageCount int `json:"messageCount"`
|
||
|
UserAgent string `json:"userAgent"`
|
||
|
ConnectedAt time.Time `json:"connectedAt"`
|
||
|
Geo string `json:"geo,omitempty"`
|
||
|
}
|
||
|
|
||
|
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{
|
||
|
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)
|
||
|
}
|
||
|
}
|