Skip to content

Commit 62bfa65

Browse files
committed
OXDEV-10012 Replace Registry with injected dependencies
1 parent 9b9ede3 commit 62bfa65

6 files changed

Lines changed: 111 additions & 78 deletions

File tree

src/Authentication/TwoFactorAuth/Service/UserService.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,19 @@
99

1010
namespace OxidEsales\SecurityModule\Authentication\TwoFactorAuth\Service;
1111

12-
use OxidEsales\Eshop\Core\Registry;
12+
use OxidEsales\Eshop\Core\Config;
1313
use OxidEsales\Eshop\Core\Utils;
1414
use OxidEsales\EshopCommunity\Internal\Framework\Session\SessionInterface;
1515
use OxidEsales\SecurityModule\Authentication\TwoFactorAuth\Infrastructure\Factory\UserFactoryInterface;
1616

17-
class UserService implements UserServiceInterface
17+
readonly class UserService implements UserServiceInterface
1818
{
1919
public function __construct(
2020
private AuthorizeServiceInterface $authorizeService,
2121
private UserFactoryInterface $userFactory,
2222
private SessionInterface $session,
2323
private Utils $utils,
24+
private Config $config,
2425
) {
2526
}
2627

@@ -45,7 +46,7 @@ public function finalizeLogin(): void
4546
/** @phpstan-ignore argument.type (password is null because user already authenticated via OTP) */
4647
$user->login($user->getFieldData('oxusername'), null, false);
4748
$this->clearOTPSessionVariables();
48-
Registry::getUtils()->redirect($redirectUrl, false);
49+
$this->utils->redirect($redirectUrl, false);
4950
}
5051

5152
public function clearOTPSessionVariables(): void
@@ -63,13 +64,13 @@ private function getRedirectUrl(): string
6364
return $storedUrl;
6465
}
6566

66-
return Registry::getConfig()->getShopHomeUrl();
67+
return $this->config->getShopHomeUrl();
6768
}
6869

6970
private function isInternalUrl(string $url): bool
7071
{
71-
$shopUrl = Registry::getConfig()->getShopUrl();
72-
$sslShopUrl = Registry::getConfig()->getSslShopUrl();
72+
$shopUrl = $this->config->getShopUrl();
73+
$sslShopUrl = $this->config->getSslShopUrl();
7374

7475
return str_starts_with($url, $shopUrl) || str_starts_with($url, $sslShopUrl);
7576
}

src/Authentication/TwoFactorAuth/Service/services.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ services:
66
autowire: true
77
public: false
88
bind:
9+
OxidEsales\Eshop\Core\Config: '@=service("OxidEsales\\SecurityModule\\Core\\Registry").getConfig()'
910
OxidEsales\Eshop\Core\Utils: '@=service("OxidEsales\\SecurityModule\\Core\\Registry").getUtils()'
1011

1112
OxidEsales\SecurityModule\Authentication\TwoFactorAuth\Service\ModuleSettingsServiceInterface:

src/Authentication/TwoFactorAuth/Subscriber/StoreCurrentUrlSubscriber.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,19 @@
99

1010
namespace OxidEsales\SecurityModule\Authentication\TwoFactorAuth\Subscriber;
1111

12-
use OxidEsales\Eshop\Core\Registry;
12+
use OxidEsales\Eshop\Core\Config;
13+
use OxidEsales\Eshop\Core\Request;
14+
use OxidEsales\EshopCommunity\Internal\Framework\Session\SessionInterface;
1315
use OxidEsales\EshopCommunity\Internal\Transition\ShopEvents\ViewRenderedEvent;
1416
use OxidEsales\SecurityModule\Authentication\TwoFactorAuth\Service\AuthorizeService;
1517
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1618

17-
class StoreCurrentUrlSubscriber implements EventSubscriberInterface
19+
readonly class StoreCurrentUrlSubscriber implements EventSubscriberInterface
1820
{
21+
public function __construct(private SessionInterface $session, private Config $config, private Request $request)
22+
{
23+
}
24+
1925
private const EXCLUDED_CONTROLLERS = [
2026
'twofactorauth',
2127
];
@@ -54,18 +60,18 @@ public function onViewRendered(ViewRenderedEvent $event): void
5460

5561
$currentUrl = $this->getCurrentPageUrl();
5662
if ($currentUrl) {
57-
Registry::getSession()->setVariable(AuthorizeService::OTP_TARGET_URL, $currentUrl);
63+
$this->session->set(AuthorizeService::OTP_TARGET_URL, $currentUrl);
5864
}
5965
}
6066

6167
private function isAdmin(): bool
6268
{
63-
return Registry::getConfig()->isAdmin();
69+
return $this->config->isAdmin();
6470
}
6571

6672
private function getCurrentController(): string
6773
{
68-
$activeView = Registry::getConfig()->getTopActiveView();
74+
$activeView = $this->config->getTopActiveView();
6975
if (!$activeView) {
7076
return 'start';
7177
}
@@ -85,7 +91,7 @@ private function shouldExcludeController(string $controller): bool
8591

8692
private function getCurrentFunction(): string
8793
{
88-
return strtolower((string) Registry::getRequest()->getRequestParameter('fnc'));
94+
return strtolower((string) $this->request->getRequestParameter('fnc'));
8995
}
9096

9197
private function shouldExcludeFunction(string $function): bool
@@ -95,7 +101,7 @@ private function shouldExcludeFunction(string $function): bool
95101

96102
private function getCurrentPageUrl(): ?string
97103
{
98-
$activeView = Registry::getConfig()->getTopActiveView();
104+
$activeView = $this->config->getTopActiveView();
99105
try {
100106
return $activeView->getLink();
101107
} catch (\Throwable) {

src/Authentication/TwoFactorAuth/Subscriber/services.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ services:
22
_defaults:
33
autowire: true
44
public: false
5+
bind:
6+
OxidEsales\Eshop\Core\Config: '@=service("OxidEsales\\SecurityModule\\Core\\Registry").getConfig()'
7+
OxidEsales\Eshop\Core\Request: '@=service("OxidEsales\\SecurityModule\\Core\\Registry").getRequest()'
58

69
OxidEsales\SecurityModule\Authentication\TwoFactorAuth\Subscriber\StoreCurrentUrlSubscriber:
710
tags:

tests/Unit/Authentication/TwoFactorAuth/Service/UserServiceTest.php

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
use OxidEsales\Eshop\Application\Model\User;
1313
use OxidEsales\Eshop\Core\Config;
14-
use OxidEsales\Eshop\Core\Registry;
1514
use OxidEsales\Eshop\Core\Utils;
1615
use OxidEsales\EshopCommunity\Internal\Framework\Session\SessionInterface;
1716
use OxidEsales\SecurityModule\Authentication\TwoFactorAuth\Infrastructure\Factory\UserFactoryInterface;
@@ -112,17 +111,17 @@ public function testFinalizeLoginLoadsUserAndPerformsLogin(): void
112111

113112
$configStub = $this->createStub(Config::class);
114113
$configStub->method('getShopHomeUrl')->willReturn($shopHomeUrl);
115-
Registry::set(Config::class, $configStub);
116114

117115
$utilsSpy = $this->createMock(Utils::class);
118116
$utilsSpy->expects($this->once())
119117
->method('redirect')
120118
->with($shopHomeUrl, false);
121-
Registry::set(Utils::class, $utilsSpy);
122119

123120
$sut = $this->getSut(
124121
userFactory: $userFactoryStub,
125122
session: $sessionStub,
123+
utils: $utilsSpy,
124+
config: $configStub,
126125
);
127126

128127
$sut->finalizeLogin();
@@ -153,14 +152,14 @@ public function testFinalizeLoginSetsOTPPassInSession(): void
153152

154153
$configStub = $this->createStub(Config::class);
155154
$configStub->method('getShopHomeUrl')->willReturn(uniqid());
156-
Registry::set(Config::class, $configStub);
157155

158156
$utilsStub = $this->createStub(Utils::class);
159-
Registry::set(Utils::class, $utilsStub);
160157

161158
$sut = $this->getSut(
162159
userFactory: $userFactoryStub,
163160
session: $sessionSpy,
161+
utils: $utilsStub,
162+
config: $configStub,
164163
);
165164

166165
$sut->finalizeLogin();
@@ -194,17 +193,17 @@ public function testFinalizeLoginRedirectsToStoredUrlWhenInternal(): void
194193
$configStub->method('getShopUrl')->willReturn($shopUrl);
195194
$configStub->method('getSslShopUrl')->willReturn($shopUrl);
196195
$configStub->method('getShopHomeUrl')->willReturn($shopUrl);
197-
Registry::set(Config::class, $configStub);
198196

199197
$utilsSpy = $this->createMock(Utils::class);
200198
$utilsSpy->expects($this->once())
201199
->method('redirect')
202200
->with($storedUrl, false);
203-
Registry::set(Utils::class, $utilsSpy);
204201

205202
$sut = $this->getSut(
206203
userFactory: $userFactoryStub,
207204
session: $sessionStub,
205+
utils: $utilsSpy,
206+
config: $configStub,
208207
);
209208

210209
$sut->finalizeLogin();
@@ -238,17 +237,17 @@ public function testFinalizeLoginRedirectsToShopHomeWhenStoredUrlIsExternal(): v
238237
$configStub->method('getShopUrl')->willReturn($shopUrl);
239238
$configStub->method('getSslShopUrl')->willReturn($shopUrl);
240239
$configStub->method('getShopHomeUrl')->willReturn($shopUrl);
241-
Registry::set(Config::class, $configStub);
242240

243241
$utilsSpy = $this->createMock(Utils::class);
244242
$utilsSpy->expects($this->once())
245243
->method('redirect')
246244
->with($shopUrl, false);
247-
Registry::set(Utils::class, $utilsSpy);
248245

249246
$sut = $this->getSut(
250247
userFactory: $userFactoryStub,
251248
session: $sessionStub,
249+
utils: $utilsSpy,
250+
config: $configStub,
252251
);
253252

254253
$sut->finalizeLogin();
@@ -276,17 +275,17 @@ public function testFinalizeLoginRedirectsToShopHomeWhenNoStoredUrl(): void
276275

277276
$configStub = $this->createStub(Config::class);
278277
$configStub->method('getShopHomeUrl')->willReturn($shopHomeUrl);
279-
Registry::set(Config::class, $configStub);
280278

281279
$utilsSpy = $this->createMock(Utils::class);
282280
$utilsSpy->expects($this->once())
283281
->method('redirect')
284282
->with($shopHomeUrl, false);
285-
Registry::set(Utils::class, $utilsSpy);
286283

287284
$sut = $this->getSut(
288285
userFactory: $userFactoryStub,
289286
session: $sessionStub,
287+
utils: $utilsSpy,
288+
config: $configStub,
290289
);
291290

292291
$sut->finalizeLogin();
@@ -297,12 +296,14 @@ public function getSut(
297296
UserFactoryInterface $userFactory = null,
298297
SessionInterface $session = null,
299298
Utils $utils = null,
299+
Config $config = null,
300300
): UserServiceInterface {
301301
return new UserService(
302302
authorizeService: $authorizeService ?? $this->createStub(AuthorizeServiceInterface::class),
303303
userFactory: $userFactory ?? $this->createStub(UserFactoryInterface::class),
304304
session: $session ?? $this->createStub(SessionInterface::class),
305305
utils: $utils ?? $this->createStub(Utils::class),
306+
config: $config ?? $this->createStub(Config::class),
306307
);
307308
}
308309
}

0 commit comments

Comments
 (0)