-
-
Save deividaspetraitis/7c3958381d33a06b511d17e2e22b8bb5 to your computer and use it in GitHub Desktop.
AccessTokenController
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php namespace Modules\OAuth2\Http\Controllers; | |
use GuzzleHttp\Psr7\ServerRequest; | |
use Illuminate\Http\Response; | |
use Laravel\Passport\Http\Controllers\HandlesOAuthErrors; | |
use Laravel\Passport\TokenRepository; | |
use Lcobucci\JWT\Parser as JwtParser; | |
use Modules\OAuth2\Http\Requests\AccessTokenOAuth2Request; | |
use Modules\OAuth2\Serializers\AccessTokenSerializer; | |
use Tobscure\JsonApi\Document; | |
use Tobscure\JsonApi\Resource; | |
use Zend\Diactoros\Response as Psr7Response; | |
use League\OAuth2\Server\AuthorizationServer; | |
class AccessTokenController | |
{ | |
use HandlesOAuthErrors; | |
/** | |
* The authorization server. | |
* | |
* @var AuthorizationServer | |
*/ | |
protected $server; | |
/** | |
* The token repository instance. | |
* | |
* @var TokenRepository | |
*/ | |
protected $tokens; | |
/** | |
* The JWT parser instance. | |
* | |
* @var JwtParser | |
*/ | |
protected $jwt; | |
/** | |
* Create a new controller instance. | |
* | |
* @param AuthorizationServer $server | |
* @param TokenRepository $tokens | |
* @param JwtParser $jwt | |
* @return void | |
*/ | |
public function __construct(AuthorizationServer $server, | |
TokenRepository $tokens, | |
JwtParser $jwt) | |
{ | |
$this->jwt = $jwt; | |
$this->server = $server; | |
$this->tokens = $tokens; | |
} | |
/** | |
* Authorize a client to access the user's account. | |
* | |
* @param AccessTokenOAuth2Request $request | |
* | |
* @return Response | |
*/ | |
public function issueToken(AccessTokenOAuth2Request $request) | |
{ | |
$data = $request->request->get('data'); | |
$serverRequest = new ServerRequest( | |
$request->getMethod(), | |
$request->getUri(), | |
$request->headers->all() | |
); | |
$serverRequest = $serverRequest->withParsedBody([ | |
'grant_type' => $data["attributes"]["grant_type"], | |
'client_id' => $data["attributes"]["client_id"], | |
'client_secret' => $data["attributes"]["client_secret"], | |
'username' => $data["attributes"]["username"], | |
'password' => $data["attributes"]["password"], | |
'scope' => '', | |
]); | |
$response = $this->server->respondToAccessTokenRequest($serverRequest, new Psr7Response) | |
-> getBody() | |
-> __toString(); | |
$resource = (new Resource (json_decode($response, true), new AccessTokenSerializer)); | |
$document = new Document($resource); | |
return response()-> json( $document ) | |
-> header('Accept', 'application/vnd.api+json', true) | |
-> header('Content-Type', 'application/vnd.api+json', true); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment