From 47e32c990e372c9f83f897b2bf0fcd5b213e7986 Mon Sep 17 00:00:00 2001 From: Armino Popp Date: Mon, 20 Jan 2020 12:55:05 +0200 Subject: [PATCH 1/5] Added Paypal OAuth provider --- app/config/providers.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/config/providers.php b/app/config/providers.php index c6bc9b203..863d880d6 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -127,6 +127,12 @@ return [ 'enabled' => false, 'mock' => false ], + 'paypal' => [ + 'developers' => 'https://developer.paypal.com/docs/api/overview/', + 'icon' => 'icon-paypal', + 'enabled' => true, + 'mock' => false + ], // Keep Last 'mock' => [ 'developers' => 'https://appwrite.io', From 3b1bd4578a35f0578b43105455e642303382055c Mon Sep 17 00:00:00 2001 From: Armino Popp Date: Mon, 20 Jan 2020 12:55:32 +0200 Subject: [PATCH 2/5] Added Paypal icon --- public/images/oauth/paypal.png | Bin 0 -> 2492 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/images/oauth/paypal.png diff --git a/public/images/oauth/paypal.png b/public/images/oauth/paypal.png new file mode 100644 index 0000000000000000000000000000000000000000..8c14828cfdbf9be43b58266d6e0526d79986f4dc GIT binary patch literal 2492 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 Date: Mon, 20 Jan 2020 12:56:16 +0200 Subject: [PATCH 3/5] Initial commit --- src/Auth/OAuth/Paypal.php | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/Auth/OAuth/Paypal.php diff --git a/src/Auth/OAuth/Paypal.php b/src/Auth/OAuth/Paypal.php new file mode 100644 index 000000000..e69de29bb From 318b1a577bdb4fa3cb0ba315db3fa1c482bd7b35 Mon Sep 17 00:00:00 2001 From: Armino Popp Date: Mon, 20 Jan 2020 13:44:16 +0200 Subject: [PATCH 4/5] Added Paypal OAuth provider --- src/Auth/OAuth/Paypal.php | 164 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) diff --git a/src/Auth/OAuth/Paypal.php b/src/Auth/OAuth/Paypal.php index e69de29bb..064b04cb8 100644 --- a/src/Auth/OAuth/Paypal.php +++ b/src/Auth/OAuth/Paypal.php @@ -0,0 +1,164 @@ + 'https://www.sandbox.paypal.com/', + 'live' => 'https://www.paypal.com/', + ]; + + private $resourceEndpoint = [ + 'sandbox' => 'https://api.sandbox.paypal.com/v1/', + 'live' => 'https://api.paypal.com/v1/', + ]; + + private $environment = 'sandbox'; + + /** + * @var array + */ + protected $user = []; + + + protected $scopes = [ + 'openid', + 'profile', + 'email' + ]; + + /** + * @return string + */ + public function getName(): string + { + return 'paypal'; + } + + /** + * @return string + */ + public function getLoginURL(): string + { + $url = $this->endpoint[$this->environment] . 'connect/?'. + http_build_query([ + 'flowEntry' => 'static', + 'response_type' => 'code', + 'client_id' => $this->appID, + 'scope' => implode(' ', $this->getScopes()), + // paypal is not accepting localhost string into return uri + 'redirect_uri' => str_replace("localhost", "127.0.0.1", $this->callback), + 'state' => json_encode($this->state), + ]); + + return $url; + } + + /** + * @param string $code + * + * @return string + */ + public function getAccessToken(string $code): string + { + $accessToken = $this->request( + 'POST', + $this->resourceEndpoint[$this->environment] . 'oauth2/token', + ['Authorization: Basic ' . base64_encode($this->appID . ':' . $this->appSecret)], + http_build_query([ + 'code' => $code, + '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['payer_id'])) { + return $user['payer_id']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['emails'])) { + return $user['emails'][0]['value']; + } + + 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 + { + $header = [ + 'Content-Type: application/json', + 'Authorization: Bearer '.urlencode($accessToken), + ]; + if (empty($this->user)) { + $user = $this->request( + 'GET', + $this->resourceEndpoint[$this->environment] . 'identity/oauth2/userinfo?schema=paypalv1.1', + $header + ); + $this->user = json_decode($user, true); + } + + return $this->user; + } +} From f68089e0e5b91ff7a513e34248fb03b0dec07218 Mon Sep 17 00:00:00 2001 From: Armino Popp Date: Mon, 20 Jan 2020 15:00:57 +0200 Subject: [PATCH 5/5] Changed to live --- src/Auth/OAuth/Paypal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Auth/OAuth/Paypal.php b/src/Auth/OAuth/Paypal.php index 064b04cb8..bff273b24 100644 --- a/src/Auth/OAuth/Paypal.php +++ b/src/Auth/OAuth/Paypal.php @@ -22,7 +22,7 @@ class Paypal extends OAuth 'live' => 'https://api.paypal.com/v1/', ]; - private $environment = 'sandbox'; + private $environment = 'live'; /** * @var array