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'); | |
|     } | |
| } |