Skip to content

Instantly share code, notes, and snippets.

@deividaspetraitis
Created April 4, 2017 21:56
Show Gist options
  • Save deividaspetraitis/7c3958381d33a06b511d17e2e22b8bb5 to your computer and use it in GitHub Desktop.
Save deividaspetraitis/7c3958381d33a06b511d17e2e22b8bb5 to your computer and use it in GitHub Desktop.
AccessTokenController
<?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