Add functionality to update password with password hash (#15343)
* Add functionality to update password with password hash This can be used to update a user's password with a direct password hash instead of providing the password in plaintext. * Use test helper for local mode
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
e83462637e
Коммит
90ef61f74c
33
api4/user.go
33
api4/user.go
@@ -1492,18 +1492,31 @@ func updatePassword(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
var err *model.AppError
|
||||
if c.Params.UserId == c.App.Session().UserId {
|
||||
currentPassword := props["current_password"]
|
||||
if len(currentPassword) <= 0 {
|
||||
c.SetInvalidParam("current_password")
|
||||
return
|
||||
}
|
||||
|
||||
err = c.App.UpdatePasswordAsUser(c.Params.UserId, currentPassword, newPassword)
|
||||
} else if c.App.SessionHasPermissionTo(*c.App.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
||||
err = c.App.UpdatePasswordByUserIdSendEmail(c.Params.UserId, newPassword, c.App.T("api.user.reset_password.method"))
|
||||
// There are two main update flows depending on whether the provided password
|
||||
// is already hashed or not.
|
||||
if props["already_hashed"] == "true" {
|
||||
if c.App.SessionHasPermissionTo(*c.App.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
||||
err = c.App.UpdateHashedPasswordByUserId(c.Params.UserId, newPassword)
|
||||
} else if c.Params.UserId == c.App.Session().UserId {
|
||||
err = model.NewAppError("updatePassword", "api.user.update_password.user_and_hashed.app_error", nil, "", http.StatusUnauthorized)
|
||||
} else {
|
||||
err = model.NewAppError("updatePassword", "api.user.update_password.context.app_error", nil, "", http.StatusForbidden)
|
||||
}
|
||||
} else {
|
||||
err = model.NewAppError("updatePassword", "api.user.update_password.context.app_error", nil, "", http.StatusForbidden)
|
||||
if c.Params.UserId == c.App.Session().UserId {
|
||||
currentPassword := props["current_password"]
|
||||
if len(currentPassword) <= 0 {
|
||||
c.SetInvalidParam("current_password")
|
||||
return
|
||||
}
|
||||
|
||||
err = c.App.UpdatePasswordAsUser(c.Params.UserId, currentPassword, newPassword)
|
||||
} else if c.App.SessionHasPermissionTo(*c.App.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
||||
err = c.App.UpdatePasswordByUserIdSendEmail(c.Params.UserId, newPassword, c.App.T("api.user.reset_password.method"))
|
||||
} else {
|
||||
err = model.NewAppError("updatePassword", "api.user.update_password.context.app_error", nil, "", http.StatusForbidden)
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
||||
Ссылка в новой задаче
Block a user