From 92f2b4c2421d3561acb9331478a11151e268ef03 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Mon, 30 Sep 2019 14:33:55 +0530 Subject: [PATCH] feat: added Gitlab OAuth Support --- app/config/providers.php | 2 +- src/Auth/OAuth/Gitlab.php | 127 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 src/Auth/OAuth/Gitlab.php diff --git a/app/config/providers.php b/app/config/providers.php index 3dae33c61..9e5f329eb 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -19,7 +19,7 @@ return [ 'gitlab' => [ 'developers' => 'https://docs.gitlab.com/ee/api/', 'icon' => 'icon-gitlab', - 'enabled' => false, + 'enabled' => true, ], 'google' => [ 'developers' => 'https://developers.google.com/', diff --git a/src/Auth/OAuth/Gitlab.php b/src/Auth/OAuth/Gitlab.php new file mode 100644 index 000000000..9741e5f1b --- /dev/null +++ b/src/Auth/OAuth/Gitlab.php @@ -0,0 +1,127 @@ +appID) . + '&redirect_uri=' . urlencode($this->callback) . + '&scope=read_user' . + '&state=' . urlencode(json_encode($this->state)) . + '&response_type=code'; + } + + /** + * @param string $code + * + * @return string + */ + public function getAccessToken(string $code): string + { + $accessToken = $this->request( + 'POST', + 'https://gitlab.com/oauth/token?'. + 'code=' . urlencode($code) . + '&client_id=' . urlencode($this->appID) . + '&client_secret=' . urlencode($this->appSecret) . + '&redirect_uri=' . urlencode($this->callback) . + '&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['email'])) { + return $user['email']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserName(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['name'])) { + return $user['name']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return array + */ + protected function getUser(string $accessToken): array + { + if (empty($this->user)) { + $user = $this->request('GET', 'https://gitlab.com/api/v4/user?access_token=' . urlencode($accessToken)); + $this->user = json_decode($user, true); + } + return $this->user; + } +}