This commit is contained in:
2024-06-13 21:29:14 +03:00
parent cf02afe845
commit 792abd4aa9
2 changed files with 50 additions and 85 deletions

View File

@@ -15,10 +15,9 @@ class VkProvider extends AbstractProvider
protected $language = null;
/**
* @type array
* @see https://vk.com/dev/permissions
*/
public $scopes = [
public array $scopes = [
'email',
// 'friends',
// 'offline',
@@ -43,7 +42,7 @@ class VkProvider extends AbstractProvider
* @type array
* @see https://new.vk.com/dev/fields
*/
public $userFields = [
public array $userFields = [
'bdate',
'city',
'country',
@@ -115,22 +114,24 @@ class VkProvider extends AbstractProvider
/**
* @param string $language
*/
public function setLanguage($language)
public function setLanguage(string $language): self
{
$this->language = (string)$language;
return $this;
}
public function getBaseAuthorizationUrl()
public function getBaseAuthorizationUrl(): string
{
return "$this->baseOAuthUri/authorize";
}
public function getBaseAccessTokenUrl(array $params)
public function getBaseAccessTokenUrl(array $params): string
{
return "$this->baseOAuthUri/access_token";
}
public function getResourceOwnerDetailsUrl(AccessToken $token)
public function getResourceOwnerDetailsUrl(AccessToken $token): string
{
$params = [
'fields' => $this->userFields,
@@ -147,7 +148,7 @@ class VkProvider extends AbstractProvider
{
return $this->scopes;
}
protected function checkResponse(ResponseInterface $response, $data)
protected function checkResponse(ResponseInterface $response, $data): void
{
// Metadata info
$contentTypeRaw = $response->getHeader('Content-Type');
@@ -176,7 +177,7 @@ class VkProvider extends AbstractProvider
throw new IdentityProviderException($errorMessage, $errorCode, $data);
}
}
protected function createResourceOwner(array $response, AccessToken $token)
protected function createResourceOwner(array $response, AccessToken $token): VkUser
{
$response = reset($response['response']);
$additional = $token->getValues();
@@ -202,7 +203,7 @@ class VkProvider extends AbstractProvider
*
* @return User[]
*/
public function usersGet(array $ids = [], AccessToken $token = null, array $params = [])
public function usersGet(array $ids = [], AccessToken $token = null, array $params = []): array
{
if (empty($ids) && !$token) {
throw new \InvalidArgumentException('Some of parameters usersIds OR access_token are required');
@@ -236,7 +237,7 @@ class VkProvider extends AbstractProvider
*
* @return User[]
*/
public function friendsGet($userId, AccessToken $token = null, array $params = [])
public function friendsGet($userId, AccessToken $token = null, array $params = []): array
{
$default = [
'user_id' => $userId,

View File

@@ -6,8 +6,6 @@ use League\OAuth2\Client\Provider\ResourceOwnerInterface;
/**
* @see https://vk.com/dev/fields
*
* @package Sept\OAuth2\Client\Provider
*/
class VkUser implements ResourceOwnerInterface
{
@@ -18,36 +16,26 @@ class VkUser implements ResourceOwnerInterface
/**
* User constructor.
*
* @param array $response
*/
public function __construct(array $response)
{
$this->response = $response;
}
/**
* @return array
*/
public function toArray()
public function toArray(): array
{
return $this->response;
}
/**
* @return integer
*/
public function getId()
public function getId(): int
{
return (int)($this->getField('uid') ?: $this->getField('id'));
}
/**
* Helper for getting user data
*
* @param string $key
*
* @return mixed|null
*/
protected function getField($key)
protected function getField(string $key): mixed|null
{
return !empty($this->response[$key]) ? $this->response[$key] : null;
}
@@ -55,132 +43,108 @@ class VkUser implements ResourceOwnerInterface
/**
* @return string|null DD.MM.YYYY
*/
public function getBirthday()
public function getBirthday():string
{
return $this->getField('bdate');
}
/**
* @return array [id =>, title => string]
*/
public function getCity()
public function getCity(): array
{
return $this->getField('city');
}
/**
* @return array [id =>, title => string]
*/
public function getCountry()
public function getCountry(): array
{
return $this->getField('country');
}
/**
* Short address to user page
*
* @return string
*/
public function getDomain()
public function getDomain(): string
{
return $this->getField('domain');
}
/**
* @return string
*/
public function getFirstName()
public function getFirstName(): string
{
return $this->getField('first_name');
}
/**
* @return int 0|1|2|3 => nobody|resquest_sent|incoming_request|friends
*/
public function getFriendStatus()
public function getFriendStatus(): int
{
return $this->getField('friend_Status');
}
/**
* Has user avatar?
*
* @return bool
*/
public function isHasPhoto()
public function isHasPhoto(): bool
{
return (bool)$this->getField('has_photo');
}
/**
* @return string
*/
public function getHomeTown()
public function getHomeTown(): string
{
return $this->getField('home_town');
}
/**
* Detect if current user is freind to this
*
* @return bool
*/
public function isFriend()
public function isFriend(): bool
{
return (bool)$this->getField('is_friend');
}
/**
* @return string
*/
public function getLastName()
public function getLastName(): string
{
return $this->getField('last_name');
}
/**
* @return string
*/
public function getMaidenName()
public function getMaidenName(): string
{
return $this->getField('maiden_name');
}
/**
* @return string
*/
public function getNickname()
public function getNickname(): string
{
return $this->getField('nickname');
}
/**
* It's square!
*
* @return string URL
*/
public function getPhotoMax()
public function getPhotoMax():string
{
return $this->getField('photo_max');
}
/**
* Any sizes
*
* @return string URL
*/
public function getPhotoMaxOrig()
public function getPhotoMaxOrig(): string
{
return $this->getField('photo_max_orig');
}
/**
* @return string
*/
public function getScreenName()
public function getScreenName(): string
{
return $this->getField('screen_name');
}
/**
* @return int 1|2 => woman|man
*/
public function getSex()
public function getSex(): int
{
return $this->getField('sex');
}
/**
* @return string
*/
public function getEmail()
public function getEmail(): string
{
return $this->getField('email');
}
}
}