Squashed commit of the following: commit 74ed84617fcbecf661695763323e50d049a88db7 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:46:29 2018 +0000 Test passes so remove the dump statement commit a7d3323be02da64f76e8ec88713e3de84a13ded7 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:40:35 2018 +0000 Values with spaces need to be quoted commit 58a120bb238f14346793c388b948b7351d3b51fd Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:37:23 2018 +0000 We need a diplay name for the tests to work now we are using strict type checking commit b46f177053bd697db9a4835d073f2f37e088b26f Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:31:29 2018 +0000 Get travis to show more info about failing test commit 60323f3ce5a0561329a1721ee94821571cdcc86a Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:23:27 2018 +0000 Remove un-used namnepsace imports commit 096d3505920bc94ff8677c77430eca0aae0be58a Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:21:55 2018 +0000 we need php7.2 for object type-hint commit bb818bc19c73d02d510af9f002199f5718a54608 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:15:48 2018 +0000 Added lots of strict_types
78 lines
2.2 KiB
PHP
78 lines
2.2 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace App\Http\Controllers;
|
||
|
||
use IndieAuth\Client;
|
||
use Illuminate\Http\Response;
|
||
use App\Services\TokenService;
|
||
|
||
class TokenEndpointController extends Controller
|
||
{
|
||
/**
|
||
* The IndieAuth Client.
|
||
*/
|
||
protected $client;
|
||
|
||
/**
|
||
* The Token handling service.
|
||
*/
|
||
protected $tokenService;
|
||
|
||
/**
|
||
* Inject the dependencies.
|
||
*
|
||
* @param \IndieAuth\Client $client
|
||
* @param \App\Services\TokenService $tokenService
|
||
*/
|
||
public function __construct(
|
||
Client $client,
|
||
TokenService $tokenService
|
||
) {
|
||
$this->client = $client;
|
||
$this->tokenService = $tokenService;
|
||
}
|
||
|
||
/**
|
||
* If the user has auth’d via the IndieAuth protocol, issue a valid token.
|
||
*
|
||
* @return \Illuminate\Http\Response
|
||
*/
|
||
public function create(): Response
|
||
{
|
||
$authorizationEndpoint = $this->client->discoverAuthorizationEndpoint(normalize_url(request()->input('me')));
|
||
if ($authorizationEndpoint) {
|
||
$auth = $this->client->verifyIndieAuthCode(
|
||
$authorizationEndpoint,
|
||
request()->input('code'),
|
||
request()->input('me'),
|
||
request()->input('redirect_uri'),
|
||
request()->input('client_id')
|
||
);
|
||
if (array_key_exists('me', $auth)) {
|
||
$scope = $auth['scope'] ?? '';
|
||
$tokenData = [
|
||
'me' => request()->input('me'),
|
||
'client_id' => request()->input('client_id'),
|
||
'scope' => $scope,
|
||
];
|
||
$token = $this->tokenService->getNewToken($tokenData);
|
||
$content = http_build_query([
|
||
'me' => request()->input('me'),
|
||
'scope' => $scope,
|
||
'access_token' => $token,
|
||
]);
|
||
|
||
return response($content)->header(
|
||
'Content-Type',
|
||
'application/x-www-form-urlencoded'
|
||
);
|
||
}
|
||
|
||
return response('There was an error verifying the authorisation code.', 400);
|
||
}
|
||
|
||
return response('Can’t determine the authorisation endpoint.', 400);
|
||
}
|
||
}
|