From 8a2cf5bb68617004d24469c65b68e8b01ca56621 Mon Sep 17 00:00:00 2001 From: Louis Chemineau Date: Thu, 5 May 2022 11:21:20 +0200 Subject: [PATCH] Do not dispatch postSetPassword when setPassword fails Also Improve error message when setPassword fails Signed-off-by: Louis Chemineau --- .../lib/Controller/ChangePasswordController.php | 5 ++++- lib/private/User/User.php | 16 ++++++++++------ .../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'); -- 2.39.5