Skip to content

Commit 59467b3

Browse files
committed
Fix request parameters for actions. Refactored oidc and oauth2 controller tests.
1 parent f43e4a0 commit 59467b3

File tree

9 files changed

+291
-290
lines changed

9 files changed

+291
-290
lines changed

composer.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
"simplesamlphp/simplesamlphp-test-framework": "^1.7",
2424
"phpunit/phpunit": "^10",
2525
"psalm/plugin-phpunit": "^0.19.0",
26-
"squizlabs/php_codesniffer": "^3.7",
27-
"dg/bypass-finals": "^1.8"
26+
"squizlabs/php_codesniffer": "^3.7"
2827
},
2928
"autoload": {
3029
"psr-4": {
@@ -49,7 +48,7 @@
4948
},
5049
"scripts": {
5150
"validate": [
52-
"vendor/bin/phpunit --no-coverage",
51+
"vendor/bin/phpunit --no-coverage --testdox",
5352
"vendor/bin/phpcs -p",
5453
"vendor/bin/psalm --no-cache"
5554
],

phpunit.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@
88
displayDetailsOnTestsThatTriggerDeprecations="true"
99
backupGlobals="false"
1010
>
11-
<extensions>
12-
<bootstrap class="DG\BypassFinals\PHPUnitExtension"/>
13-
</extensions>
14-
1511
<testsuites>
1612
<testsuite name="The project's test suite">
1713
<directory>./tests</directory>

src/Controller/OIDCLogoutController.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
use SimpleSAML\Logger;
1313
use SimpleSAML\Module\authoauth2\Auth\Source\OAuth2;
1414
use SimpleSAML\Module\authoauth2\Auth\Source\OpenIDConnect;
15+
use SimpleSAML\Module\authoauth2\Codebooks\LegacyRoutesEnum;
16+
use SimpleSAML\Module\authoauth2\Codebooks\RoutesEnum;
1517
use SimpleSAML\Module\authoauth2\Controller\Traits\RequestTrait;
1618
use SimpleSAML\Module\authoauth2\locators\SourceServiceLocator;
1719
use Symfony\Component\HttpFoundation\Request;
@@ -55,9 +57,8 @@ public function __construct(Configuration $config = null)
5557
*/
5658
public function loggedout(Request $request): void
5759
{
58-
Logger::debug('authoauth2: logout request=' . var_export($request->request->all(), true));
59-
6060
$this->parseRequest($request);
61+
Logger::debug('authoauth2: logout request=' . var_export($this->requestParams, true));
6162

6263
\assert(\is_array($this->state));
6364

@@ -72,19 +73,22 @@ public function loggedout(Request $request): void
7273
*/
7374
public function logout(Request $request): void
7475
{
75-
Logger::debug('authoauth2: logout request=' . var_export($request->request->all(), true));
76+
$this->parseRequestParamsSingleton($request);
77+
Logger::debug('authoauth2: logout request=' . var_export($this->requestParams, true));
7678
// Find the authentication source
77-
if (!$request->query->has('authSource')) {
79+
if (!isset($this->requestParams['authSource'])) {
7880
throw new BadRequest('No authsource in the request');
7981
}
80-
$sourceId = $request->query->get('authSource');
82+
$sourceId = $this->requestParams['authSource'];
8183
if (empty($sourceId) || !\is_string($sourceId)) {
8284
throw new BadRequest('Authsource ID invalid');
8385
}
86+
$logoutRoute = $this->config->getOptionalBoolean('useLegacyRoutes', false) ?
87+
LegacyRoutesEnum::LegacyLogout->value : RoutesEnum::Logout->value;
8488
$this->getAuthSource($sourceId)
8589
->logout([
8690
'oidc:localLogout' => true,
87-
'ReturnTo' => $this->config->getBasePath() . 'logout.php',
91+
'ReturnTo' => $this->config->getBasePath() . $logoutRoute,
8892
]);
8993
}
9094

src/Controller/Oauth2Controller.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,22 +51,23 @@ public function __construct()
5151
*/
5252
public function linkback(Request $request): void
5353
{
54-
Logger::debug('authoauth2: linkback request=' . var_export($request->query->all(), true));
55-
5654
$this->parseRequest($request);
55+
Logger::debug('authoauth2: linkback request=' . var_export($this->requestParams, true));
5756

5857
// Required for psalm
5958
\assert($this->source instanceof OAuth2);
6059
\assert(\is_array($this->state));
6160
\assert(\is_string($this->sourceId));
6261

6362
// Handle Identify Provider error
64-
if (!$request->query->has('code') || empty($request->query->get('code'))) {
63+
if (empty($this->requestParams['code'])) {
6564
$this->handleError($this->source, $this->state, $request);
65+
// Used to facilitate testing
66+
return;
6667
}
6768

6869
try {
69-
$this->source->finalStep($this->state, (string)$request->query->get('code'));
70+
$this->source->finalStep($this->state, (string)$this->requestParams['code']);
7071
} catch (IdentityProviderException $e) {
7172
// phpcs:ignore Generic.Files.LineLength.TooLong
7273
Logger::error("authoauth2: error in '$this->sourceId' msg '{$e->getMessage()}' body '" . var_export($e->getResponseBody(), true) . "'");

src/Controller/Traits/RequestTrait.php

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ trait RequestTrait
3737
*/
3838
protected string $expectedStateAuthId = OAuth2::AUTHID;
3939

40-
/** @var array|null */
41-
private ?array $requestParams;
40+
/** @var array */
41+
protected array $requestParams = [];
4242

4343
/**
4444
* @param Request $request
@@ -47,12 +47,13 @@ trait RequestTrait
4747
*/
4848
public function stateIsValid(Request $request): bool
4949
{
50-
$requestParams = $this->parseRequestParamsSingleton($request);
51-
if (!isset($requestParams['state'])) {
50+
// Parse the request parameters
51+
$this->parseRequestParamsSingleton($request);
52+
if (!isset($this->requestParams['state'])) {
5253
return false;
5354
}
5455
/** @var ?string $stateId */
55-
$stateId = $requestParams['state'];
56+
$stateId = $this->requestParams['state'];
5657
if (empty($stateId)) {
5758
return false;
5859
}
@@ -77,8 +78,7 @@ public function parseRequest(Request $request): void
7778
};
7879
throw new BadRequest($message);
7980
}
80-
$requestParams = $this->parseRequestParamsSingleton($request);
81-
$stateIdWithPrefix = (string)($requestParams['state'] ?? '');
81+
$stateIdWithPrefix = (string)($this->requestParams['state'] ?? '');
8282
$stateId = substr($stateIdWithPrefix, \strlen($this->expectedPrefix));
8383

8484
$this->state = $this->loadState($stateId, $this->expectedStageState);
@@ -119,15 +119,11 @@ public function loadState(string $id, string $stage, bool $allowMissing = false)
119119

120120
/**
121121
* @param Request $request
122-
*
123-
* @return array
124122
*/
125-
public function parseRequestParamsSingleton(Request $request): array
123+
public function parseRequestParamsSingleton(Request $request): void
126124
{
127-
if (!empty($this->requestParams)) {
128-
return $this->requestParams;
125+
if (empty($this->requestParams)) {
126+
$this->requestParams = RequestUtilities::getRequestParams($request);
129127
}
130-
131-
return RequestUtilities::getRequestParams($request);
132128
}
133129
}

src/Lib/RequestUtilities.php

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,10 @@
44

55
namespace SimpleSAML\Module\authoauth2\Lib;
66

7-
use Generator;
87
use Symfony\Component\HttpFoundation\Request;
98

109
class RequestUtilities
1110
{
12-
/**
13-
* @param Request $request
14-
*
15-
* @return Generator
16-
*/
17-
public static function parseRequestGenerator(Request $request): Generator
18-
{
19-
if ($request->isMethod('GET')) {
20-
foreach ($request->query->all() as $key => $value) {
21-
yield $key => $value;
22-
}
23-
} elseif ($request->isMethod('POST')) {
24-
foreach ($request->request->all() as $key => $value) {
25-
yield $key => $value;
26-
}
27-
} else {
28-
// If it is neither a GET or a POST then yield nothing
29-
yield;
30-
}
31-
}
32-
3311
/**
3412
* @param Request $request
3513
*

0 commit comments

Comments
 (0)