Skip to content

Commit ebd64ec

Browse files
committed
Move to Routes::getModuleUrl
1 parent b4d834a commit ebd64ec

11 files changed

Lines changed: 50 additions & 49 deletions

hooks/hook_adminmenu.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
declare(strict_types=1);
44

55
use SimpleSAML\Locale\Translate;
6+
use SimpleSAML\Module\oidc\Bridges\SspBridge;
67
use SimpleSAML\Module\oidc\Codebooks\RoutesEnum;
78
use SimpleSAML\Module\oidc\ModuleConfig;
9+
use SimpleSAML\Module\oidc\Utils\Routes;
810
use SimpleSAML\XHTML\Template;
911

1012
/** @noinspection PhpParameterByRefIsNotUsedAsReferenceInspection Reference is actually used by SimpleSAMLphp */
@@ -17,10 +19,11 @@ function oidc_hook_adminmenu(Template &$template): void
1719
}
1820

1921
$moduleConfig = new ModuleConfig();
22+
$routes = new Routes($moduleConfig, new SspBridge());
2023

2124
$oidcMenuEntry = [
2225
ModuleConfig::MODULE_NAME => [
23-
'url' => $moduleConfig->getModuleUrl(RoutesEnum::AdminMigrations->value),
26+
'url' => $routes->getModuleUrl(RoutesEnum::AdminMigrations->value),
2427
'name' => Translate::noop('OIDC OP'),
2528
],
2629
];

src/Controllers/VerifiableCredentials/JwtVcIssuerConfigurationController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public function configuration(): Response
4141
{
4242
$configuration = [
4343
ClaimsEnum::Issuer->value => $this->moduleConfig->getIssuer(),
44-
ClaimsEnum::JwksUri->value => $this->moduleConfig->getModuleUrl(RoutesEnum::Jwks->value),
44+
ClaimsEnum::JwksUri->value => $this->routes->getModuleUrl(RoutesEnum::Jwks->value),
4545
];
4646

4747
return $this->routes->newJsonResponse($configuration);

src/Factories/TemplateFactory.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -102,63 +102,63 @@ protected function includeDefaultMenuItems(): void
102102
{
103103
$this->oidcMenu->addItem(
104104
$this->oidcMenu->buildItem(
105-
$this->moduleConfig->getModuleUrl(RoutesEnum::AdminMigrations->value),
105+
$this->routes->getModuleUrl(RoutesEnum::AdminMigrations->value),
106106
Translate::noop('Database Migrations'),
107107
),
108108
);
109109

110110
$this->oidcMenu->addItem(
111111
$this->oidcMenu->buildItem(
112-
$this->moduleConfig->getModuleUrl(RoutesEnum::AdminClients->value),
112+
$this->routes->getModuleUrl(RoutesEnum::AdminClients->value),
113113
Translate::noop('Client Registry'),
114114
),
115115
);
116116

117117
$this->oidcMenu->addItem(
118118
$this->oidcMenu->buildItem(
119-
$this->moduleConfig->getModuleUrl(RoutesEnum::AdminConfigProtocol->value),
119+
$this->routes->getModuleUrl(RoutesEnum::AdminConfigProtocol->value),
120120
Translate::noop('Protocol Settings'),
121121
),
122122
);
123123

124124
$this->oidcMenu->addItem(
125125
$this->oidcMenu->buildItem(
126-
$this->moduleConfig->getModuleUrl(RoutesEnum::AdminConfigFederation->value),
126+
$this->routes->getModuleUrl(RoutesEnum::AdminConfigFederation->value),
127127
Translate::noop('Federation Settings'),
128128
),
129129
);
130130

131131
$this->oidcMenu->addItem(
132132
$this->oidcMenu->buildItem(
133-
$this->moduleConfig->getModuleUrl(RoutesEnum::AdminTestTrustChainResolution->value),
133+
$this->routes->getModuleUrl(RoutesEnum::AdminTestTrustChainResolution->value),
134134
Translate::noop('Test Trust Chain Resolution'),
135135
),
136136
);
137137

138138
$this->oidcMenu->addItem(
139139
$this->oidcMenu->buildItem(
140-
$this->moduleConfig->getModuleUrl(RoutesEnum::AdminTestTrustMarkValidation->value),
140+
$this->routes->getModuleUrl(RoutesEnum::AdminTestTrustMarkValidation->value),
141141
Translate::noop('Test Trust Mark Validation'),
142142
),
143143
);
144144

145145
$this->oidcMenu->addItem(
146146
$this->oidcMenu->buildItem(
147-
$this->moduleConfig->getModuleUrl(RoutesEnum::AdminTestFederationDiscovery->value),
147+
$this->routes->getModuleUrl(RoutesEnum::AdminTestFederationDiscovery->value),
148148
Translate::noop('Test Federation Discovery'),
149149
),
150150
);
151151

152152
$this->oidcMenu->addItem(
153153
$this->oidcMenu->buildItem(
154-
$this->moduleConfig->getModuleUrl(RoutesEnum::AdminConfigVerifiableCredential->value),
154+
$this->routes->getModuleUrl(RoutesEnum::AdminConfigVerifiableCredential->value),
155155
Translate::noop('Verifiable Credential Settings'),
156156
),
157157
);
158158

159159
$this->oidcMenu->addItem(
160160
$this->oidcMenu->buildItem(
161-
$this->moduleConfig->getModuleUrl(RoutesEnum::AdminTestVerifiableCredentialIssuance->value),
161+
$this->routes->getModuleUrl(RoutesEnum::AdminTestVerifiableCredentialIssuance->value),
162162
Translate::noop('Test Verifiable Credential Issuance'),
163163
),
164164
);
@@ -179,7 +179,7 @@ public function setIncludeDefaultMenuItems(bool $includeDefaultMenuItems): Templ
179179
public function setActiveHrefPath(?string $activeHrefPath): TemplateFactory
180180
{
181181
$this->oidcMenu->setActiveHrefPath(
182-
$activeHrefPath ? $this->moduleConfig->getModuleUrl($activeHrefPath) : null,
182+
$activeHrefPath ? $this->routes->getModuleUrl($activeHrefPath) : null,
183183
);
184184
return $this;
185185
}

src/ModuleConfig.php

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -281,18 +281,6 @@ public function config(): Configuration
281281
return $this->moduleConfig;
282282
}
283283

284-
// TODO mivanci v7 Move to dedicated \SimpleSAML\Module\oidc\Utils\Routes::getModuleUrl
285-
public function getModuleUrl(?string $path = null): string
286-
{
287-
$base = $this->sspBridge->module()->getModuleURL(self::MODULE_NAME);
288-
289-
if ($path) {
290-
$base .= "/$path";
291-
}
292-
293-
return $base;
294-
}
295-
296284
/*****************************************************************************************************************
297285
* OpenID Connect related config.
298286
****************************************************************************************************************/

src/Services/AuthenticationService.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
use SimpleSAML\Module\oidc\Server\RequestTypes\AuthorizationRequest;
4141
use SimpleSAML\Module\oidc\Utils\ClaimTranslatorExtractor;
4242
use SimpleSAML\Module\oidc\Utils\RequestParamsResolver;
43+
use SimpleSAML\Module\oidc\Utils\Routes;
4344

4445
class AuthenticationService
4546
{
@@ -68,6 +69,7 @@ public function __construct(
6869
private readonly StateService $stateService,
6970
private readonly RequestParamsResolver $requestParamsResolver,
7071
private readonly UserEntityFactory $userEntityFactory,
72+
private readonly Routes $routes,
7173
) {
7274
$this->userIdAttr = $this->moduleConfig->getUserIdentifierAttribute();
7375
}
@@ -367,7 +369,7 @@ protected function runAuthProcs(array &$state): void
367369
'entityid' => $state['Destination']['entityid'] ?? '',
368370
];
369371

370-
$state['ReturnURL'] = $this->moduleConfig->getModuleUrl(RoutesEnum::Authorization->value);
372+
$state['ReturnURL'] = $this->routes->getModuleUrl(RoutesEnum::Authorization->value);
371373
$state['Destination'] = $spMetadata;
372374
$state['Source'] = $idpMetadata;
373375

src/Services/OpMetadataService.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use SimpleSAML\Module\oidc\Codebooks\RoutesEnum;
88
use SimpleSAML\Module\oidc\ModuleConfig;
99
use SimpleSAML\Module\oidc\Utils\ClaimTranslatorExtractor;
10+
use SimpleSAML\Module\oidc\Utils\Routes;
1011
use SimpleSAML\OpenID\Codebooks\ClaimsEnum;
1112
use SimpleSAML\OpenID\Codebooks\GrantTypesEnum;
1213
use SimpleSAML\OpenID\Codebooks\TokenEndpointAuthMethodsEnum;
@@ -27,6 +28,7 @@ class OpMetadataService
2728
public function __construct(
2829
private readonly ModuleConfig $moduleConfig,
2930
private readonly ClaimTranslatorExtractor $claimTranslatorExtractor,
31+
private readonly Routes $routes,
3032
) {
3133
$this->initMetadata();
3234
}
@@ -52,14 +54,14 @@ private function initMetadata(): void
5254
$this->metadata = [];
5355
$this->metadata[ClaimsEnum::Issuer->value] = $this->moduleConfig->getIssuer();
5456
$this->metadata[ClaimsEnum::AuthorizationEndpoint->value] =
55-
$this->moduleConfig->getModuleUrl(RoutesEnum::Authorization->value);
57+
$this->routes->getModuleUrl(RoutesEnum::Authorization->value);
5658
$this->metadata[ClaimsEnum::TokenEndpoint->value] =
57-
$this->moduleConfig->getModuleUrl(RoutesEnum::Token->value);
59+
$this->routes->getModuleUrl(RoutesEnum::Token->value);
5860
$this->metadata[ClaimsEnum::UserinfoEndpoint->value] =
59-
$this->moduleConfig->getModuleUrl(RoutesEnum::UserInfo->value);
61+
$this->routes->getModuleUrl(RoutesEnum::UserInfo->value);
6062
$this->metadata[ClaimsEnum::EndSessionEndpoint->value] =
61-
$this->moduleConfig->getModuleUrl(RoutesEnum::EndSession->value);
62-
$this->metadata[ClaimsEnum::JwksUri->value] = $this->moduleConfig->getModuleUrl(RoutesEnum::Jwks->value);
63+
$this->routes->getModuleUrl(RoutesEnum::EndSession->value);
64+
$this->metadata[ClaimsEnum::JwksUri->value] = $this->routes->getModuleUrl(RoutesEnum::Jwks->value);
6365
$this->metadata[ClaimsEnum::ScopesSupported->value] = array_keys($this->moduleConfig->getScopes());
6466
$this->metadata[ClaimsEnum::ResponseTypesSupported->value] = ['code', 'id_token', 'id_token token'];
6567
$this->metadata[ClaimsEnum::SubjectTypesSupported->value] = ['public'];
@@ -83,7 +85,7 @@ private function initMetadata(): void
8385
// (request_uris client metadata).
8486
$this->metadata[ClaimsEnum::RequireRequestUriRegistration->value] = true;
8587
$this->metadata[ClaimsEnum::PushedAuthorizationRequestEndpoint->value] =
86-
$this->moduleConfig->getModuleUrl(RoutesEnum::PushedAuthorizationRequest->value);
88+
$this->routes->getModuleUrl(RoutesEnum::PushedAuthorizationRequest->value);
8789
$this->metadata[ClaimsEnum::RequirePushedAuthorizationRequests->value] =
8890
$this->moduleConfig->getRequirePushedAuthorizationRequests();
8991

src/Utils/AuthenticatedOAuth2ClientResolver.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public function __construct(
3333
protected readonly ModuleConfig $moduleConfig,
3434
protected readonly Helpers $helpers,
3535
protected readonly ?ProtocolCache $protocolCache,
36+
protected readonly Routes $routes,
3637
) {
3738
}
3839

@@ -333,9 +334,9 @@ public function forPrivateKeyJwt(
333334
// RFC 9126 (PAR): ...the authorization server MUST accept its issuer identifier, token endpoint URL,
334335
// or pushed authorization request endpoint URL as values that identify it as an intended audience.
335336
$expectedAudience = [
336-
$this->moduleConfig->getModuleUrl(RoutesEnum::Token->value),
337-
$this->moduleConfig->getModuleUrl(RoutesEnum::Authorization->value),
338-
$this->moduleConfig->getModuleUrl(RoutesEnum::PushedAuthorizationRequest->value),
337+
$this->routes->getModuleUrl(RoutesEnum::Token->value),
338+
$this->routes->getModuleUrl(RoutesEnum::Authorization->value),
339+
$this->routes->getModuleUrl(RoutesEnum::PushedAuthorizationRequest->value),
339340
$this->moduleConfig->getIssuer(),
340341
];
341342

tests/unit/src/ModuleConfigTest.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ class ModuleConfigTest extends TestCase
7676
private MockObject $sspBridgeMock;
7777
private MockObject $sspBridgeUtilsMock;
7878
private MockObject $sspBridgeUtilsHttpMock;
79-
private MockObject $sspBridgeModuleMock;
8079
private MockObject $sspBridgeUtilsConfigMock;
8180
private MockObject $valueAbstractMock;
8281

@@ -97,12 +96,7 @@ protected function setUp(): void
9796
);
9897
$this->sspBridgeUtilsHttpMock = $this->createMock(HTTP::class);
9998

100-
$this->sspBridgeModuleMock = $this->createMock(SspBridge\Module::class);
101-
$this->sspBridgeModuleMock->method('getModuleUrl')
102-
->willReturn('http://sample.test/' . ModuleConfig::MODULE_NAME);
103-
10499
$this->sspBridgeMock->method('utils')->willReturn($this->sspBridgeUtilsMock);
105-
$this->sspBridgeMock->method('module')->willReturn($this->sspBridgeModuleMock);
106100

107101
$this->sspBridgeUtilsMock->method('http')->willReturn($this->sspBridgeUtilsHttpMock);
108102
$this->sspBridgeUtilsMock->method('config')->willReturn($this->sspBridgeUtilsConfigMock);
@@ -197,11 +191,6 @@ public function testCanGetSspConfig(): void
197191
$this->assertInstanceOf(Configuration::class, $this->sut()->sspConfig());
198192
}
199193

200-
public function testCanGetModuleUrl(): void
201-
{
202-
$this->assertStringContainsString(ModuleConfig::MODULE_NAME, $this->sut()->getModuleUrl('test'));
203-
}
204-
205194
public function testCanGetOpenIdScopes(): void
206195
{
207196
$this->assertNotEmpty($this->sut()->getScopes());

tests/unit/src/Services/AuthenticationServiceTest.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
use SimpleSAML\Module\oidc\Services\StateService;
3535
use SimpleSAML\Module\oidc\Utils\ClaimTranslatorExtractor;
3636
use SimpleSAML\Module\oidc\Utils\RequestParamsResolver;
37+
use SimpleSAML\Module\oidc\Utils\Routes;
3738
use SimpleSAML\Session;
3839

3940
/**
@@ -83,6 +84,7 @@ class AuthenticationServiceTest extends TestCase
8384
protected MockObject $clientHelperMock;
8485
protected MockObject $requestParamsResolverMock;
8586
protected MockObject $userEntityFactoryMock;
87+
protected MockObject $routesMock;
8688

8789
/**
8890
* @throws \PHPUnit\Framework\MockObject\Exception
@@ -128,6 +130,7 @@ protected function setUp(): void
128130
->willReturn(self::AUTHZ_REQUEST_PARAMS);
129131

130132
$this->userEntityFactoryMock = $this->createMock(UserEntityFactory::class);
133+
$this->routesMock = $this->createMock(Routes::class);
131134
}
132135

133136
/**
@@ -150,6 +153,7 @@ public function mock(): AuthenticationService
150153
$this->stateServiceMock,
151154
$this->requestParamsResolverMock,
152155
$this->userEntityFactoryMock,
156+
$this->routesMock,
153157
],
154158
)->onlyMethods([])
155159
->getMock();
@@ -400,6 +404,7 @@ public function testItProcessesRequest(bool $isAuthnPer): void
400404
$this->stateServiceMock,
401405
$this->requestParamsResolverMock,
402406
$this->userEntityFactoryMock,
407+
$this->routesMock,
403408
])
404409
->onlyMethods(['runAuthProcs', 'prepareStateArray'])
405410
->getMock();
@@ -477,7 +482,7 @@ public function testItRunAuthProcs(): void
477482
];
478483
$returnUrl = 'http://example.com/authorization';
479484
$this->moduleConfigMock->method('getAuthProcFilters')->willReturn($authProcFilters);
480-
$this->moduleConfigMock->method('getModuleUrl')->willReturn($returnUrl);
485+
$this->routesMock->method('getModuleUrl')->willReturn($returnUrl);
481486
$mockedInstance = new class (
482487
$this->userRepositoryMock,
483488
$this->authSimpleFactoryMock,
@@ -490,6 +495,7 @@ public function testItRunAuthProcs(): void
490495
$this->stateServiceMock,
491496
$this->requestParamsResolverMock,
492497
$this->userEntityFactoryMock,
498+
$this->routesMock,
493499
) extends AuthenticationService {
494500
public function runAuthProcsPublic(array &$state): void
495501
{

tests/unit/src/Services/OpMetadataServiceTest.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use SimpleSAML\Module\oidc\ModuleConfig;
1111
use SimpleSAML\Module\oidc\Services\OpMetadataService;
1212
use SimpleSAML\Module\oidc\Utils\ClaimTranslatorExtractor;
13+
use SimpleSAML\Module\oidc\Utils\Routes;
1314
use SimpleSAML\OpenID\Algorithms\SignatureAlgorithmBag;
1415
use SimpleSAML\OpenID\Algorithms\SignatureAlgorithmEnum;
1516
use SimpleSAML\OpenID\Codebooks\ClaimsEnum;
@@ -23,6 +24,7 @@
2324
class OpMetadataServiceTest extends TestCase
2425
{
2526
protected MockObject $moduleConfigMock;
27+
protected MockObject $routesMock;
2628
protected MockObject $claimTranslatorExtractorMock;
2729
protected MockObject $signatureAlgorithmBag;
2830
protected MockObject $supportedAlgorithmsMock;
@@ -40,7 +42,8 @@ public function setUp(): void
4042
->willReturn(['openid' => 'openid']);
4143
$this->moduleConfigMock->expects($this->once())->method('getIssuer')
4244
->willReturn('http://localhost');
43-
$this->moduleConfigMock->method('getModuleUrl')
45+
$this->routesMock = $this->createMock(Routes::class);
46+
$this->routesMock->method('getModuleUrl')
4447
->willReturnCallback(function ($path) {
4548
$paths = [
4649
RoutesEnum::Authorization->value => 'http://localhost/authorization',
@@ -91,13 +94,16 @@ public function setUp(): void
9194
protected function sut(
9295
?ModuleConfig $moduleConfig = null,
9396
?ClaimTranslatorExtractor $claimTranslatorExtractor = null,
97+
?Routes $routes = null,
9498
): OpMetadataService {
9599
$moduleConfig = $moduleConfig ?? $this->moduleConfigMock;
96100
$claimTranslatorExtractor = $claimTranslatorExtractor ?? $this->claimTranslatorExtractorMock;
101+
$routes = $routes ?? $this->routesMock;
97102

98103
return new OpMetadataService(
99104
$moduleConfig,
100105
$claimTranslatorExtractor,
106+
$routes,
101107
);
102108
}
103109

0 commit comments

Comments
 (0)