2 Commits
2.0.5 ... 2.0.7

Author SHA1 Message Date
792abd4aa9 php stan 2024-06-13 21:29:14 +03:00
cf02afe845 UPD 2024-05-30 15:46:56 +03:00
4 changed files with 54 additions and 89 deletions

View File

@@ -1,16 +1,16 @@
# Vkontakte OAuth2 client provider # Vkontakte OAuth2 client provider
This package provides [Vkontakte](https://vk.com) integration for [OAuth2 Client](https://github.com/thephpleague/oauth2-client) by the League. This package provides [VK](https://vk.com) integration for [OAuth2 Client](https://github.com/thephpleague/oauth2-client) by the League.
## Installation ## Installation
```sh ```sh
composer require Sept/oauth2-vkontakte composer require 1sept/oauth2-vkontakte
``` ```
## Configuration ## Configuration
```php ```php
$provider = new Sept\OAuth2\Client\Provider\Vkontakte([ $provider = new Sept\OAuth2\Client\Provider\VkProvider([
'clientId' => '1234567', 'clientId' => '1234567',
'clientSecret' => 's0meRe4lLySEcRetC0De', 'clientSecret' => 's0meRe4lLySEcRetC0De',
'redirectUri' => 'https://example.org/oauth-endpoint', 'redirectUri' => 'https://example.org/oauth-endpoint',

View File

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

View File

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

View File

@@ -3,7 +3,7 @@
namespace Sept\OAuth2\Client\Test\Provider; namespace Sept\OAuth2\Client\Test\Provider;
use GuzzleHttp\Psr7\Response; use GuzzleHttp\Psr7\Response;
use Sept\OAuth2\Client\Provider\Vkontakte as Provider; use Sept\OAuth2\Client\Provider\VkProvider as Provider;
use League\OAuth2\Client\Provider\Exception\IdentityProviderException; use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
use League\OAuth2\Client\Token\AccessToken; use League\OAuth2\Client\Token\AccessToken;
use Mockery as m; use Mockery as m;