Viewing File: /usr/local/cpanel/whostmgr/docroot/cgi/ncssl/source/src/Service/OAuth/Provider.php
<?php
namespace App\Service\OAuth;
use App\Model\NamecheapUser;
use League\OAuth2\Client\Provider\AbstractProvider;
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
use League\OAuth2\Client\Token\AccessToken;
use League\OAuth2\Client\Token\AccessTokenInterface;
use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
use Psr\Http\Message\ResponseInterface;
class Provider extends AbstractProvider
{
use BearerAuthorizationTrait;
public const SESSION_LAST_TAB_PARAMETER = 'SESSION_LAST_TAB_PARAMETER';
private const OAUTH2_CALLBACK_URL_PATTERN = '%s%s%s%s?%s%s';
public const SESSION_REDIRECT_PARAMETER = 'r';
public string $replacedRedirectUri;
public string $authHost;
public function getBaseAuthorizationUrl(): string
{
return $this->authHost . '/connect/authorize';
}
public function getBaseAccessTokenUrl(array $params = []): string
{
return $this->authHost . '/connect/token';
}
public function getResourceOwnerDetailsUrl(AccessToken $token): string
{
return $this->authHost . '/connect/userinfo';
}
public function getDefaultScopes(): array
{
return ['openid', 'email', 'profile', 'offline_access'];
}
public function getAccessToken($grant, array $options = []): AccessTokenInterface
{
$this->setRedirectUri();
return parent::getAccessToken($grant, $options); // TODO: Change the autogenerated stub
}
private function setRedirectUri(array $options = []): void
{
if (PHP_SAPI != 'cli') {
$this->redirectUri = self::prepareOAuth2CallbackUrl($this->replacedRedirectUri, [
'p' => 'oauth/callback',
'r' => 'lists.created',
]);
}
}
public function getAuthorizationUrl(array $options = []): string
{
$this->setRedirectUri($options);
return parent::getAuthorizationUrl($options);
}
private static function prepareOAuth2CallbackUrl(string $proxyPageUrlRedirect, array $params = []): string
{
$lastTab = !empty($_COOKIE[self::SESSION_LAST_TAB_PARAMETER]) ?
sprintf('&%s=%s', self::SESSION_REDIRECT_PARAMETER, $_COOKIE[self::SESSION_LAST_TAB_PARAMETER]) :
'';
return $proxyPageUrlRedirect . urlencode(sprintf(static::OAUTH2_CALLBACK_URL_PATTERN,
empty($_SERVER['HTTPS']) ? 'http://' : 'https://',
empty($_SERVER['HTTP_HOST']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST'],
!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443 ? ':' . $_SERVER['SERVER_PORT'] : '',
$_SERVER['SCRIPT_NAME'],
http_build_query($params),
$lastTab
));
}
protected function getScopeSeparator(): string
{
return ' ';
}
protected function checkResponse(ResponseInterface $response, $data): bool
{
if ($response->getReasonPhrase() == 'OK') {
return true;
}
throw new IdentityProviderException($response->getReasonPhrase(), $response->getStatusCode(), $response);
}
protected function createResourceOwner(array $response, AccessToken $token): NamecheapUser
{
return new NamecheapUser($response, $token);
}
}
Back to Directory
File Manager