Skip to content

Commit ca7164f

Browse files
authored
Merge pull request #215 from dachcom-digital/access_check
Account check before Password Reset
2 parents a9ad9b0 + 6e6eab4 commit ca7164f

File tree

6 files changed

+58
-2
lines changed

6 files changed

+58
-2
lines changed

UPGRADE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## 5.1.2
44
- **[BUGFIX]**: Fix interface compatibility [#216](https://github.com/dachcom-digital/pimcore-members/issues/216)
5+
- **[IMPROVEMENT]**: Account check before password reset
56

67
## 5.1.1
78
- **[BUGFIX]**: Fix chunked serving of protected video assets [#214](https://github.com/dachcom-digital/pimcore-members/pull/214)

src/EventListener/ResettingListener.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,19 @@ public function onResettingResetSuccess(FormEvent $event): void
6060

6161
public function onResettingResetRequest(GetResponseUserEvent $event): void
6262
{
63-
if (!$event->getUser()->isAccountNonLocked()) {
63+
$user = $event->getUser();
64+
65+
if (!$user instanceof UserInterface) {
66+
return;
67+
}
68+
69+
if (!$user->isAccountNonLocked()) {
70+
$event->setResponse(new RedirectResponse($this->router->generate('members_user_resetting_request')));
71+
72+
return;
73+
}
74+
75+
if ($user->getConfirmationToken() !== null) {
6476
$event->setResponse(new RedirectResponse($this->router->generate('members_user_resetting_request')));
6577
}
6678
}

tests/Functional/Frontend/Form/RegisterFormCest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public function testUserRegistrationFormConfirmByAdminWithFinalConfirmationMail(
8585
$this->register($I);
8686

8787
$user = $I->grabOneUserAfterRegistration();
88-
$I->publishAndConfirmAFrontendUser($user);
88+
$I->publishAFrontendUser($user);
8989

9090
$email = Email::getByPath('/email/register-confirmed');
9191
$I->canSeeEmailIsSent($email);

tests/Functional/Frontend/Form/ResettingFormCest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ public function testResettingWithAdminConfirm(FunctionalTester $I): void
3737
$this->triggerResetForm($I, $user->getEmail());
3838
}
3939

40+
public function testResettingWithLockedUser(FunctionalTester $I): void
41+
{
42+
$user = $I->haveARegisteredFrontEndUser(false);
43+
44+
$I->amOnPage('/en/members/resetting/request');
45+
46+
$I->fillField('form[class="members_user_resetting_request"] input[type="text"][id="username"]', $user->getEmail());
47+
$I->click('Reset password');
48+
49+
$I->canSeeCurrentRouteIs('members_user_resetting_request');
50+
}
51+
4052
private function triggerResetForm(FunctionalTester $I, $field): void
4153
{
4254
$I->amOnPage('/en/members/resetting/request');

tests/Support/Helper/Members.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public function haveARegisteredFrontEndUser(bool $confirmed = false, array $grou
7878
$userObject->setUserName(MembersHelper::DEFAULT_FEU_USERNAME);
7979
$userObject->setPlainPassword(MembersHelper::DEFAULT_FEU_PASSWORD);
8080
$userObject->setPublished(false);
81+
$userObject->setConfirmationToken(MembersHelper::DEFAULT_CONFIRMATION_TOKEN);
8182

8283
if (count($additionalParameter) > 0) {
8384
foreach ($additionalParameter as $additionalParam => $additionalParamValue) {
@@ -101,10 +102,39 @@ public function haveARegisteredFrontEndUser(bool $confirmed = false, array $grou
101102
return $user;
102103
}
103104

105+
public function haveAConfirmedUnpublishedFrontEndUser(array $groups = [], array $additionalParameter = []): UserInterface
106+
{
107+
$user = $this->haveARegisteredFrontEndUser(true, $groups, $additionalParameter);
108+
109+
$user->setPublished(false);
110+
111+
$userManager = $this->getContainer()->get(UserManager::class);
112+
$userManager->updateUser($user);
113+
114+
$this->assertInstanceOf(UserInterface::class, $user);
115+
116+
return $user;
117+
}
118+
104119
/**
105120
* Actor Function to publish and confirm (triggered by updateUser()) a frontend user.
106121
*/
107122
public function publishAndConfirmAFrontendUser(UserInterface $user): void
123+
{
124+
$user->setPublished(true);
125+
$user->setConfirmationToken(null);
126+
127+
$userManager = $this->getContainer()->get(UserManager::class);
128+
$userManager->updateUser($user);
129+
130+
$this->assertTrue($user->getPublished());
131+
$this->assertNull($user->getConfirmationToken());
132+
}
133+
134+
/**
135+
* Actor Function to publish (triggered by updateUser()) a frontend user.
136+
*/
137+
public function publishAFrontendUser(UserInterface $user): void
108138
{
109139
$user->setPublished(true);
110140

tests/Support/Util/MembersHelper.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class MembersHelper
1111
public const DEFAULT_FEU_EMAIL = 'test@universe.org';
1212
public const DEFAULT_FEU_PASSWORD = 'default-password';
1313
public const DEFAULT_FEG_NAME = 'Default Group';
14+
public const DEFAULT_CONFIRMATION_TOKEN = 'default-confirmation-token';
1415

1516
public static function assertMailSender(): void
1617
{

0 commit comments

Comments
 (0)