Skip to content

Commit 5df5872

Browse files
committed
use more psr7, incorporated potherca's feedback.
added (non functional) token controller
1 parent 2d9b388 commit 5df5872

7 files changed

Lines changed: 76 additions & 34 deletions

File tree

src/Controller/AuthorizeController.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ final public function __invoke(ServerRequestInterface $request, array $args): Re
2121
$parser = new \Lcobucci\JWT\Parser();
2222

2323
try {
24-
$token = $parser->parse($_GET['request']);
24+
$token = $parser->parse($request->getQueryParams()['request']);
2525
$_SESSION["nonce"] = $token->getClaim('nonce');
2626
} catch(\Exception $e) {
27-
$_SESSION["nonce"] = $_GET['nonce'];
27+
$_SESSION["nonce"] = $request->getQueryParams()['nonce'];
2828
}
2929

30-
$getVars = $_GET;
30+
$getVars = $request->getQueryParams();
3131
if (!isset($getVars['grant_type'])) {
3232
$getVars['grant_type'] = 'implicit';
3333
}
@@ -58,7 +58,7 @@ final public function __invoke(ServerRequestInterface $request, array $args): Re
5858
$user = new \Pdsinterop\Solid\Auth\Entity\User();
5959
$user->setIdentifier($this->getProfilePage());
6060

61-
$request = \Laminas\Diactoros\ServerRequestFactory::fromGlobals($_SERVER, $getVars, $_POST, $_COOKIE, $_FILES);
61+
$request = $request->withQueryParams($getVars); // replace the request getVars with the morphed version;
6262
$response = new \Laminas\Diactoros\Response();
6363
$server = new \Pdsinterop\Solid\Auth\Server($this->authServerFactory, $this->authServerConfig, $response);
6464

src/Controller/CorsController.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ class CorsController extends ServerController
99
{
1010
final public function __invoke(ServerRequestInterface $request, array $args): ResponseInterface
1111
{
12-
$response = $this->getResponse();
13-
$response = $response->withHeader("Access-Control-Allow-Headers", "*");
14-
return $response;
12+
return $this->getResponse()->withHeader("Access-Control-Allow-Headers", "*");
1513
}
1614
}

src/Controller/HandleApprovalController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ class HandleApprovalController extends ServerController
1010
public function __invoke(ServerRequestInterface $request, array $args) : ResponseInterface
1111
{
1212
$clientId = $args['clientId'];
13-
$returnUrl = $_POST['returnUrl'];
14-
$approval = $_POST['approval'];
13+
$returnUrl = $request->getParsedBody()['returnUrl'];
14+
$approval = $request->getParsedBody()['approval'];
1515

1616
if ($approval == "allow") {
1717
$this->config->addAllowedClient($this->userId, $clientId);

src/Controller/LoginController.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ final public function __invoke(ServerRequestInterface $request, array $args): Re
1515
// var_dump($_SESSION);
1616
if (isset($_SESSION['userid'])) {
1717
$user = $_SESSION['userid'];
18-
if ($_GET['returnUrl']) {
18+
if ($request->getQueryParams()['returnUrl']) {
1919
$response = $response->withStatus(302, "Redirecting");
20-
$response = $response->withHeader("Location", $_GET['returnUrl']);
20+
$response = $response->withHeader("Location", $request->getQueryParams()['returnUrl']);
2121
return $response;
2222
}
2323
$response->getBody()->write("<h1>Already logged in as $user</h1>");
@@ -27,9 +27,9 @@ final public function __invoke(ServerRequestInterface $request, array $args): Re
2727
) {
2828
$user = $postBody['username'];
2929
$_SESSION['userid'] = $user;
30-
if ($_GET['returnUrl']) {
30+
if ($request->getQueryParams()['returnUrl']) {
3131
$response = $response->withStatus(302, "Redirecting");
32-
$response = $response->withHeader("Location", $_GET['returnUrl']);
32+
$response = $response->withHeader("Location", $request->getQueryParams()['returnUrl']);
3333
return $response;
3434
}
3535
$response->getBody()->write("<h1>Welcome $user</h1>\n");

src/Controller/ServerController.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public function __construct() {
2525
}
2626

2727
public function getOpenIdEndpoints() {
28+
// FIXME: would be better to base this on the available routes if possible.
2829
$this->baseUrl = "https://localhost/"; // FIXME: generate proper urls
2930
return [
3031
'issuer' => $this->baseUrl,
@@ -51,7 +52,7 @@ public function getKeys() {
5152
}
5253

5354
public function createAuthServerConfig() {
54-
$clientId = $_GET['client_id'];
55+
$clientId = $_GET['client_id']; // FIXME: No request object here to get the client Id from.
5556
$client = $this->getClient($clientId);
5657
$keys = $this->getKeys();
5758
try {
@@ -113,7 +114,7 @@ public function checkApproval($clientId) {
113114
}
114115

115116
public function getProfilePage() {
116-
return "https://localhost/profile/card#me";
117+
return $this->baseUrl . "profile/card#me"; // FIXME: would be better to base this on the available routes if possible.
117118
}
118119

119120
public function getResponseType() {

src/Controller/TokenController.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Pdsinterop\Solid\Controller;
4+
5+
use Psr\Http\Message\ResponseInterface;
6+
use Psr\Http\Message\ServerRequestInterface;
7+
use Laminas\Diactoros\Response\JsonResponse as JsonResponse;
8+
9+
class TokenController extends ServerController
10+
{
11+
final public function __invoke(ServerRequestInterface $request, array $args): ResponseInterface
12+
{
13+
$code = $_POST['code'];
14+
$clientId = $_POST['client_id'];
15+
$DPoP = $_SERVER['HTTP_DPOP'];
16+
17+
$parser = new \Lcobucci\JWT\Parser();
18+
try {
19+
$token = $parser->parse($DPoP);
20+
// var_dump($token);
21+
} catch(\Exception $e) {
22+
return $this->getResponse()->withStatus(409, "Invalid token");
23+
}
24+
25+
$registration = $this->config->getClientRegistration($clientId);
26+
$approval = $this->checkApproval($clientId);
27+
28+
if ($approval) {
29+
$response = new \Laminas\Diactoros\Response();
30+
$server = new \Pdsinterop\Solid\Auth\Server($this->authServerFactory, $this->authServerConfig, $response);
31+
$response = $server->respondToAccessTokenRequest($request);
32+
33+
// $response = $this->tokenGenerator->addIdTokenToResponse($response, $clientId, $this->getProfilePage(), $_SESSION['nonce'], $this->config->getPrivateKey());
34+
return $response;
35+
// $idToken = $this->tokenGenerator->generateIdToken($code, $clientId, $this->getProfilePage(), $_SESSION['nonce'], $this->config->getPrivateKey());
36+
// return new JsonResponse(array("token_type" => "DPoP", "id_token" => $idToken));
37+
}
38+
return new JsonResponse(array());
39+
}
40+
}

web/index.php

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,22 @@
1616
use League\Route\Http\Exception\NotFoundException;
1717
use League\Route\Router;
1818
use League\Route\Strategy\ApplicationStrategy;
19-
use Pdsinterop\Solid\Controller\LoginController;
20-
use Pdsinterop\Solid\Controller\LoginPageController;
19+
2120
use Pdsinterop\Solid\Controller\AddSlashToPathController;
21+
use Pdsinterop\Solid\Controller\AuthorizeController;
22+
use Pdsinterop\Solid\Controller\ApprovalController;
23+
use Pdsinterop\Solid\Controller\CorsController;
24+
use Pdsinterop\Solid\Controller\HandleApprovalController;
2225
use Pdsinterop\Solid\Controller\HelloWorldController;
2326
use Pdsinterop\Solid\Controller\HttpToHttpsController;
27+
use Pdsinterop\Solid\Controller\JwksController;
28+
use Pdsinterop\Solid\Controller\LoginController;
29+
use Pdsinterop\Solid\Controller\LoginPageController;
30+
use Pdsinterop\Solid\Controller\OpenidController;
2431
use Pdsinterop\Solid\Controller\Profile\CardController;
2532
use Pdsinterop\Solid\Controller\Profile\ProfileController;
26-
use Pdsinterop\Solid\Controller\OpenidController;
27-
use Pdsinterop\Solid\Controller\JwksController;
28-
use Pdsinterop\Solid\Controller\CorsController;
2933
use Pdsinterop\Solid\Controller\RegisterController;
30-
use Pdsinterop\Solid\Controller\AuthorizeController;
31-
use Pdsinterop\Solid\Controller\ApprovalController;
32-
use Pdsinterop\Solid\Controller\HandleApprovalController;
34+
use Pdsinterop\Solid\Controller\TokenController;
3335

3436
use Psr\Http\Message\ResponseInterface;
3537
use Psr\Http\Message\ServerRequestInterface;
@@ -79,20 +81,21 @@
7981
});
8082

8183
$controllers = [
82-
LoginController::class,
83-
LoginPageController::class,
8484
AddSlashToPathController::class,
85+
ApprovalController::class,
86+
AuthorizeController::class,
8587
CardController::class,
88+
CorsController::class,
89+
HandleApprovalController::class,
8690
HelloWorldController::class,
8791
HttpToHttpsController::class,
88-
ProfileController::class,
89-
OpenidController::class,
9092
JwksController::class,
91-
CorsController::class,
93+
LoginController::class,
94+
LoginPageController::class,
95+
OpenidController::class,
96+
ProfileController::class,
9297
RegisterController::class,
93-
AuthorizeController::class,
94-
ApprovalController::class,
95-
HandleApprovalController::class,
98+
TokenController::class,
9699
];
97100

98101
$traits = [
@@ -129,14 +132,12 @@
129132

130133
$router->map('GET', '/', HelloWorldController::class)->setScheme($scheme);
131134

132-
$OpenidController = new OpenidController();
133-
134135
/*/ Create URI groups /*/
135136
$router->map('GET', '/.well-known/openid-configuration', OpenidController::class)->setScheme($scheme);
136137
$router->map('GET', '/jwks', JwksController::class)->setScheme($scheme);
137138
$router->map('GET', '/login/', LoginPageController::class)->setScheme($scheme);
138139
$router->map('POST', '/login/', LoginController::class)->setScheme($scheme);
139-
$router->map('OPTIONS', '/register', CorsController::class)->setScheme($scheme);
140+
$router->map('OPTIONS', '/{path}', CorsController::class)->setScheme($scheme);
140141
$router->map('POST', '/register', RegisterController::class)->setScheme($scheme);
141142
$router->map('GET', '/profile', AddSlashToPathController::class)->setScheme($scheme);
142143
$router->map('GET', '/profile/', ProfileController::class)->setScheme($scheme);
@@ -145,6 +146,8 @@
145146
$router->map('GET', '/authorize', AuthorizeController::class)->setScheme($scheme);
146147
$router->map('GET', '/sharing/{clientId}/', ApprovalController::class)->setScheme($scheme);
147148
$router->map('POST', '/sharing/{clientId}/', HandleApprovalController::class)->setScheme($scheme);
149+
$router->map('POST', '/token', TokenController::class)->setScheme($scheme);
150+
$router->map('POST', '/token/', TokenController::class)->setScheme($scheme);
148151

149152
try {
150153
$response = $router->dispatch($request);

0 commit comments

Comments
 (0)