diff options
author | Louis Chemineau <louis@chmn.me> | 2022-05-05 12:21:20 +0300 |
---|---|---|
committer | Louis Chemineau <louis@chmn.me> | 2022-05-05 18:21:23 +0300 |
commit | 8a2cf5bb68617004d24469c65b68e8b01ca56621 (patch) | |
tree | 58cb1836b328b159be549f5759245db9fbf1f6d5 | |
parent | d3efd40a24be45a2a38a904c111d10fa4de01f81 (diff) |
Do not dispatch postSetPassword when setPassword fails
Also Improve error message when setPassword fails
Signed-off-by: Louis Chemineau <louis@chmn.me>
-rw-r--r-- | apps/settings/lib/Controller/ChangePasswordController.php | 5 | ||||
-rw-r--r-- | lib/private/User/User.php | 16 | ||||
-rw-r--r-- | tests/Core/Controller/ChangePasswordControllerTest.php | 6 |
3 files changed, 20 insertions, 7 deletions
diff --git a/apps/settings/lib/Controller/ChangePasswordController.php b/apps/settings/lib/Controller/ChangePasswordController.php index 8dd1e6ba028..85e4218ebb5 100644 --- a/apps/settings/lib/Controller/ChangePasswordController.php +++ b/apps/settings/lib/Controller/ChangePasswordController.php @@ -109,7 +109,10 @@ class ChangePasswordController extends Controller { try { if ($newpassword === null || $user->setPassword($newpassword) === false) { return new JSONResponse([ - 'status' => 'error' + 'status' => 'error', + 'data' => [ + 'message' => $this->l->t('Unable to change personal password'), + ], ]); } // password policy app throws exception diff --git a/lib/private/User/User.php b/lib/private/User/User.php index 0a51622428b..e7aa72fafba 100644 --- a/lib/private/User/User.php +++ b/lib/private/User/User.php @@ -320,13 +320,17 @@ class User implements IUser { } if ($this->backend->implementsActions(Backend::SET_PASSWORD)) { $result = $this->backend->setPassword($this->uid, $password); - $this->legacyDispatcher->dispatch(IUser::class . '::postSetPassword', new GenericEvent($this, [ - 'password' => $password, - 'recoveryPassword' => $recoveryPassword, - ])); - if ($this->emitter) { - $this->emitter->emit('\OC\User', 'postSetPassword', [$this, $password, $recoveryPassword]); + + if ($result !== false) { + $this->legacyDispatcher->dispatch(IUser::class . '::postSetPassword', new GenericEvent($this, [ + 'password' => $password, + 'recoveryPassword' => $recoveryPassword, + ])); + if ($this->emitter) { + $this->emitter->emit('\OC\User', 'postSetPassword', [$this, $password, $recoveryPassword]); + } } + return !($result === false); } else { return false; diff --git a/tests/Core/Controller/ChangePasswordControllerTest.php b/tests/Core/Controller/ChangePasswordControllerTest.php index 190afd3be47..2d7292f6801 100644 --- a/tests/Core/Controller/ChangePasswordControllerTest.php +++ b/tests/Core/Controller/ChangePasswordControllerTest.php @@ -138,6 +138,9 @@ class ChangePasswordControllerTest extends \Test\TestCase { $expects = [ 'status' => 'error', + 'data' => [ + 'message' => 'Unable to change personal password', + ], ]; $res = $this->controller->changePersonalPassword('old'); @@ -163,6 +166,9 @@ class ChangePasswordControllerTest extends \Test\TestCase { $expects = new JSONResponse([ 'status' => 'error', + 'data' => [ + 'message' => 'Unable to change personal password', + ], ]); $actual = $this->controller->changePersonalPassword('old', 'new'); |