From 2d2be75fd69aaffa5367750bbd8be0afa71a40c3 Mon Sep 17 00:00:00 2001 From: Ed Walker Date: Tue, 20 Aug 2019 13:16:27 -0700 Subject: [PATCH 1/5] Add Okta client. --- README.md | 18 +++++ src/Client/Provider/OktaClient.php | 35 ++++++++++ .../KnpUOAuth2ClientExtension.php | 2 + .../Providers/OktaProviderConfigurator.php | 65 +++++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 src/Client/Provider/OktaClient.php create mode 100644 src/DependencyInjection/Providers/OktaProviderConfigurator.php diff --git a/README.md b/README.md index dde50cf1..bfa6d7f2 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,7 @@ via Composer: | [Microsoft](https://github.com/stevenmaguire/oauth2-microsoft) | composer require stevenmaguire/oauth2-microsoft | | [Mollie](https://github.com/mollie/oauth2-mollie-php) | composer require mollie/oauth2-mollie-php | | [Odnoklassniki](https://github.com/rakeev/oauth2-odnoklassniki) | composer require aego/oauth2-odnoklassniki | +| [Okta](https://github.com/foxworth42/oauth2-okta) | composer require foxworth42/oauth2-okta | | [Paypal](https://github.com/stevenmaguire/oauth2-paypal) | composer require stevenmaguire/oauth2-paypal | | [PSN](https://github.com/larabros/oauth2-psn) | composer require larabros/oauth2-psn | | [Salesforce](https://github.com/stevenmaguire/oauth2-salesforce) | composer require stevenmaguire/oauth2-salesforce | @@ -1034,6 +1035,23 @@ knpu_oauth2_client: # whether to check OAuth2 "state": defaults to true # use_state: true + # will create service: "knpu.oauth2.client.okta" + # an instance of: KnpU\OAuth2ClientBundle\Client\Provider\OktaClient + # composer require foxworth42/oauth2-okta + okta: + # must be "okta" - it activates that type! + type: okta + # add and configure client_id and client_secret in parameters.yml + client_id: '%env(OAUTH_OKTA_CLIENT_ID)%' + client_secret: '%env(OAUTH_OKTA_CLIENT_SECRET)%' + # a route name you'll create + redirect_route: connect_okta_check + redirect_params: {} + # Issuer URI from Okta + issuer: https://mycompany.okta.com/oauth2/default + # whether to check OAuth2 "state": defaults to true + # use_state: true + # will create service: "knpu.oauth2.client.paypal" # an instance of: KnpU\OAuth2ClientBundle\Client\Provider\PaypalClient # composer require stevenmaguire/oauth2-paypal diff --git a/src/Client/Provider/OktaClient.php b/src/Client/Provider/OktaClient.php new file mode 100644 index 00000000..ff5ade56 --- /dev/null +++ b/src/Client/Provider/OktaClient.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace KnpU\OAuth2ClientBundle\Client\Provider; + +use KnpU\OAuth2ClientBundle\Client\OAuth2Client; +use League\OAuth2\Client\Token\AccessToken; +use Foxworth42\OAuth2\Client\Provider\OktaUser; + +class OktaClient extends OAuth2Client +{ + /** + * @param AccessToken $accessToken + * @return OktaUser + */ + public function fetchUserFromToken(AccessToken $accessToken) + { + return parent::fetchUserFromToken($accessToken); + } + + /** + * @return OktaUser + */ + public function fetchUser() + { + return parent::fetchUser(); + } +} diff --git a/src/DependencyInjection/KnpUOAuth2ClientExtension.php b/src/DependencyInjection/KnpUOAuth2ClientExtension.php index 44fc8da2..ea07066e 100644 --- a/src/DependencyInjection/KnpUOAuth2ClientExtension.php +++ b/src/DependencyInjection/KnpUOAuth2ClientExtension.php @@ -45,6 +45,7 @@ use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\MicrosoftProviderConfigurator; use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\MollieProviderConfigurator; use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\OdnoklassnikiProviderConfigurator; +use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\OktaProviderConfigurator; use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\PaypalProviderConfigurator; use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\ProviderConfiguratorInterface; use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\PsnProviderConfigurator; @@ -117,6 +118,7 @@ class KnpUOAuth2ClientExtension extends Extension 'microsoft' => MicrosoftProviderConfigurator::class, 'mollie' => MollieProviderConfigurator::class, 'odnoklassniki' => OdnoklassnikiProviderConfigurator::class, + 'okta' => OktaProviderConfigurator::class, 'paypal' => PaypalProviderConfigurator::class, 'psn' => PsnProviderConfigurator::class, 'salesforce' => SalesforceProviderConfigurator::class, diff --git a/src/DependencyInjection/Providers/OktaProviderConfigurator.php b/src/DependencyInjection/Providers/OktaProviderConfigurator.php new file mode 100644 index 00000000..3187a853 --- /dev/null +++ b/src/DependencyInjection/Providers/OktaProviderConfigurator.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace KnpU\OAuth2ClientBundle\DependencyInjection\Providers; + +use Symfony\Component\Config\Definition\Builder\NodeBuilder; + +class OktaProviderConfigurator implements ProviderConfiguratorInterface +{ + public function buildConfiguration(NodeBuilder $node) + { + $node + ->scalarNode('issuer') + ->isRequired() + ->info('Issuer URI from Okta') + ->example('issuer: https://mycompany.okta.com/oauth2/default') + ->end(); + } + + public function getProviderClass(array $config) + { + return 'Foxworth42\OAuth2\Client\Provider\Okta'; + } + + public function getProviderOptions(array $config) + { + $options = [ + 'clientId' => $config['client_id'], + 'clientSecret' => $config['client_secret'], + ]; + + if ($config['issuer']) { + $options['issuer'] = $config['issuer']; + } + + return $options; + } + + public function getPackagistName() + { + return 'foxworth42/oauth2-okta'; + } + + public function getLibraryHomepage() + { + return 'https://github.com/foxworth42/oauth2-okta'; + } + + public function getProviderDisplayName() + { + return 'Okta'; + } + + public function getClientClass(array $config) + { + return 'KnpU\OAuth2ClientBundle\Client\Provider\OktaClient'; + } +} From 14c79527c5aa68c286fe2a57ee106b199568c657 Mon Sep 17 00:00:00 2001 From: Ed Walker Date: Tue, 6 Oct 2020 22:07:05 -0700 Subject: [PATCH 2/5] Fix phpstan warnings. Add composer script commands for test/lint to run phpunit/phpstan more easily. --- composer.json | 4 ++++ src/Client/Provider/OktaClient.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 8390e12d..1a4d6f94 100644 --- a/composer.json +++ b/composer.json @@ -35,5 +35,9 @@ }, "suggest": { "symfony/security-guard": "For integration with Symfony's Guard Security layer" + }, + "scripts": { + "test": "simple-phpunit", + "lint": "phpstan analyze" } } diff --git a/src/Client/Provider/OktaClient.php b/src/Client/Provider/OktaClient.php index ff5ade56..13860a7b 100644 --- a/src/Client/Provider/OktaClient.php +++ b/src/Client/Provider/OktaClient.php @@ -18,7 +18,7 @@ class OktaClient extends OAuth2Client { /** * @param AccessToken $accessToken - * @return OktaUser + * @return OktaUser|\League\OAuth2\Client\Provider\ResourceOwnerInterface */ public function fetchUserFromToken(AccessToken $accessToken) { @@ -26,7 +26,7 @@ public function fetchUserFromToken(AccessToken $accessToken) } /** - * @return OktaUser + * @return OktaUser|\League\OAuth2\Client\Provider\ResourceOwnerInterface */ public function fetchUser() { From e99faba6ce7c870136f5bbe58068b1565ca18eae Mon Sep 17 00:00:00 2001 From: Ed Walker Date: Tue, 6 Oct 2020 22:35:54 -0700 Subject: [PATCH 3/5] Combine test/lint into one command. --- composer.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 1a4d6f94..13acf7c4 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,6 @@ "symfony/security-guard": "For integration with Symfony's Guard Security layer" }, "scripts": { - "test": "simple-phpunit", - "lint": "phpstan analyze" + "test": "simple-phpunit && phpstan analyze" } } From 7d7d31d6edbcfc4b56937cf5306cf532a06f831f Mon Sep 17 00:00:00 2001 From: Ed Walker Date: Fri, 9 Oct 2020 12:56:06 -0700 Subject: [PATCH 4/5] Fix errors from phpcsfixer --- src/Client/Provider/OktaClient.php | 3 +-- src/DependencyInjection/Providers/OktaProviderConfigurator.php | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Client/Provider/OktaClient.php b/src/Client/Provider/OktaClient.php index 13860a7b..dd08b113 100644 --- a/src/Client/Provider/OktaClient.php +++ b/src/Client/Provider/OktaClient.php @@ -10,14 +10,13 @@ namespace KnpU\OAuth2ClientBundle\Client\Provider; +use Foxworth42\OAuth2\Client\Provider\OktaUser; use KnpU\OAuth2ClientBundle\Client\OAuth2Client; use League\OAuth2\Client\Token\AccessToken; -use Foxworth42\OAuth2\Client\Provider\OktaUser; class OktaClient extends OAuth2Client { /** - * @param AccessToken $accessToken * @return OktaUser|\League\OAuth2\Client\Provider\ResourceOwnerInterface */ public function fetchUserFromToken(AccessToken $accessToken) diff --git a/src/DependencyInjection/Providers/OktaProviderConfigurator.php b/src/DependencyInjection/Providers/OktaProviderConfigurator.php index 3187a853..21903f2a 100644 --- a/src/DependencyInjection/Providers/OktaProviderConfigurator.php +++ b/src/DependencyInjection/Providers/OktaProviderConfigurator.php @@ -39,7 +39,6 @@ public function getProviderOptions(array $config) if ($config['issuer']) { $options['issuer'] = $config['issuer']; } - return $options; } From 38618ff1ba97fe8b09f9f5c1531ff0bb7a6655e6 Mon Sep 17 00:00:00 2001 From: Ed Walker Date: Fri, 9 Oct 2020 13:04:17 -0700 Subject: [PATCH 5/5] Hopefully fix what phpcsfixer is complaining about. --- src/DependencyInjection/Providers/OktaProviderConfigurator.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/DependencyInjection/Providers/OktaProviderConfigurator.php b/src/DependencyInjection/Providers/OktaProviderConfigurator.php index 21903f2a..575657db 100644 --- a/src/DependencyInjection/Providers/OktaProviderConfigurator.php +++ b/src/DependencyInjection/Providers/OktaProviderConfigurator.php @@ -39,6 +39,7 @@ public function getProviderOptions(array $config) if ($config['issuer']) { $options['issuer'] = $config['issuer']; } + return $options; }