From d41e1790c580c355f6ce50a59ef903a9a3c08f3c Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Mon, 20 Jan 2020 09:39:01 +0530 Subject: [PATCH 1/2] feat: added Yandex OAuth Adapter --- app/config/providers.php | 6 ++ src/Auth/OAuth/Yandex.php | 150 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 src/Auth/OAuth/Yandex.php diff --git a/app/config/providers.php b/app/config/providers.php index 3b5661790..c6bc9b203 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -115,6 +115,12 @@ return [ 'enabled' => true, 'mock' => false, ], + 'yandex' => [ + 'developers' => 'https://tech.yandex.com/oauth/', + 'icon' => 'icon-yandex', + 'enabled' => true, + 'mock' => false, + ], 'twitter' => [ 'developers' => 'https://developer.twitter.com/', 'icon' => 'icon-twitter', diff --git a/src/Auth/OAuth/Yandex.php b/src/Auth/OAuth/Yandex.php new file mode 100644 index 000000000..bcd7ec1a8 --- /dev/null +++ b/src/Auth/OAuth/Yandex.php @@ -0,0 +1,150 @@ + 'code', + 'client_id' => $this->appID, + 'scope'=> implode(' ', $this->getScopes()), + 'state' => json_encode($this->state) + ]); + } + + /** + * @param string $code + * + * @return string + */ + public function getAccessToken(string $code): string + { + $headers = [ + "Authorization: Basic " . base64_encode($this->appID . ":" . $this->appSecret), + "Content-Type: application/x-www-form-urlencoded", + ]; + + $accessToken = $this->request( + 'POST', + 'https://oauth.yandex.com/token', + $headers, + http_build_query([ + 'code' => $code, + 'grant_type' => 'authorization_code' + ]) + ); + $accessToken = json_decode($accessToken, true); + + if (isset($accessToken['access_token'])) { + return $accessToken['access_token']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserID(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['id'])) { + return $user['id']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['default_email'])) { + return $user['default_email']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserName(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['display_name'])) { + return $user['display_name']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return array + */ + protected function getUser(string $accessToken): array + { + if (empty($this->user)) { + $user = $this->request('GET', 'https://login.yandex.ru/info?'.http_build_query([ + 'format' => 'json', + 'oauth_token' => $accessToken + ])); + $this->user = json_decode($user, true); + } + return $this->user; + } +} From 82c60b318d18b42197d7b0e22483c158a48bd111 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Mon, 20 Jan 2020 10:23:29 +0530 Subject: [PATCH 2/2] added yandex logo --- public/images/oauth/yandex.png | Bin 0 -> 3265 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/images/oauth/yandex.png diff --git a/public/images/oauth/yandex.png b/public/images/oauth/yandex.png new file mode 100644 index 0000000000000000000000000000000000000000..cd47db8b36b108bace060e61c1422090407235b5 GIT binary patch literal 3265 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 literal 0 HcmV?d00001