Skip to content

Commit 1877fb2

Browse files
committed
Add validation for missing client data in ServerController::register().
1 parent 30c9200 commit 1877fb2

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

solid/lib/Controller/ServerController.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,11 +393,17 @@ public function logout() {
393393
* @NoCSRFRequired
394394
*/
395395
public function register() {
396-
$clientData = file_get_contents('php://input');
397-
$clientData = json_decode($clientData, true);
396+
$postData = file_get_contents('php://input');
397+
$clientData = json_decode($postData, true);
398+
399+
if (! isset($clientData)) {
400+
return new JSONResponse('Missing client data', Http::STATUS_BAD_REQUEST);
401+
}
402+
398403
if (! isset($clientData['redirect_uris'])) {
399404
return new JSONResponse("Missing redirect URIs", Http::STATUS_BAD_REQUEST);
400405
}
406+
401407
$clientData['client_id_issued_at'] = time();
402408
$parsedOrigin = parse_url($clientData['redirect_uris'][0]);
403409
$origin = $parsedOrigin['scheme'] . '://' . $parsedOrigin['host'];

solid/tests/Unit/Controller/ServerControllerTest.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,12 +292,33 @@ public function testAuthorize()
292292
*
293293
* @covers ::register
294294
*/
295+
public function testRegisterWithoutClientData()
296+
{
297+
$parameters = $this->createMockConstructorParameters();
298+
299+
$controller = new ServerController(...array_values($parameters));
300+
301+
$actual = $controller->register();
302+
303+
$this->assertEquals(
304+
new JSONResponse('Missing client data', Http::STATUS_BAD_REQUEST),
305+
$actual
306+
);
307+
}
308+
309+
/**
310+
* @testdox ServerController should return a 400 when asked to register without redirect URIs
311+
*
312+
* @covers ::register
313+
*/
295314
public function testRegisterWithoutRedirectUris()
296315
{
297316
$parameters = $this->createMockConstructorParameters();
298317

299318
$controller = new ServerController(...array_values($parameters));
300319

320+
self::$clientData = json_encode([]);
321+
301322
$actual = $controller->register();
302323

303324
$this->assertEquals(

0 commit comments

Comments
 (0)