From 5167ce8858253e3dcaf834975d7370492dc2e4fb Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 02:08:29 +0530 Subject: [PATCH 1/9] fix: removed instagram oAuth due to technical difficulties --- app/config/providers.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/config/providers.php b/app/config/providers.php index 01b7b6b42..f4d7e6ca8 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -34,7 +34,7 @@ return [ 'microsoft' => [ 'developers' => 'https://developer.microsoft.com/en-us/', 'icon' => 'icon-windows', - 'enabled' => false, + 'enabled' => true, ], 'twitter' => [ 'developers' => 'https://developer.twitter.com/', From eb47cf8d9b6695fd33ece6c4f53e6f973d0a69be Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 12:30:59 +0530 Subject: [PATCH 2/9] feat: added Microsoft OAuth Support --- public/images/oauth/microsoft.png | Bin 0 -> 1026 bytes src/Auth/OAuth/Microsoft.php | 132 ++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 public/images/oauth/microsoft.png create mode 100644 src/Auth/OAuth/Microsoft.php diff --git a/public/images/oauth/microsoft.png b/public/images/oauth/microsoft.png new file mode 100644 index 0000000000000000000000000000000000000000..11eebf919797006e8f470718acd9a39762a91d4e GIT binary patch literal 1026 zcmeAS@N?(olHy`uVBq!ia0vp^DIm14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>h7(RN7HJ#P|;3e94Rtudxqxr#8 zr>`sfV=hJ!Q?bW~4uBHfPfr)e zkc@k8&px+eN|0!H=zn6GZ&={X>i0(6f!{Q48dtkH_1)2|dEX!Nx8j}fj;nn~@)kHR zl?bwKu2%Az((-NhrAxh%ciB6AtBf{pDz4)9^gsoZ>^MDTWWPUs_H_0ye?Qf8SAHH{ zx^MLd2gk&~j}N}~9(X%fN=ojcxs_R5P*j-R!xG%ZcIM2vm&Mi3&Q1-z z%H4fWwf3}K>3@X}Kc1{#xiunuUVI$uy%3j2f0MVayO$Q-KoUD6)JTrvuXJzJQ-~TsNwZ3ne!lkEtdhNhKP%UwdC`m~yNwrEYN(E93 zMh1qKx`qb221X$UMpi~fR>o%924+?U28UEO0rMM@hTQy=%(O}@8jK(s+|BgNff^V* MUHx3vIVCg!0BOg(*#H0l literal 0 HcmV?d00001 diff --git a/src/Auth/OAuth/Microsoft.php b/src/Auth/OAuth/Microsoft.php new file mode 100644 index 000000000..f98049ce0 --- /dev/null +++ b/src/Auth/OAuth/Microsoft.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; + } +} From f89b7c02c08fe47e4ef44134649dc8d4a3e86a68 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 12:57:49 +0530 Subject: [PATCH 3/9] chore: updated Microsoft Image --- public/images/oauth/microsoft.png | Bin 1026 -> 769 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/oauth/microsoft.png b/public/images/oauth/microsoft.png index 11eebf919797006e8f470718acd9a39762a91d4e..9e40f2342d3303c98732400e58cfdd5d7a45f586 100644 GIT binary patch literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^?OH;uum9_jZn9o^YT*+yCho z+#K{8n0QS~b~Zd^;>>y zm;XKI`So3)*V?E3EDkF-ytpUTk40laCqs0CAtUSE7FOQFkE9F^uyG%1;<8Ee)(~r9 z6)hJAk>+O~Fh&T7h1~H4lO_=XtVVf9b_lM{kY4$}TK#@o)Wwag8(AZ(pZd#03q%JL zUf#eOs*ucmt6TTQ=iM(GKc%`h|9L;*_u`|6*YI1!XRTx2n?KWjeQBBD#b@sI=g(^h zKd59nZ)?uPqHWQ~5Wafl6shQdUE$xek{x$$SJ=8$!81KGT_%JN2gU~NRK>vnr;f)4LZd2H{U{l{u^;zo| zpM9~Z z8?J5PNKkz$($3(Qur^chfY&KaKE^o*qAn{nOq~)e!(`F8b(t%Jw&rpRmI9`1-)@Gm zAiqM62Q1fSi7~EOGUt)N0nRn1x=azCmPZvEgd?(}h%@+3{14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>h7(RN7HJ#P|;3e94Rtudxqxr#8 zr>`sfV=hJ!Q?bW~4uBHfPfr)e zkc@k8&px+eN|0!H=zn6GZ&={X>i0(6f!{Q48dtkH_1)2|dEX!Nx8j}fj;nn~@)kHR zl?bwKu2%Az((-NhrAxh%ciB6AtBf{pDz4)9^gsoZ>^MDTWWPUs_H_0ye?Qf8SAHH{ zx^MLd2gk&~j}N}~9(X%fN=ojcxs_R5P*j-R!xG%ZcIM2vm&Mi3&Q1-z z%H4fWwf3}K>3@X}Kc1{#xiunuUVI$uy%3j2f0MVayO$Q-KoUD6)JTrvuXJzJQ-~TsNwZ3ne!lkEtdhNhKP%UwdC`m~yNwrEYN(E93 zMh1qKx`qb221X$UMpi~fR>o%924+?U28UEO0rMM@hTQy=%(O}@8jK(s+|BgNff^V* MUHx3vIVCg!0BOg(*#H0l From 119f5de6b06e61af439f85f4c861c6cffad712db Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 12:58:59 +0530 Subject: [PATCH 4/9] chore: lint fix --- src/Auth/OAuth/Microsoft.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Auth/OAuth/Microsoft.php b/src/Auth/OAuth/Microsoft.php index f98049ce0..6bbf0bad8 100644 --- a/src/Auth/OAuth/Microsoft.php +++ b/src/Auth/OAuth/Microsoft.php @@ -21,7 +21,7 @@ class Microsoft extends OAuth { return 'microsoft'; } - + /** * @return string */ From 2e428732d05492977fd5b16a4c7bb743625f772a Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 13:30:57 +0530 Subject: [PATCH 5/9] feat: started Reddit OAuth --- app/config/providers.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/config/providers.php b/app/config/providers.php index f4d7e6ca8..c141ed11b 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -46,4 +46,9 @@ return [ 'icon' => 'icon-linkedin', 'enabled' => true, ], + 'reddit' => [ + 'developers' => 'https://www.reddit.com/dev/api/', + 'icon' => 'icon-reddit', + 'enabled' => true, + ], ]; From ba7db4b80b9fc04d31566c692922ec452c749a0c Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 19:09:40 +0530 Subject: [PATCH 6/9] 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 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 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 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; + } +} From 44c179bb022941593c2b1cb588b521d64eab0379 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 19:27:52 +0530 Subject: [PATCH 7/9] chore: added getAccessToken adapter --- src/Auth/OAuth/Dropbox.php | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/Auth/OAuth/Dropbox.php b/src/Auth/OAuth/Dropbox.php index 3082e4ec4..05c122b19 100644 --- a/src/Auth/OAuth/Dropbox.php +++ b/src/Auth/OAuth/Dropbox.php @@ -27,13 +27,11 @@ class Dropbox extends OAuth */ public function getLoginURL(): string { - return 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?'. + return 'https://www.dropbox.com/oauth2/authorize?'. 'client_id='.urlencode($this->appID). '&redirect_uri='.urlencode($this->callback). '&state='.urlencode(json_encode($this->state)). - '&scope=offline_access+user.read'. - '&response_type=code'. - '&response_mode=query'; + '&response_type=code'; } /** @@ -43,17 +41,16 @@ class Dropbox extends OAuth */ 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', + 'https://api.dropboxapi.com/oauth2/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' ); @@ -123,7 +120,7 @@ class Dropbox extends OAuth { if (empty($this->user)) { $headers[] = 'Authorization: Bearer '. urlencode($accessToken); - $user = $this->request('GET', 'https://graph.microsoft.com/v1.0/me', $headers); + $user = $this->request('GET', 'https://api.dropboxapi.com/2/users/get_current_account', $headers); $this->user = json_decode($user, true); } From 4e6541b8f622aa59f2d0b9006fb7e35bfb78b91c Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 19:35:02 +0530 Subject: [PATCH 8/9] feat: Dropbox OAuth Added --- src/Auth/OAuth/Dropbox.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Auth/OAuth/Dropbox.php b/src/Auth/OAuth/Dropbox.php index 05c122b19..d24991139 100644 --- a/src/Auth/OAuth/Dropbox.php +++ b/src/Auth/OAuth/Dropbox.php @@ -72,8 +72,8 @@ class Dropbox extends OAuth { $user = $this->getUser($accessToken); - if (isset($user['id'])) { - return $user['id']; + if (isset($user['account_id'])) { + return $user['account_id']; } return ''; @@ -88,8 +88,8 @@ class Dropbox extends OAuth { $user = $this->getUser($accessToken); - if (isset($user['userPrincipalName'])) { - return $user['userPrincipalName']; + if (isset($user['email'])) { + return $user['email']; } return ''; @@ -104,8 +104,8 @@ class Dropbox extends OAuth { $user = $this->getUser($accessToken); - if (isset($user['displayName'])) { - return $user['displayName']; + if (isset($user['name'])) { + return $user['name']['display_name']; } return ''; @@ -120,8 +120,9 @@ class Dropbox extends OAuth { if (empty($this->user)) { $headers[] = 'Authorization: Bearer '. urlencode($accessToken); - $user = $this->request('GET', 'https://api.dropboxapi.com/2/users/get_current_account', $headers); + $user = $this->request('POST', 'https://api.dropboxapi.com/2/users/get_current_account', $headers); $this->user = json_decode($user, true); + } return $this->user; From 80f09862b462c4fa8f4da15cf9c9019d9e9316e4 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 19:37:52 +0530 Subject: [PATCH 9/9] chore: lint fix --- src/Auth/OAuth/Dropbox.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Auth/OAuth/Dropbox.php b/src/Auth/OAuth/Dropbox.php index d24991139..a4a6335f3 100644 --- a/src/Auth/OAuth/Dropbox.php +++ b/src/Auth/OAuth/Dropbox.php @@ -6,7 +6,7 @@ use Auth\OAuth; // Reference Material // https://www.dropbox.com/developers/reference/oauth-guide -// https://www.dropbox.com/developers/documentation/http/documentation#users-get_current_account +// https://www.dropbox.com/developers/documentation/http/documentation#users-get_current_account class Dropbox extends OAuth { /** @@ -41,7 +41,6 @@ class Dropbox extends OAuth */ public function getAccessToken(string $code): string { - $headers[] = 'Content-Type: application/x-www-form-urlencoded'; $accessToken = $this->request( 'POST', @@ -122,7 +121,6 @@ class Dropbox extends OAuth $headers[] = 'Authorization: Bearer '. urlencode($accessToken); $user = $this->request('POST', 'https://api.dropboxapi.com/2/users/get_current_account', $headers); $this->user = json_decode($user, true); - } return $this->user;