chore(go): move a couple more handlers to use generated types. For #3778
This commit is contained in:
@@ -110,18 +110,13 @@ func GetIPAddressBans(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
// UpdateUserEnabled enable or disable a single user by ID.
|
// UpdateUserEnabled enable or disable a single user by ID.
|
||||||
func UpdateUserEnabled(w http.ResponseWriter, r *http.Request) {
|
func UpdateUserEnabled(w http.ResponseWriter, r *http.Request) {
|
||||||
type blockUserRequest struct {
|
|
||||||
UserID string `json:"userId"`
|
|
||||||
Enabled bool `json:"enabled"`
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.Method != http.MethodPost {
|
if r.Method != http.MethodPost {
|
||||||
webutils.WriteSimpleResponse(w, false, r.Method+" not supported")
|
webutils.WriteSimpleResponse(w, false, r.Method+" not supported")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
decoder := json.NewDecoder(r.Body)
|
decoder := json.NewDecoder(r.Body)
|
||||||
var request blockUserRequest
|
var request generated.UpdateUserEnabledJSONBody
|
||||||
|
|
||||||
if err := decoder.Decode(&request); err != nil {
|
if err := decoder.Decode(&request); err != nil {
|
||||||
log.Errorln(err)
|
log.Errorln(err)
|
||||||
@@ -129,66 +124,72 @@ func UpdateUserEnabled(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if request.UserID == "" {
|
if request.UserId == nil || *request.UserId == "" || request.Enabled == nil {
|
||||||
webutils.WriteSimpleResponse(w, false, "must provide userId")
|
webutils.WriteSimpleResponse(w, false, "must provide userId and enabled state")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
userRepository := userrepository.Get()
|
if err := updateUserStatus(request); err != nil {
|
||||||
|
|
||||||
// Disable/enable the user
|
|
||||||
if err := userRepository.SetEnabled(request.UserID, request.Enabled); err != nil {
|
|
||||||
log.Errorln("error changing user enabled status", err)
|
|
||||||
webutils.WriteSimpleResponse(w, false, err.Error())
|
webutils.WriteSimpleResponse(w, false, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hide/show the user's chat messages if disabling.
|
if !*request.Enabled {
|
||||||
// Leave hidden messages hidden to be safe.
|
if err := handleUserDisabling(*request.UserId); err != nil {
|
||||||
if !request.Enabled {
|
|
||||||
if err := chat.SetMessageVisibilityForUserID(request.UserID, request.Enabled); err != nil {
|
|
||||||
log.Errorln("error changing user messages visibility", err)
|
|
||||||
webutils.WriteSimpleResponse(w, false, err.Error())
|
webutils.WriteSimpleResponse(w, false, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Forcefully disconnect the user from the chat
|
webutils.WriteSimpleResponse(w, true, fmt.Sprintf("%s enabled: %t", *request.UserId, *request.Enabled))
|
||||||
if !request.Enabled {
|
}
|
||||||
clients, err := chat.GetClientsForUser(request.UserID)
|
|
||||||
if len(clients) == 0 {
|
func updateUserStatus(request generated.UpdateUserEnabledJSONBody) error {
|
||||||
// Nothing to do
|
userRepository := userrepository.Get()
|
||||||
return
|
if err := userRepository.SetEnabled(*request.UserId, *request.Enabled); err != nil {
|
||||||
|
log.Errorln("error changing user enabled status", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !*request.Enabled {
|
||||||
|
if err := chat.SetMessageVisibilityForUserID(*request.UserId, *request.Enabled); err != nil {
|
||||||
|
log.Errorln("error changing user messages visibility", err)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
func handleUserDisabling(userID string) error {
|
||||||
log.Errorln("error fetching clients for user: ", err)
|
clients, err := chat.GetClientsForUser(userID)
|
||||||
webutils.WriteSimpleResponse(w, false, err.Error())
|
if len(clients) == 0 {
|
||||||
return
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
chat.DisconnectClients(clients)
|
if err != nil {
|
||||||
disconnectedUser := userRepository.GetUserByID(request.UserID)
|
log.Errorln("error fetching clients for user: ", err)
|
||||||
_ = chat.SendSystemAction(fmt.Sprintf("**%s** has been removed from chat.", disconnectedUser.DisplayName), true)
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
localIP4Address := "127.0.0.1"
|
chat.DisconnectClients(clients)
|
||||||
localIP6Address := "::1"
|
userRepository := userrepository.Get()
|
||||||
|
disconnectedUser := userRepository.GetUserByID(userID)
|
||||||
|
_ = chat.SendSystemAction(fmt.Sprintf("**%s** has been removed from chat.", disconnectedUser.DisplayName), true)
|
||||||
|
|
||||||
// Ban this user's IP address.
|
localIP4Address := "127.0.0.1"
|
||||||
authRepository := authrepository.Get()
|
localIP6Address := "::1"
|
||||||
|
|
||||||
for _, client := range clients {
|
authRepository := authrepository.Get()
|
||||||
ipAddress := client.IPAddress
|
for _, client := range clients {
|
||||||
if ipAddress != localIP4Address && ipAddress != localIP6Address {
|
ipAddress := client.IPAddress
|
||||||
reason := fmt.Sprintf("Banning of %s", disconnectedUser.DisplayName)
|
if ipAddress != localIP4Address && ipAddress != localIP6Address {
|
||||||
if err := authRepository.BanIPAddress(ipAddress, reason); err != nil {
|
reason := fmt.Sprintf("Banning of %s", disconnectedUser.DisplayName)
|
||||||
log.Errorln("error banning IP address: ", err)
|
if err := authRepository.BanIPAddress(ipAddress, reason); err != nil {
|
||||||
}
|
log.Errorln("error banning IP address: ", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
webutils.WriteSimpleResponse(w, true, fmt.Sprintf("%s enabled: %t", request.UserID, request.Enabled))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDisabledUsers will return all the disabled users.
|
// GetDisabledUsers will return all the disabled users.
|
||||||
@@ -282,13 +283,19 @@ func SendSystemMessageToConnectedClient(integration models.ExternalAPIUser, w ht
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var message events.SystemMessageEvent
|
// var message events.SystemMessageEvent
|
||||||
|
var message generated.SendSystemMessageJSONRequestBody
|
||||||
if err := json.NewDecoder(r.Body).Decode(&message); err != nil {
|
if err := json.NewDecoder(r.Body).Decode(&message); err != nil {
|
||||||
webutils.InternalErrorHandler(w, err)
|
webutils.InternalErrorHandler(w, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
chat.SendSystemMessageToClient(uint(clientIDNumeric), message.Body)
|
if message.Body == nil {
|
||||||
|
webutils.WriteSimpleResponse(w, false, "no message body provided")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
chat.SendSystemMessageToClient(uint(clientIDNumeric), *message.Body)
|
||||||
webutils.WriteSimpleResponse(w, true, "sent")
|
webutils.WriteSimpleResponse(w, true, "sent")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/owncast/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
"github.com/owncast/owncast/persistence/configrepository"
|
"github.com/owncast/owncast/persistence/configrepository"
|
||||||
"github.com/owncast/owncast/persistence/userrepository"
|
"github.com/owncast/owncast/persistence/userrepository"
|
||||||
|
"github.com/owncast/owncast/webserver/handlers/generated"
|
||||||
webutils "github.com/owncast/owncast/webserver/utils"
|
webutils "github.com/owncast/owncast/webserver/utils"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
@@ -51,18 +52,20 @@ func RegisterFediverseOTPRequest(u models.User, w http.ResponseWriter, r *http.R
|
|||||||
|
|
||||||
// VerifyFediverseOTPRequest verifies the given OTP code for the given access token.
|
// VerifyFediverseOTPRequest verifies the given OTP code for the given access token.
|
||||||
func VerifyFediverseOTPRequest(w http.ResponseWriter, r *http.Request) {
|
func VerifyFediverseOTPRequest(w http.ResponseWriter, r *http.Request) {
|
||||||
type request struct {
|
var req generated.VerifyFediverseOTPRequestJSONBody
|
||||||
Code string `json:"code"`
|
|
||||||
|
if req.Code == nil {
|
||||||
|
webutils.WriteSimpleResponse(w, false, "Could not decode request: code is required")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req request
|
|
||||||
decoder := json.NewDecoder(r.Body)
|
decoder := json.NewDecoder(r.Body)
|
||||||
if err := decoder.Decode(&req); err != nil {
|
if err := decoder.Decode(&req); err != nil {
|
||||||
webutils.WriteSimpleResponse(w, false, "Could not decode request: "+err.Error())
|
webutils.WriteSimpleResponse(w, false, "Could not decode request: "+err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
accessToken := r.URL.Query().Get("accessToken")
|
accessToken := r.URL.Query().Get("accessToken")
|
||||||
valid, authRegistration := fediverseauth.ValidateFediverseOTP(accessToken, req.Code)
|
valid, authRegistration := fediverseauth.ValidateFediverseOTP(accessToken, *req.Code)
|
||||||
if !valid {
|
if !valid {
|
||||||
w.WriteHeader(http.StatusForbidden)
|
w.WriteHeader(http.StatusForbidden)
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user