From 9830d6400aa0c4857d1ccb74dc723ce594e63d61 Mon Sep 17 00:00:00 2001 From: rsneh Date: Wed, 7 Oct 2020 19:03:18 +0300 Subject: [PATCH] Added Wordpress OAuth2 provider --- app/config/providers.php | 9 ++ public/images/oauth2/wordpress.png | Bin 0 -> 4826 bytes src/Appwrite/Auth/OAuth2/Wordpress.php | 133 +++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 public/images/oauth2/wordpress.png create mode 100644 src/Appwrite/Auth/OAuth2/Wordpress.php diff --git a/app/config/providers.php b/app/config/providers.php index 65e2127b3..b4ee25349 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -224,5 +224,14 @@ return [ // Ordered by ABC. 'form' => false, 'beta' => false, 'mock' => true, + ], + 'wordpress' => [ + 'name' => 'Wordpress', + 'developers' => 'https://developer.wordpress.com/docs/oauth2/', + 'icon' => 'icon-wordpress', + 'enabled' => true, + 'form' => false, + 'beta' => false, + 'mock' => false ] ]; diff --git a/public/images/oauth2/wordpress.png b/public/images/oauth2/wordpress.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d664ada1e3e577cbc3aaec0d12f4d1dfcf7183 GIT binary patch literal 4826 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 literal 0 HcmV?d00001 diff --git a/src/Appwrite/Auth/OAuth2/Wordpress.php b/src/Appwrite/Auth/OAuth2/Wordpress.php new file mode 100644 index 000000000..44fd99d4b --- /dev/null +++ b/src/Appwrite/Auth/OAuth2/Wordpress.php @@ -0,0 +1,133 @@ + $this->appID, + 'redirect_uri' => $this->callback, + 'response_type' => 'code', + 'scope' => $this->getScopes(), + 'state' => \json_encode($this->state) + ]); + } + + /** + * @param string $code + * + * @return string + */ + public function getAccessToken(string $code):string + { + $accessToken = $this->request( + 'POST', + 'https://public-api.wordpress.com/oauth2/token', + [], + \http_build_query([ + 'client_id' => $this->appID, + 'redirect_uri' => $this->callback, + 'client_secret' => $this->appSecret, + 'grant_type' => 'authorization_code', + 'code' => $code + ]) + ); + + $accessToken = \json_decode($accessToken, true); + + if (isset($accessToken['access_token'])) { + return $accessToken['access_token']; + } + + return ''; + } + + /** + * @param $accessToken + * + * @return string + */ + public function getUserID(string $accessToken):string + { + $user = $this->getUser($accessToken); + + if (isset($user['ID'])) { + return $user['ID']; + } + + return ''; + } + + /** + * @param $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken):string + { + $user = $this->getUser($accessToken); + + if (isset($user['email']) && $user['verified']) { + return $user['email']; + } + + return ''; + } + + /** + * @param $accessToken + * + * @return string + */ + public function getUserName(string $accessToken):string + { + $user = $this->getUser($accessToken); + + if (isset($user['username'])) { + return $user['username']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return array + */ + protected function getUser(string $accessToken) + { + if (empty($this->user)) { + $this->user = \json_decode($this->request('GET', 'https://public-api.wordpress.com/rest/v1/me', ['Authorization: Bearer '.$accessToken]), true); + } + + return $this->user; + } +}