aboutsummaryrefslogtreecommitdiff
path: root/clientapi/routing/admin.go
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-12-22 11:54:03 +0100
committerGitHub <noreply@github.com>2022-12-22 11:54:03 +0100
commitd1d2d16738a248846ea4367fe2b33485d56db6cd (patch)
tree32045e75867a11e24045890ac20fba8c62515fb2 /clientapi/routing/admin.go
parentbeea2432e6144a98370138f8d3f6334c19a044bb (diff)
Fix reset password endpoint (#2921)
Fixes the admin password reset endpoint. It was using a wrong variable, so could not detect the user. Adds some more checks to validate we can actually change the password.
Diffstat (limited to 'clientapi/routing/admin.go')
-rw-r--r--clientapi/routing/admin.go38
1 files changed, 32 insertions, 6 deletions
diff --git a/clientapi/routing/admin.go b/clientapi/routing/admin.go
index be8073c3..8419622d 100644
--- a/clientapi/routing/admin.go
+++ b/clientapi/routing/admin.go
@@ -7,6 +7,7 @@ import (
"time"
"github.com/gorilla/mux"
+ "github.com/matrix-org/dendrite/internal"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/util"
"github.com/nats-io/nats.go"
@@ -98,20 +99,40 @@ func AdminEvacuateUser(req *http.Request, cfg *config.ClientAPI, device *userapi
}
func AdminResetPassword(req *http.Request, cfg *config.ClientAPI, device *userapi.Device, userAPI userapi.ClientUserAPI) util.JSONResponse {
+ if req.Body == nil {
+ return util.JSONResponse{
+ Code: http.StatusBadRequest,
+ JSON: jsonerror.Unknown("Missing request body"),
+ }
+ }
vars, err := httputil.URLDecodeMapValues(mux.Vars(req))
if err != nil {
return util.ErrorResponse(err)
}
- serverName := cfg.Matrix.ServerName
- localpart, ok := vars["localpart"]
- if !ok {
+ var localpart string
+ userID := vars["userID"]
+ localpart, serverName, err := cfg.Matrix.SplitLocalID('@', userID)
+ if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MissingArgument("Expecting user localpart."),
+ JSON: jsonerror.InvalidArgumentValue(err.Error()),
+ }
+ }
+ accAvailableResp := &userapi.QueryAccountAvailabilityResponse{}
+ if err = userAPI.QueryAccountAvailability(req.Context(), &userapi.QueryAccountAvailabilityRequest{
+ Localpart: localpart,
+ ServerName: serverName,
+ }, accAvailableResp); err != nil {
+ return util.JSONResponse{
+ Code: http.StatusInternalServerError,
+ JSON: jsonerror.InternalAPIError(req.Context(), err),
}
}
- if l, s, err := cfg.Matrix.SplitLocalID('@', localpart); err == nil {
- localpart, serverName = l, s
+ if accAvailableResp.Available {
+ return util.JSONResponse{
+ Code: http.StatusNotFound,
+ JSON: jsonerror.Unknown("User does not exist"),
+ }
}
request := struct {
Password string `json:"password"`
@@ -128,6 +149,11 @@ func AdminResetPassword(req *http.Request, cfg *config.ClientAPI, device *userap
JSON: jsonerror.MissingArgument("Expecting non-empty password."),
}
}
+
+ if resErr := internal.ValidatePassword(request.Password); resErr != nil {
+ return *resErr
+ }
+
updateReq := &userapi.PerformPasswordUpdateRequest{
Localpart: localpart,
ServerName: serverName,