Skip to content

Commit 33a5d36

Browse files
committed
split out deactivateExpiredUsers into two methods suitable for calling without input parameters in cron (#22833)
1 parent 4c4149f commit 33a5d36

File tree

6 files changed

+31
-14
lines changed

6 files changed

+31
-14
lines changed

app/code/Magento/Security/Model/Plugin/AuthSession.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public function aroundProlong(Session $session, \Closure $proceed)
7676
$this->addUserLogoutNotification();
7777
return null;
7878
} elseif ($this->userExpirationManager->isUserExpired($session->getUser()->getId())) {
79-
$this->userExpirationManager->deactivateExpiredUsers([$session->getUser()->getId()]);
79+
$this->userExpirationManager->deactivateExpiredUsersById([$session->getUser()->getId()]);
8080
$session->destroy();
8181
$this->addUserLogoutNotification();
8282
return null;

app/code/Magento/Security/Model/UserExpirationManager.php

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,34 @@ public function __construct(
7676

7777
/**
7878
* Deactivate expired user accounts and invalidate their sessions.
79-
*
80-
* @param array|null $userIds
8179
*/
82-
public function deactivateExpiredUsers(?array $userIds = null): void
80+
public function deactivateExpiredUsers(): void
8381
{
8482
/** @var ExpiredUsersCollection $expiredRecords */
8583
$expiredRecords = $this->userExpirationCollectionFactory->create()->addActiveExpiredUsersFilter();
86-
if ($userIds != null) {
87-
$expiredRecords->addUserIdsFilter($userIds);
88-
}
84+
$this->processExpiredUsers($expiredRecords);
85+
}
86+
87+
/**
88+
* Deactivate specific expired users.
89+
*
90+
* @param array $userIds
91+
*/
92+
public function deactivateExpiredUsersById(array $userIds): void
93+
{
94+
$expiredRecords = $this->userExpirationCollectionFactory->create()
95+
->addActiveExpiredUsersFilter()
96+
->addUserIdsFilter($userIds);
97+
$this->processExpiredUsers($expiredRecords);
98+
}
8999

100+
/**
101+
* Deactivate expired user accounts and invalidate their sessions.
102+
*
103+
* @param ExpiredUsersCollection $expiredRecords
104+
*/
105+
private function processExpiredUsers(ExpiredUsersCollection $expiredRecords): void
106+
{
90107
if ($expiredRecords->getSize() > 0) {
91108
// get all active sessions for the users and set them to logged out
92109
/** @var \Magento\Security\Model\ResourceModel\AdminSessionInfo\Collection $currentSessions */

app/code/Magento/Security/Observer/AdminUserAuthenticateBefore.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public function execute(Observer $observer)
5858
$user->loadByUsername($username);
5959

6060
if ($user->getId() && $this->userExpirationManager->isUserExpired($user->getId())) {
61-
$this->userExpirationManager->deactivateExpiredUsers([$user->getId()]);
61+
$this->userExpirationManager->deactivateExpiredUsersById([$user->getId()]);
6262
throw new AuthenticationException(
6363
__(
6464
'The account sign-in was incorrect or your account is disabled temporarily. '

app/code/Magento/Security/Test/Unit/Model/Plugin/AuthSessionTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public function setUp()
7979

8080
$this->userExpirationManagerMock = $this->createPartialMock(
8181
\Magento\Security\Model\UserExpirationManager::class,
82-
['isUserExpired', 'deactivateExpiredUsers']
82+
['isUserExpired', 'deactivateExpiredUsersById']
8383
);
8484

8585
$this->userMock = $this->createMock(\Magento\User\Model\User::class);
@@ -207,7 +207,7 @@ public function testAroundProlongSessionIsActiveUserIsExpired()
207207
->willReturn(true);
208208

209209
$this->userExpirationManagerMock->expects($this->once())
210-
->method('deactivateExpiredUsers')
210+
->method('deactivateExpiredUsersById')
211211
->with([$adminUserId]);
212212

213213
$this->authSessionMock->expects($this->once())

app/code/Magento/Security/Test/Unit/Observer/AdminUserAuthenticateBeforeTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ protected function setUp()
6565

6666
$this->userExpirationManagerMock = $this->createPartialMock(
6767
\Magento\Security\Model\UserExpirationManager::class,
68-
['isUserExpired', 'deactivateExpiredUsers']
68+
['isUserExpired', 'deactivateExpiredUsersById']
6969
);
7070
$this->userFactoryMock = $this->createPartialMock(\Magento\User\Model\UserFactory::class, ['create']);
7171
$this->userMock = $this->createPartialMock(\Magento\User\Model\User::class, ['loadByUsername', 'getId']);
@@ -104,7 +104,7 @@ public function testWithExpiredUser()
104104
->willReturn(true);
105105
$this->userMock->expects(static::exactly(3))->method('getId')->willReturn($adminUserId);
106106
$this->userExpirationManagerMock->expects(static::once())
107-
->method('deactivateExpiredUsers')
107+
->method('deactivateExpiredUsersById')
108108
->with([$adminUserId])
109109
->willReturn(null);
110110
$this->observer->execute($this->eventObserverMock);

dev/tests/integration/testsuite/Magento/Security/Model/UserExpirationManagerTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public function testDeactivateExpiredUsersWithExpiredUser()
7171
$user = $this->loadUserByUsername($adminUsernameFromFixture);
7272
$sessionId = $this->authSession->getSessionId();
7373
$this->expireUser($user);
74-
$this->userExpirationManager->deactivateExpiredUsers([$user->getId()]);
74+
$this->userExpirationManager->deactivateExpiredUsersById([$user->getId()]);
7575
$this->adminSessionInfo->load($sessionId, 'session_id');
7676
$user->reload();
7777
$userExpirationModel = $this->loadExpiredUserModelByUser($user);
@@ -90,7 +90,7 @@ public function testDeactivateExpiredUsersWithNonExpiredUser()
9090
$this->loginUser($adminUsernameFromFixture);
9191
$user = $this->loadUserByUsername($adminUsernameFromFixture);
9292
$sessionId = $this->authSession->getSessionId();
93-
$this->userExpirationManager->deactivateExpiredUsers([$user->getId()]);
93+
$this->userExpirationManager->deactivateExpiredUsersById([$user->getId()]);
9494
$user->reload();
9595
$userExpirationModel = $this->loadExpiredUserModelByUser($user);
9696
$this->adminSessionInfo->load($sessionId, 'session_id');

0 commit comments

Comments
 (0)