. // }}} /** * OAuth2 implementation for GNU social * * @package OAuth2 * @category API * * @author Diogo Peralta Cordeiro * @author Hugo Sales * @copyright 2022 Free Software Foundation, Inc http://www.fsf.org * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ namespace Plugin\OAuth2\Controller; use App\Core\Controller; use League\OAuth2\Server\Exception\OAuthServerException; use Nyholm\Psr7\Factory\Psr17Factory; use Plugin\OAuth2\OAuth2; use Psr\Http\Message\ResponseFactoryInterface; use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory; use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; class Token extends Controller { public function __construct( RequestStack $stack, private ResponseFactoryInterface $response_factory, ) { parent::__construct($stack); } public function __invoke(Request $request) { // @var \League\OAuth2\Server\AuthorizationServer $server $server = OAuth2::$authorization_server; $psr17factory = new Psr17Factory(); $psr_http_factory = new PsrHttpFactory($psr17factory, $psr17factory, $psr17factory, $psr17factory); $psr_request = $psr_http_factory->createRequest($request); $http_foundation_factory = new HttpFoundationFactory; $server_response = $this->response_factory->createResponse(); try { return $http_foundation_factory->createResponse($server->respondToAccessTokenRequest($psr_request, $server_response)); } catch (OAuthServerException $e) { return $http_foundation_factory->createResponse($e->generateHttpResponse($server_response)); } } }