From 4b934f438d2693119d4229dff4b6c35f14f083c9 Mon Sep 17 00:00:00 2001 From: Dzianis Kotau Date: Wed, 11 Dec 2019 20:01:44 +0300 Subject: [PATCH 1/4] Add IBM App ID provider --- README.md | 21 ++++++ src/Client/Provider/AppIdClient.php | 35 +++++++++ .../KnpUOAuth2ClientExtension.php | 2 + .../Providers/AppIdProviderConfigurator.php | 75 +++++++++++++++++++ 4 files changed, 133 insertions(+) create mode 100644 src/Client/Provider/AppIdClient.php create mode 100644 src/DependencyInjection/Providers/AppIdProviderConfigurator.php diff --git a/README.md b/README.md index 6902b964..08e9ebdd 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ via Composer: | [Google](https://github.com/thephpleague/oauth2-google) | composer require league/oauth2-google | | [HeadHunter](https://github.com/AlexMasterov/oauth2-headhunter) | composer require alexmasterov/oauth2-headhunter | | [Heroku](https://github.com/stevenmaguire/oauth2-heroku) | composer require stevenmaguire/oauth2-heroku | +| [IBM App ID](https://github.com/Jampire/oauth2-appid) | composer require jampire/oauth2-appid | | [Instagram](https://github.com/thephpleague/oauth2-instagram) | composer require league/oauth2-instagram | | [Jira](https://github.com/mrjoops/oauth2-jira) | composer require mrjoops/oauth2-jira | | [Keycloak](https://github.com/stevenmaguire/oauth2-keycloak) | composer require stevenmaguire/oauth2-keycloak | @@ -458,6 +459,26 @@ knpu_oauth2_client: # whether to check OAuth2 "state": defaults to true # use_state: true + # will create service: "knpu.oauth2.client.appid" + # an instance of: KnpU\OAuth2ClientBundle\Client\Provider\AppIdClient + # composer require jampire/oauth2-appid + appid: + # must be "appid" - it activates that type! + type: appid + # add and configure options in your parameters.yml or env + client_id: '%env(OAUTH_APPID_CLIENT_ID)%' + client_secret: '%env(OAUTH_APPID_CLIENT_SECRET)%' + tenant_id: '%env(OAUTH_APPID_TENANT_ID)%' + base_auth_uri: '%env(OAUTH_APPID_BASE_AUTH_URI)%' + # a route name you'll create, for example connect_appid_check + redirect_route: '%env(OAUTH_APPID_REDIRECT_ROUTE)%' + # Identity Provider code: defaults to saml + # idp: '%env(OAUTH_APPID_IDP)%' + redirect_params: {} + + # whether to check OAuth2 "state": defaults to true + # use_state: true + # will create service: "knpu.oauth2.client.auth0" # an instance of: KnpU\OAuth2ClientBundle\Client\Provider\Auth0Client # composer require riskio/oauth2-auth0 diff --git a/src/Client/Provider/AppIdClient.php b/src/Client/Provider/AppIdClient.php new file mode 100644 index 00000000..8e1a8960 --- /dev/null +++ b/src/Client/Provider/AppIdClient.php @@ -0,0 +1,35 @@ + + * @package KnpU\OAuth2ClientBundle\Client\Provider + */ +class AppIdClient extends OAuth2Client +{ + /** + * @param AccessToken $accessToken + * + * @return AppIdResourceOwner|ResourceOwnerInterface + */ + public function fetchUserFromToken(AccessToken $accessToken) + { + return parent::fetchUserFromToken($accessToken); + } + + /** + * @return AppIdResourceOwner|ResourceOwnerInterface + */ + public function fetchUser() + { + return parent::fetchUser(); + } +} diff --git a/src/DependencyInjection/KnpUOAuth2ClientExtension.php b/src/DependencyInjection/KnpUOAuth2ClientExtension.php index e296a310..d684e03d 100644 --- a/src/DependencyInjection/KnpUOAuth2ClientExtension.php +++ b/src/DependencyInjection/KnpUOAuth2ClientExtension.php @@ -11,6 +11,7 @@ namespace KnpU\OAuth2ClientBundle\DependencyInjection; use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\AmazonProviderConfigurator; +use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\AppIdProviderConfigurator; use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\Auth0ProviderConfigurator; use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\AzureProviderConfigurator; use KnpU\OAuth2ClientBundle\DependencyInjection\Providers\BitbucketProviderConfigurator; @@ -84,6 +85,7 @@ class KnpUOAuth2ClientExtension extends Extension /** @var array */ private static $supportedProviderTypes = [ 'amazon' => AmazonProviderConfigurator::class, + 'appid' => AppIdProviderConfigurator::class, 'auth0' => Auth0ProviderConfigurator::class, 'azure' => AzureProviderConfigurator::class, 'bitbucket' => BitbucketProviderConfigurator::class, diff --git a/src/DependencyInjection/Providers/AppIdProviderConfigurator.php b/src/DependencyInjection/Providers/AppIdProviderConfigurator.php new file mode 100644 index 00000000..b5fe3a8f --- /dev/null +++ b/src/DependencyInjection/Providers/AppIdProviderConfigurator.php @@ -0,0 +1,75 @@ + + * @package KnpU\OAuth2ClientBundle\DependencyInjection\Providers + */ +class AppIdProviderConfigurator implements ProviderConfiguratorInterface +{ + + public function buildConfiguration(NodeBuilder $node) + { + $node + ->scalarNode('base_auth_uri') + ->isRequired() + ->info('IBM App ID base URL. More detail: https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started') + ->example('base_auth_uri: https://us-south.appid.cloud.ibm.com/oauth/v4') + ->end() + ->scalarNode('tenant_id') + ->isRequired() + ->info('IBM App ID service tenant ID. More detail: https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started') + ->example('tenant_id: 1234-5678-abcd-efgh') + ->end() + ->scalarNode('idp') + ->defaultValue('saml') + ->info('Identity Provider code. More detail: https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started') + ->example('idp: saml') + ->end() + ; + } + + public function getProviderClass(array $configuration) + { + return AppIdProvider::class; + } + + public function getClientClass(array $config) + { + return AppIdClient::class; + } + + public function getProviderOptions(array $configuration) + { + return [ + 'clientId' => $configuration['client_id'], + 'clientSecret' => $configuration['client_secret'], + 'baseAuthUri' => $configuration['base_auth_uri'], + 'tenantId' => $configuration['tenant_id'], + 'redirectRouteName' => $configuration['redirect_route'], + 'idp' => $configuration['idp'], + ]; + } + + public function getPackagistName() + { + return 'jampire/oauth2-appid'; + } + + public function getLibraryHomepage() + { + return 'https://github.com/Jampire/oauth2-appid'; + } + + public function getProviderDisplayName() + { + return 'AppID'; + } +} From 39d9e9475626db9f47960473273149b626b114d6 Mon Sep 17 00:00:00 2001 From: Dzianis Kotau Date: Sat, 21 Dec 2019 16:31:28 +0300 Subject: [PATCH 2/4] Fixes for KnpUniversity standards --- README.md | 17 ++++++++-------- .../Providers/AppIdProviderConfigurator.php | 20 +++++++++---------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 08e9ebdd..8b2ece14 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,7 @@ via Composer: | OAuth2 Provider | Install | | --------------------------------------------------------------------- | ------------------------------------------------------ | | [Amazon](https://github.com/luchianenco/oauth2-amazon) | composer require luchianenco/oauth2-amazon | +| [AppID](https://github.com/Jampire/oauth2-appid) | composer require jampire/oauth2-appid | | [Auth0](https://github.com/RiskioFr/oauth2-auth0) | composer require riskio/oauth2-auth0 | | [Azure](https://github.com/thenetworg/oauth2-azure) | composer require thenetworg/oauth2-azure | | [Bitbucket](https://github.com/stevenmaguire/oauth2-bitbucket) | composer require stevenmaguire/oauth2-bitbucket | @@ -82,7 +83,6 @@ via Composer: | [Google](https://github.com/thephpleague/oauth2-google) | composer require league/oauth2-google | | [HeadHunter](https://github.com/AlexMasterov/oauth2-headhunter) | composer require alexmasterov/oauth2-headhunter | | [Heroku](https://github.com/stevenmaguire/oauth2-heroku) | composer require stevenmaguire/oauth2-heroku | -| [IBM App ID](https://github.com/Jampire/oauth2-appid) | composer require jampire/oauth2-appid | | [Instagram](https://github.com/thephpleague/oauth2-instagram) | composer require league/oauth2-instagram | | [Jira](https://github.com/mrjoops/oauth2-jira) | composer require mrjoops/oauth2-jira | | [Keycloak](https://github.com/stevenmaguire/oauth2-keycloak) | composer require stevenmaguire/oauth2-keycloak | @@ -465,17 +465,18 @@ knpu_oauth2_client: appid: # must be "appid" - it activates that type! type: appid - # add and configure options in your parameters.yml or env + # add and configure client_id and client_secret in parameters.yml client_id: '%env(OAUTH_APPID_CLIENT_ID)%' client_secret: '%env(OAUTH_APPID_CLIENT_SECRET)%' - tenant_id: '%env(OAUTH_APPID_TENANT_ID)%' + # a route name you'll create + redirect_route: connect_appid_check + redirect_params: {} + # IBM App ID base URL. For example, "https://us-south.appid.cloud.ibm.com/oauth/v4". More details at https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started base_auth_uri: '%env(OAUTH_APPID_BASE_AUTH_URI)%' - # a route name you'll create, for example connect_appid_check - redirect_route: '%env(OAUTH_APPID_REDIRECT_ROUTE)%' - # Identity Provider code: defaults to saml + # IBM App ID service tenant ID. For example, "1234-5678-abcd-efgh". More details at https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started + tenant_id: '%env(OAUTH_APPID_TENANT_ID)%' + # Identity Provider code. Defaults to "saml". More details at https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started # idp: '%env(OAUTH_APPID_IDP)%' - redirect_params: {} - # whether to check OAuth2 "state": defaults to true # use_state: true diff --git a/src/DependencyInjection/Providers/AppIdProviderConfigurator.php b/src/DependencyInjection/Providers/AppIdProviderConfigurator.php index b5fe3a8f..5bf2cbdb 100644 --- a/src/DependencyInjection/Providers/AppIdProviderConfigurator.php +++ b/src/DependencyInjection/Providers/AppIdProviderConfigurator.php @@ -3,8 +3,6 @@ namespace KnpU\OAuth2ClientBundle\DependencyInjection\Providers; use Symfony\Component\Config\Definition\Builder\NodeBuilder; -use Jampire\OAuth2\Client\Provider\AppIdProvider; -use KnpU\OAuth2ClientBundle\Client\Provider\AppIdClient; /** * Class AppIdProviderConfigurator @@ -20,30 +18,30 @@ public function buildConfiguration(NodeBuilder $node) $node ->scalarNode('base_auth_uri') ->isRequired() - ->info('IBM App ID base URL. More detail: https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started') - ->example('base_auth_uri: https://us-south.appid.cloud.ibm.com/oauth/v4') + ->info('IBM App ID base URL. For example, "https://us-south.appid.cloud.ibm.com/oauth/v4". More details at https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started') + ->example('base_auth_uri: \'%env(OAUTH_APPID_BASE_AUTH_URI)%\'') ->end() ->scalarNode('tenant_id') ->isRequired() - ->info('IBM App ID service tenant ID. More detail: https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started') - ->example('tenant_id: 1234-5678-abcd-efgh') + ->info('IBM App ID service tenant ID. For example, "1234-5678-abcd-efgh". More details at https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started') + ->example('tenant_id: \'%env(OAUTH_APPID_TENANT_ID)%\'') ->end() ->scalarNode('idp') ->defaultValue('saml') - ->info('Identity Provider code. More detail: https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started') - ->example('idp: saml') + ->info('Identity Provider code. Defaults to "saml". More details at https://cloud.ibm.com/docs/services/appid?topic=appid-getting-started') + ->example('idp: \'%env(OAUTH_APPID_IDP)%\'') ->end() ; } public function getProviderClass(array $configuration) { - return AppIdProvider::class; + return 'Jampire\OAuth2\Client\Provider\AppIdProvider'; } public function getClientClass(array $config) { - return AppIdClient::class; + return 'KnpU\OAuth2ClientBundle\Client\Provider\AppIdClient'; } public function getProviderOptions(array $configuration) @@ -53,7 +51,7 @@ public function getProviderOptions(array $configuration) 'clientSecret' => $configuration['client_secret'], 'baseAuthUri' => $configuration['base_auth_uri'], 'tenantId' => $configuration['tenant_id'], - 'redirectRouteName' => $configuration['redirect_route'], + 'redirectRoute' => $configuration['redirect_route'], 'idp' => $configuration['idp'], ]; } From 5a1a39d3e898df3f85fa7bf16db75de54a712888 Mon Sep 17 00:00:00 2001 From: Dzianis Kotau Date: Fri, 7 Feb 2020 01:29:17 +0300 Subject: [PATCH 3/4] Regenerating README.md file --- README.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 635e8f95..7ff8402e 100644 --- a/README.md +++ b/README.md @@ -459,23 +459,6 @@ knpu_oauth2_client: # whether to check OAuth2 "state": defaults to true # use_state: true - # will create service: "knpu.oauth2.client.apple" - # an instance of: KnpU\OAuth2ClientBundle\Client\Provider\AppleClient - # composer require patrickbussmann/oauth2-apple - apple: - # must be "apple" - it activates that type! - type: apple - # add and configure client_id and client_secret in parameters.yml - client_id: '%env(OAUTH_APPLE_CLIENT_ID)%' - # a route name you'll create - redirect_route: connect_apple_check - redirect_params: {} - team_id: null - key_file_id: null - key_file_path: null - # whether to check OAuth2 "state": defaults to true - # use_state: true - # will create service: "knpu.oauth2.client.appid" # an instance of: KnpU\OAuth2ClientBundle\Client\Provider\AppIdClient # composer require jampire/oauth2-appid @@ -497,6 +480,23 @@ knpu_oauth2_client: # whether to check OAuth2 "state": defaults to true # use_state: true + # will create service: "knpu.oauth2.client.apple" + # an instance of: KnpU\OAuth2ClientBundle\Client\Provider\AppleClient + # composer require patrickbussmann/oauth2-apple + apple: + # must be "apple" - it activates that type! + type: apple + # add and configure client_id and client_secret in parameters.yml + client_id: '%env(OAUTH_APPLE_CLIENT_ID)%' + # a route name you'll create + redirect_route: connect_apple_check + redirect_params: {} + team_id: null + key_file_id: null + key_file_path: null + # whether to check OAuth2 "state": defaults to true + # use_state: true + # will create service: "knpu.oauth2.client.auth0" # an instance of: KnpU\OAuth2ClientBundle\Client\Provider\Auth0Client # composer require riskio/oauth2-auth0 From 6c86ee1cb98c53a22304a040a1b099831e12d79d Mon Sep 17 00:00:00 2001 From: Dzianis Kotau Date: Fri, 7 Feb 2020 01:50:24 +0300 Subject: [PATCH 4/4] Updates to pass FlintCI tests --- src/Client/Provider/AppIdClient.php | 17 +++++++++++------ .../Providers/AppIdProviderConfigurator.php | 12 +++++++++--- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/Client/Provider/AppIdClient.php b/src/Client/Provider/AppIdClient.php index 8e1a8960..3d98bb03 100644 --- a/src/Client/Provider/AppIdClient.php +++ b/src/Client/Provider/AppIdClient.php @@ -1,23 +1,28 @@ + * + * 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 Jampire\OAuth2\Client\Provider\AppIdResourceOwner; use KnpU\OAuth2ClientBundle\Client\OAuth2Client; -use League\OAuth2\Client\Token\AccessToken; use League\OAuth2\Client\Provider\ResourceOwnerInterface; -use Jampire\OAuth2\Client\Provider\AppIdResourceOwner; +use League\OAuth2\Client\Token\AccessToken; /** - * Class AppIdClient + * Class AppIdClient. * * @author Dzianis Kotau - * @package KnpU\OAuth2ClientBundle\Client\Provider */ class AppIdClient extends OAuth2Client { /** - * @param AccessToken $accessToken - * * @return AppIdResourceOwner|ResourceOwnerInterface */ public function fetchUserFromToken(AccessToken $accessToken) diff --git a/src/DependencyInjection/Providers/AppIdProviderConfigurator.php b/src/DependencyInjection/Providers/AppIdProviderConfigurator.php index 5bf2cbdb..e81caab8 100644 --- a/src/DependencyInjection/Providers/AppIdProviderConfigurator.php +++ b/src/DependencyInjection/Providers/AppIdProviderConfigurator.php @@ -1,18 +1,24 @@ + * + * 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 AppIdProviderConfigurator + * Class AppIdProviderConfigurator. * * @author Dzianis Kotau - * @package KnpU\OAuth2ClientBundle\DependencyInjection\Providers */ class AppIdProviderConfigurator implements ProviderConfiguratorInterface { - public function buildConfiguration(NodeBuilder $node) { $node