<?php
namespace Laravel\Passport\Http\Controllers;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
class DenyAuthorizationController
{
use RetrievesAuthRequestFromSession;
/**
* The response factory implementation.
*
* @var \Illuminate\Contracts\Routing\ResponseFactory
*/
protected $response;
/**
* Create a new controller instance.
*
* @param \Illuminate\Contracts\Routing\ResponseFactory $response
* @return void
*/
public function __construct(ResponseFactory $response)
{
$this->response = $response;
}
/**
* Deny the authorization request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function deny(Request $request)
{
$this->assertValidAuthToken($request);
$authRequest = $this->getAuthRequestFromSession($request);
$clientUris = Arr::wrap($authRequest->getClient()->getRedirectUri());
if (! in_array($uri = $authRequest->getRedirectUri(), $clientUris)) {
$uri = Arr::first($clientUris);
}
$separator = $authRequest->getGrantTypeId() === 'implicit' ? '#' : (strstr($uri, '?') ? '&' : '?');
return $this->response->redirectTo(
$uri.$separator.'error=access_denied&state='.$request->input('state')
);
}
}