You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							71 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							71 lines
						
					
					
						
							1.8 KiB
						
					
					
				<?php | 
						|
 | 
						|
namespace common\auth; | 
						|
 | 
						|
use filsh\yii2\oauth2server\Module; | 
						|
use OAuth2\Storage\UserCredentialsInterface; | 
						|
use core\entities\user\User; | 
						|
use core\repositories\user\read\UserReadRepository; | 
						|
use Yii; | 
						|
use yii\web\IdentityInterface; | 
						|
 | 
						|
class Identity implements IdentityInterface, UserCredentialsInterface | 
						|
{ | 
						|
    public $user; | 
						|
 | 
						|
    public function __construct(User $user) | 
						|
    { | 
						|
        $this->user = $user; | 
						|
    } | 
						|
 | 
						|
    public static function findIdentity($id) | 
						|
    { | 
						|
        $user = self::getRepository()->findActiveById($id); | 
						|
        return $user ? new self($user): null; | 
						|
    } | 
						|
 | 
						|
    public static function findIdentityByAccessToken($token, $type = null) | 
						|
    { | 
						|
        $data = self::getOauth()->getServer()->getResourceController()->getToken(); | 
						|
        return !empty($data['user_id']) ? static::findIdentity($data['user_id']) : null; | 
						|
    } | 
						|
 | 
						|
    public function getId(): int | 
						|
    { | 
						|
        return $this->user->id; | 
						|
    } | 
						|
 | 
						|
    public function getAuthKey(): string | 
						|
    { | 
						|
        return $this->user->auth_key; | 
						|
    } | 
						|
 | 
						|
    public function validateAuthKey($authKey): bool | 
						|
    { | 
						|
        return $this->getAuthKey() === $authKey; | 
						|
    } | 
						|
 | 
						|
    public function checkUserCredentials($username, $password): bool | 
						|
    { | 
						|
        if (!$user = self::getRepository()->findActiveByUsername($username)) { | 
						|
            return false; | 
						|
        } | 
						|
        return $user->validatePassword($password); | 
						|
    } | 
						|
 | 
						|
    public function getUserDetails($username): array | 
						|
    { | 
						|
        $user = self::getRepository()->findActiveByUsername($username); | 
						|
        return ['user_id' => $user->id]; | 
						|
    } | 
						|
 | 
						|
    private static function getRepository(): UserReadRepository | 
						|
    { | 
						|
        return \Yii::$container->get(UserReadRepository::class); | 
						|
    } | 
						|
 | 
						|
    private static function getOauth(): Module | 
						|
    { | 
						|
        return Yii::$app->getModule('oauth2'); | 
						|
    } | 
						|
} |