diff --git a/app/config/providers.php b/app/config/providers.php index c141ed11b..9a84950ac 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 000000000..20df74c10 Binary files /dev/null and b/public/images/oauth/dropbox.png differ diff --git a/src/Auth/OAuth/Dropbox.php b/src/Auth/OAuth/Dropbox.php new file mode 100644 index 000000000..3082e4ec4 --- /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; + } +}