mirror of
				https://github.com/elyby/accounts.git
				synced 2025-05-31 14:11:46 +05:30 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace api\components\OAuth2;
 | 
						|
 | 
						|
use Carbon\CarbonInterval;
 | 
						|
use DateInterval;
 | 
						|
use League\OAuth2\Server\AuthorizationServer;
 | 
						|
use yii\base\Component as BaseComponent;
 | 
						|
 | 
						|
class Component extends BaseComponent {
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var AuthorizationServer
 | 
						|
     */
 | 
						|
    private $_authServer;
 | 
						|
 | 
						|
    public function getAuthServer(): AuthorizationServer {
 | 
						|
        if ($this->_authServer === null) {
 | 
						|
            $this->_authServer = $this->createAuthServer();
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->_authServer;
 | 
						|
    }
 | 
						|
 | 
						|
    private function createAuthServer(): AuthorizationServer {
 | 
						|
        $clientsRepo = new Repositories\ClientRepository();
 | 
						|
        $accessTokensRepo = new Repositories\AccessTokenRepository();
 | 
						|
        $publicScopesRepo = new Repositories\PublicScopeRepository();
 | 
						|
        $internalScopesRepo = new Repositories\InternalScopeRepository();
 | 
						|
        $authCodesRepo = new Repositories\AuthCodeRepository();
 | 
						|
        $refreshTokensRepo = new Repositories\RefreshTokenRepository();
 | 
						|
 | 
						|
        $accessTokenTTL = CarbonInterval::create(-1); // Set negative value to make tokens non expiring
 | 
						|
 | 
						|
        $authServer = new AuthorizationServer(
 | 
						|
            $clientsRepo,
 | 
						|
            $accessTokensRepo,
 | 
						|
            new Repositories\EmptyScopeRepository(),
 | 
						|
            new Keys\EmptyKey(),
 | 
						|
            '', // Omit the key because we use our own encryption mechanism
 | 
						|
            new ResponseTypes\BearerTokenResponse()
 | 
						|
        );
 | 
						|
        /** @noinspection PhpUnhandledExceptionInspection */
 | 
						|
        $authCodeGrant = new Grants\AuthCodeGrant($authCodesRepo, $refreshTokensRepo, new DateInterval('PT10M'));
 | 
						|
        $authCodeGrant->disableRequireCodeChallengeForPublicClients();
 | 
						|
        $authServer->enableGrantType($authCodeGrant, $accessTokenTTL);
 | 
						|
        $authCodeGrant->setScopeRepository($publicScopesRepo); // Change repository after enabling
 | 
						|
 | 
						|
        $refreshTokenGrant = new Grants\RefreshTokenGrant($refreshTokensRepo);
 | 
						|
        $authServer->enableGrantType($refreshTokenGrant, $accessTokenTTL);
 | 
						|
        $refreshTokenGrant->setScopeRepository($publicScopesRepo); // Change repository after enabling
 | 
						|
 | 
						|
        $clientCredentialsGrant = new Grants\ClientCredentialsGrant();
 | 
						|
        $authServer->enableGrantType($clientCredentialsGrant, $accessTokenTTL);
 | 
						|
        $clientCredentialsGrant->setScopeRepository($internalScopesRepo); // Change repository after enabling
 | 
						|
 | 
						|
        return $authServer;
 | 
						|
    }
 | 
						|
 | 
						|
}
 |