From 6ac551281cc8277c303fe814e5d1eb1ee7f911c3 Mon Sep 17 00:00:00 2001 From: Armino Popp Date: Wed, 27 Jan 2021 13:29:25 +0200 Subject: [PATCH] Add Tradeshift OAuth2 provider for live and sandbox Fixed formatting --- app/config/providers.php | 36 +++-- public/images/oauth2/tradeshift.png | Bin 0 -> 8001 bytes public/images/oauth2/tradeshiftbox.png | Bin 0 -> 8001 bytes src/Appwrite/Auth/OAuth2/Tradeshift.php | 155 +++++++++++++++++++++ src/Appwrite/Auth/OAuth2/TradeshiftBox.php | 18 +++ 5 files changed, 200 insertions(+), 9 deletions(-) create mode 100644 public/images/oauth2/tradeshift.png create mode 100644 public/images/oauth2/tradeshiftbox.png create mode 100644 src/Appwrite/Auth/OAuth2/Tradeshift.php create mode 100644 src/Appwrite/Auth/OAuth2/TradeshiftBox.php diff --git a/app/config/providers.php b/app/config/providers.php index a377cae6f..36082433c 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -163,6 +163,24 @@ return [ // Ordered by ABC. 'beta' => false, 'mock' => false, ], + 'tradeshift' => [ + 'name' => 'Tradeshift', + 'developers' => 'https://developers.tradeshift.com/docs/api', + 'icon' => 'icon-tradeshift', + 'enabled' => true, + 'form' => false, + 'beta' => false, + 'mock' => false, + ], + 'tradeshiftBox' => [ + 'name' => 'Tradeshift Sandbox', + 'developers' => 'https://developers.tradeshift.com/docs/api', + 'icon' => 'icon-tradeshiftbox', + 'enabled' => true, + 'form' => false, + 'beta' => false, + 'mock' => false, + ], 'twitch' => [ 'name' => 'Twitch', 'developers' => 'https://dev.twitch.tv/docs/authentication', @@ -215,6 +233,15 @@ return [ // Ordered by ABC. // 'beta' => false, // 'mock' => false, // ], + 'wordpress' => [ + 'name' => 'WordPress', + 'developers' => 'https://developer.wordpress.com/docs/oauth2/', + 'icon' => 'icon-wordpress', + 'enabled' => true, + 'form' => false, + 'beta' => false, + 'mock' => false + ], // Keep Last 'mock' => [ 'name' => 'Mock', @@ -225,13 +252,4 @@ return [ // Ordered by ABC. '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/tradeshift.png b/public/images/oauth2/tradeshift.png new file mode 100644 index 0000000000000000000000000000000000000000..9a5aaea12fe9b75ccc5519e6ad96de323d90828c GIT binary patch literal 8001 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 literal 0 HcmV?d00001 diff --git a/public/images/oauth2/tradeshiftbox.png b/public/images/oauth2/tradeshiftbox.png new file mode 100644 index 0000000000000000000000000000000000000000..9a5aaea12fe9b75ccc5519e6ad96de323d90828c GIT binary patch literal 8001 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 literal 0 HcmV?d00001 diff --git a/src/Appwrite/Auth/OAuth2/Tradeshift.php b/src/Appwrite/Auth/OAuth2/Tradeshift.php new file mode 100644 index 000000000..677dd5e04 --- /dev/null +++ b/src/Appwrite/Auth/OAuth2/Tradeshift.php @@ -0,0 +1,155 @@ + self::TRADESHIFT_SANDBOX_API_DOMAIN, + 'live' => self::TRADESHIFT_API_DOMAIN, + ]; + + private $endpoint = [ + 'sandbox' => 'https://' . self::TRADESHIFT_SANDBOX_API_DOMAIN . '/tradeshift/', + 'live' => 'https://' . self::TRADESHIFT_API_DOMAIN . '/tradeshift/', + ]; + + private $resourceEndpoint = [ + 'sandbox' => 'https://' . self::TRADESHIFT_SANDBOX_API_DOMAIN . '/tradeshift/rest/external/', + 'live' => 'https://' . self::TRADESHIFT_API_DOMAIN . '/tradeshift/rest/external/', + ]; + + protected $environment = 'live'; + + /** + * @var array + */ + protected $user = []; + + + protected $scopes = [ + 'openid', + 'offline', + ]; + + /** + * @return string + */ + public function getName(): string + { + return 'tradeshift'; + } + + /** + * @return string + */ + public function getLoginURL(): string + { + $httpQuery = \http_build_query([ + 'response_type' => 'code', + 'client_id' => $this->appID, + 'scope' => \implode(' ', $this->getScopes()), + 'redirect_uri' => \str_replace("localhost", "127.0.0.1", $this->callback), + 'state' => \json_encode($this->state), + ]); + + $url = $this->endpoint[$this->environment] . 'auth/login?' . $httpQuery; + + return $url; + } + + /** + * @param string $code + * + * @return string + */ + public function getAccessToken(string $code): string + { + $response = $this->request( + 'POST', + $this->endpoint[$this->environment] . 'auth/token', + ['Authorization: Basic ' . \base64_encode($this->appID . ':' . $this->appSecret)], + \http_build_query([ + 'grant_type' => 'authorization_code', + 'code' => $code, + ]) + ); + + $accessToken = \json_decode($response, true); + + return $accessToken['access_token'] ?? ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserID(string $accessToken): string + { + $user = $this->getUser($accessToken); + + return $user['Id'] ?? ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken): string + { + $user = $this->getUser($accessToken); + + return $user['Username'] ?? ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserName(string $accessToken): string + { + $user = $this->getUser($accessToken); + + $firstName = $user['FirstName'] ?? ''; + $lastName = $user['LastName'] ?? ''; + + return $firstName . ' ' . $lastName; + } + + /** + * @param string $accessToken + * + * @return array + */ + protected function getUser(string $accessToken): array + { + $header = [ + 'Content-Type: application/json', + 'Accept: application/json', + 'Host: ' . urlencode($this->apiDomain[$this->environment]), + 'Authorization: Bearer ' . $accessToken, + ]; + + if (empty($this->user)) { + $response = $this->request( + 'GET', + $this->resourceEndpoint[$this->environment] . 'account/info/user', + $header + ); + $this->user = \json_decode($response, true); + } + + return $this->user; + } +} diff --git a/src/Appwrite/Auth/OAuth2/TradeshiftBox.php b/src/Appwrite/Auth/OAuth2/TradeshiftBox.php new file mode 100644 index 000000000..6ba3c29f0 --- /dev/null +++ b/src/Appwrite/Auth/OAuth2/TradeshiftBox.php @@ -0,0 +1,18 @@ +