Skip to content

Commit

Permalink
test commit
Browse files Browse the repository at this point in the history
  • Loading branch information
vitr-nindeco committed Nov 13, 2020
1 parent 295b29e commit 8d0b7b0
Showing 1 changed file with 93 additions and 14 deletions.
107 changes: 93 additions & 14 deletions src/OAuth2/Provider/Sberbank.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,40 +4,53 @@

namespace SocialConnect\OAuth2\Provider;

use Psr\Http\Message\RequestInterface;
use SocialConnect\Common\ArrayHydrator;
use SocialConnect\Provider\AccessTokenInterface;
use SocialConnect\Common\Entity\User;

/**
* Class Sberbank
* @author vitr tretyak
* @package SocialConnect\OAuth2\Provider
*/
class Sberbank extends \SocialConnect\OAuth2\AbstractProvider {
const NAME = 'sber';

/**
* {@inheritdoc}
*/
protected $requestHttpMethod = 'GET';
protected $requestHttpMethod = 'POST';

/**
* Vk returns email inside AccessToken
*
* @var string|null
* @var array
*/
protected $email;
public $additionalHeaders;

public function getBaseUri()
{
return '';
return 'https://dev.api.sberbank.ru';
}

/**
* {@inheritDoc}
*/
public function getAuthorizeUri()
{
return '';
return 'https://online.sberbank.ru/CSAFront/oidc/sberbank_id/authorize.do';
}

/**
* {@inheritDoc}
*/
public function getRequestTokenUri()
{
return '';
return 'https://dev.api.sberbank.ru/ru/prod/tokens/v2/oidc';
}

/**
* {@inheritDoc}
*/
public function getName()
{
return self::NAME;
Expand All @@ -51,23 +64,78 @@ public function prepareRequest(string $method, string $uri, array &$headers, arr
if ($accessToken) {
$query['access_token'] = $accessToken->getToken();
}

if (!empty($this->additionalHeaders)) {
$headers = array_merge($headers, $this->additionalHeaders);
}
}

/**
* {@inheritDoc}
*/
protected function makeAccessTokenRequest(string $code): RequestInterface
{
$parameters = [
'client_id' => $this->consumer->getKey(),
'client_secret' => $this->consumer->getSecret(),
'code' => $code,
'grant_type' => 'authorization_code',
'redirect_uri' => $this->getRedirectUrl(),
// 'scope' => 'openid, email, name',
'scope' => 'name',
];

return $this->httpStack->createRequest($this->requestHttpMethod, $this->getRequestTokenUri())
->withHeader('accept', 'application/json')
->withHeader('Content-Type', 'application/x-www-form-urlencoded')
->withHeader('x-ibm-client-id', $this->consumer->getKey())
->withHeader('rquid', $this->getRquid())
->withBody($this->httpStack->createStream(http_build_query($parameters, '', '&')));
}

/**
* {@inheritdoc}
*/
public function getIdentity(AccessTokenInterface $accessToken)
{
$query = [
'v' => '5.100'
];
$query = [];

$fields = $this->getArrayOption('identity.fields', []);
if ($fields) {
if ($fields = $this->getArrayOption('identity.fields', [])) {
$query['fields'] = implode(',', $fields);
}

$response = $this->request('GET', 'method/users.get', $query, $accessToken);
$this->additionalHeaders = [
'accept' => 'application/json',
'x-ibm-client-id' => $this->consumer->getKey(),
'x-introspect-rquid' => $this->getRquid(),
// 'authorization' => 'Bearer ' . $accessToken->getToken(),
];


// $curl = curl_init();
//
// curl_setopt_array($curl, array(
// CURLOPT_URL => 'https://dev.api.sberbank.ru/ru/prod/sberbankid/v2.1/userinfo',
// CURLOPT_RETURNTRANSFER => true,
// CURLOPT_ENCODING => "",
// CURLOPT_MAXREDIRS => 10,
// CURLOPT_TIMEOUT => 30,
// CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
// CURLOPT_CUSTOMREQUEST => "GET",
// CURLOPT_HTTPHEADER => array(
// "accept: application/json",
// "authorization: Bearer ". $accessToken->getToken(),
// "x-ibm-client-id: ".$this->consumer->getKey(),
// "x-introspect-rquid: ". $this->getRquid()
// ),
// ));
//
// $response = curl_exec($curl);
// $err = curl_error($curl);
//
// curl_close($curl);

$response = $this->request('GET', '/ru/prod/sberbankid/v2.1/userinfo', [], $accessToken);

$hydrator = new ArrayHydrator([
'id' => 'id',
Expand All @@ -94,4 +162,15 @@ public function getIdentity(AccessTokenInterface $accessToken)

return $user;
}

/**
* @param string|null $str
*
* @return string
* @throws \Exception
*/
public function getRquid(string $str = null): string
{
return md5($str ? $str : ($this->consumer->getKey() . microtime() . random_bytes(10)));
}
}

0 comments on commit 8d0b7b0

Please sign in to comment.