From ba7db4b80b9fc04d31566c692922ec452c749a0c Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 19:09:40 +0530 Subject: [PATCH] feat: started Dropbox OAuth Support --- app/config/providers.php | 6 +- public/images/oauth/dropbox.png | Bin 0 -> 2814 bytes src/Auth/OAuth/Dropbox.php | 132 ++++++++++++++++++++++++++++++++ 3 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 public/images/oauth/dropbox.png create mode 100644 src/Auth/OAuth/Dropbox.php diff --git a/app/config/providers.php b/app/config/providers.php index c141ed11b8..9a84950aca 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -46,9 +46,9 @@ return [ 'icon' => 'icon-linkedin', 'enabled' => true, ], - 'reddit' => [ - 'developers' => 'https://www.reddit.com/dev/api/', - 'icon' => 'icon-reddit', + 'dropbox' => [ + 'developers' => 'https://www.dropbox.com/developers/documentation', + 'icon' => 'icon-dropbox', 'enabled' => true, ], ]; diff --git a/public/images/oauth/dropbox.png b/public/images/oauth/dropbox.png new file mode 100644 index 0000000000000000000000000000000000000000..20df74c103fe1c021d28c0ea69caa0dc28982178 GIT binary patch literal 2814 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 literal 0 HcmV?d00001 diff --git a/src/Auth/OAuth/Dropbox.php b/src/Auth/OAuth/Dropbox.php new file mode 100644 index 0000000000..3082e4ec42 --- /dev/null +++ b/src/Auth/OAuth/Dropbox.php @@ -0,0 +1,132 @@ +appID). + '&redirect_uri='.urlencode($this->callback). + '&state='.urlencode(json_encode($this->state)). + '&scope=offline_access+user.read'. + '&response_type=code'. + '&response_mode=query'; + } + + /** + * @param string $code + * + * @return string + */ + public function getAccessToken(string $code): string + { + $headers[] = 'Content-Type: application/x-www-form-urlencoded'; + + $accessToken = $this->request( + 'POST', + 'https://login.microsoftonline.com/common/oauth2/v2.0/token', + $headers, + 'code='.urlencode($code). + '&client_id='.urlencode($this->appID). + '&client_secret='.urlencode($this->appSecret). + '&redirect_uri='.urlencode($this->callback). + '&scope=offline_access+user.read'. + '&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['userPrincipalName'])) { + return $user['userPrincipalName']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserName(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['displayName'])) { + return $user['displayName']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return array + */ + protected function getUser(string $accessToken): array + { + if (empty($this->user)) { + $headers[] = 'Authorization: Bearer '. urlencode($accessToken); + $user = $this->request('GET', 'https://graph.microsoft.com/v1.0/me', $headers); + $this->user = json_decode($user, true); + } + + return $this->user; + } +}