From 7dc555a65bc043260703a554d3fd304313bf5d36 Mon Sep 17 00:00:00 2001 From: Everly Precia Suresh Date: Mon, 19 Sep 2022 13:04:43 +0000 Subject: [PATCH] Initial Implementation of LINE OAuth --- app/config/providers.php | 10 +++ public/images/users/line.png | Bin 0 -> 5804 bytes src/Appwrite/Auth/OAuth2/Line.php | 140 ++++++++++++++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 public/images/users/line.png create mode 100644 src/Appwrite/Auth/OAuth2/Line.php diff --git a/app/config/providers.php b/app/config/providers.php index 98ad93b30c..50369e2234 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -171,6 +171,16 @@ return [ // Ordered by ABC. 'beta' => false, 'mock' => false, ], + 'line' => [ + 'name' => 'Line', + 'developers' => 'https://developers.line.biz/en/docs/line-login/integrate-line-login/', + 'icon' => 'icon-line', + 'enabled' => true, + 'sandbox' => false, + 'form' => false, + 'beta' => false, + 'mock' => false, + ], 'linkedin' => [ 'name' => 'LinkedIn', 'developers' => 'https://developer.linkedin.com/', diff --git a/public/images/users/line.png b/public/images/users/line.png new file mode 100644 index 0000000000000000000000000000000000000000..f892e5c6e01dfe7bc12f8875c8a52850cc14c19f GIT binary patch literal 5804 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 literal 0 HcmV?d00001 diff --git a/src/Appwrite/Auth/OAuth2/Line.php b/src/Appwrite/Auth/OAuth2/Line.php new file mode 100644 index 0000000000..fa5b4b28b0 --- /dev/null +++ b/src/Appwrite/Auth/OAuth2/Line.php @@ -0,0 +1,140 @@ + 'code', + 'client_id' => $this->appID, + 'redirect_uri' => $this->callback, + 'state' => \json_encode($this->state), + 'scope' => \implode('%20', $this->getScopes()) + ]); + } + + /** + * @param string $code + * + * @return array + */ + protected function getTokens(string $code): array + { + if (empty($this->tokens)) { + $this->tokens = \json_decode($this->request( + 'POST', + 'https://api.line.me/oauth2/v2.1/token', + ['Content-Type: application/x-www-form-urlencoded'], + \http_build_query([ + 'grant_type' => 'authorization_code', + 'code' => $code, + 'client_id' => $this->appID, + 'client_secret' => $this->appSecret, + 'redirect_uri' => $this->callback + ]) + ), true); + } + return $this->tokens; + } + + /** + * @param string $refreshToken + * + * @return array + */ + public function refreshTokens(string $refreshToken): array + { + return []; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserID(string $accessToken): string + { + $user = $this->getUser($accessToken); + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken): string + { + + return ''; + } + + /** + * Check if the OAuth email is verified + * + * @link https://docs.github.com/en/rest/users/emails#list-email-addresses-for-the-authenticated-user + * + * @param string $accessToken + * + * @return bool + */ + public function isEmailVerified(string $accessToken): bool + { + return false; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserName(string $accessToken): string + { + return ''; + } + + /** + * @param string $accessToken + * + * @return array + */ + protected function getUser(string $accessToken): array + { + + return ''; + } +} \ No newline at end of file