From eb47cf8d9b6695fd33ece6c4f53e6f973d0a69be Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 2 Oct 2019 12:30:59 +0530 Subject: [PATCH] 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 0000000000..f98049ce0c --- /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; + } +}