From b73d6b96f651fb2a62ab68cf1ddf76aebf75a6f0 Mon Sep 17 00:00:00 2001 From: fedys Date: Thu, 6 Apr 2023 13:32:19 +0200 Subject: [PATCH 1/6] Symfony 5 support --- composer.json | 6 +++--- .../SpBundle/DependencyInjection/Configuration.php | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index a6cc9c4..3a65b50 100644 --- a/composer.json +++ b/composer.json @@ -20,9 +20,9 @@ }, "require": { "php": ">=5.6", - "symfony/framework-bundle": "~2.7|~3.0|~4.0", - "symfony/security-bundle": "~2.7|~3.0|~4.0", - "lightsaml/symfony-bridge": "~1.3" + "symfony/framework-bundle": "~2.7|~3.0|~4.0|~5.0", + "symfony/security-bundle": "~2.7|~3.0|~4.0|~5.0", + "lightsaml/symfony-bridge": "dev-symfony5" }, "require-dev": { "phpunit/phpunit": "^5.7", diff --git a/src/LightSaml/SpBundle/DependencyInjection/Configuration.php b/src/LightSaml/SpBundle/DependencyInjection/Configuration.php index 192625b..d1a0f54 100644 --- a/src/LightSaml/SpBundle/DependencyInjection/Configuration.php +++ b/src/LightSaml/SpBundle/DependencyInjection/Configuration.php @@ -25,8 +25,8 @@ class Configuration implements ConfigurationInterface */ public function getConfigTreeBuilder() { - $treeBuilder = new TreeBuilder(); - $root = $treeBuilder->root('light_saml_sp'); + $treeBuilder = new TreeBuilder('light_saml_sp'); + $root = $treeBuilder->getRootNode(); $root ->children() From dca4f42edbb4bea128dffd1015d562280ed316a4 Mon Sep 17 00:00:00 2001 From: Aleksey Plotnikov Date: Thu, 28 Sep 2023 16:16:25 +0100 Subject: [PATCH 2/6] Add support Symfony 5 for controller --- .../SpBundle/Controller/DefaultController.php | 41 +++++++++++++++---- .../SpBundle/Resources/config/services.yml | 6 +++ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/LightSaml/SpBundle/Controller/DefaultController.php b/src/LightSaml/SpBundle/Controller/DefaultController.php index b6d69a0..1bc2829 100644 --- a/src/LightSaml/SpBundle/Controller/DefaultController.php +++ b/src/LightSaml/SpBundle/Controller/DefaultController.php @@ -11,16 +11,39 @@ namespace LightSaml\SpBundle\Controller; -use Symfony\Bundle\FrameworkBundle\Controller\Controller; +use LightSaml\Builder\Profile\Metadata\MetadataProfileBuilder; +use LightSaml\Builder\Profile\WebBrowserSso\Sp\SsoSpSendAuthnRequestProfileBuilderFactory; +use LightSaml\SymfonyBridgeBundle\Bridge\Container\PartyContainer; +use LightSaml\SymfonyBridgeBundle\Bridge\Container\StoreContainer; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; -class DefaultController extends Controller +class DefaultController extends AbstractController { + private MetadataProfileBuilder $metadataProfileBuilder; + private SsoSpSendAuthnRequestProfileBuilderFactory $profileLoginFactory; + private StoreContainer $storeContainer; + private PartyContainer $partyContainer; + private string $discoveryRoute; + + public function __construct( + MetadataProfileBuilder $metadataProfileBuilder, + SsoSpSendAuthnRequestProfileBuilderFactory $profileLoginFactory, + StoreContainer $storeContainer, + PartyContainer $partyContainer, + string $discoveryRoute + ) { + $this->metadataProfileBuilder = $metadataProfileBuilder; + $this->profileLoginFactory = $profileLoginFactory; + $this->storeContainer = $storeContainer; + $this->discoveryRoute = $discoveryRoute; + $this->partyContainer = $partyContainer; + } + public function metadataAction() { - $profile = $this->get('ligthsaml.profile.metadata'); - $context = $profile->buildContext(); - $action = $profile->buildAction(); + $context = $this->metadataProfileBuilder->buildContext(); + $action = $this->metadataProfileBuilder->buildAction(); $action->execute($context); @@ -29,7 +52,7 @@ public function metadataAction() public function discoveryAction() { - $parties = $this->get('lightsaml.container.build')->getPartyContainer()->getIdpEntityDescriptorStore()->all(); + $parties = $this->partyContainer->getIdpEntityDescriptorStore()->all(); if (1 == count($parties)) { return $this->redirect($this->generateUrl('lightsaml_sp.login', ['idp' => $parties[0]->getEntityID()])); @@ -44,10 +67,10 @@ public function loginAction(Request $request) { $idpEntityId = $request->get('idp'); if (null === $idpEntityId) { - return $this->redirect($this->generateUrl($this->container->getParameter('lightsaml_sp.route.discovery'))); + return $this->redirect($this->generateUrl($this->discoveryRoute)); } - $profile = $this->get('ligthsaml.profile.login_factory')->get($idpEntityId); + $profile = $this->profileLoginFactory->get($idpEntityId); $context = $profile->buildContext(); $action = $profile->buildAction(); @@ -58,7 +81,7 @@ public function loginAction(Request $request) public function sessionsAction() { - $ssoState = $this->get('lightsaml.container.build')->getStoreContainer()->getSsoStateStore()->get(); + $ssoState = $this->storeContainer->getSsoStateStore()->get(); return $this->render('@LightSamlSp/sessions.html.twig', [ 'sessions' => $ssoState->getSsoSessions(), diff --git a/src/LightSaml/SpBundle/Resources/config/services.yml b/src/LightSaml/SpBundle/Resources/config/services.yml index bd9ed5f..8f09f3d 100644 --- a/src/LightSaml/SpBundle/Resources/config/services.yml +++ b/src/LightSaml/SpBundle/Resources/config/services.yml @@ -3,6 +3,12 @@ parameters: lightsaml.route.login_check: lightsaml_sp.login_check services: + LightSaml\SpBundle\Controller\DefaultController: + public: true + tags: [ 'controller.service_arguments' ] + arguments: + $discoveryRoute: "%lightsaml_sp.route.discovery%" + lightsaml_sp.username_mapper.simple: class: LightSaml\SpBundle\Security\User\SimpleUsernameMapper arguments: From c0fd3cbf1d1145883ddefed2e47224e2c6705553 Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Sun, 12 May 2024 09:51:05 +0200 Subject: [PATCH 3/6] Add missing service arguments to controller --- src/LightSaml/SpBundle/Resources/config/services.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/LightSaml/SpBundle/Resources/config/services.yml b/src/LightSaml/SpBundle/Resources/config/services.yml index 8f09f3d..14335e8 100644 --- a/src/LightSaml/SpBundle/Resources/config/services.yml +++ b/src/LightSaml/SpBundle/Resources/config/services.yml @@ -6,7 +6,13 @@ services: LightSaml\SpBundle\Controller\DefaultController: public: true tags: [ 'controller.service_arguments' ] + calls: + - [ setContainer, [ "@service_container" ] ] arguments: + $metadataProfileBuilder: '@ligthsaml.profile.metadata' + $profileLoginFactory: '@ligthsaml.profile.login_factory' + $storeContainer: "@lightsaml.container.store" + $partyContainer: "@lightsaml.container.party" $discoveryRoute: "%lightsaml_sp.route.discovery%" lightsaml_sp.username_mapper.simple: From 8b570373ad0fcfdb618b6e1dc25c6612362b92c4 Mon Sep 17 00:00:00 2001 From: John Linhart Date: Tue, 16 Jul 2024 08:22:41 +0200 Subject: [PATCH 4/6] Support for Symfony 6 based on https://github.com/lightSAML/SpBundle/pull/97 --- composer.json | 16 ++--- .../SpBundle/Controller/DefaultController.php | 58 ++++++++++--------- .../SpBundle/Resources/config/services.yml | 11 ++-- 3 files changed, 44 insertions(+), 41 deletions(-) diff --git a/composer.json b/composer.json index 3a65b50..86abf5e 100644 --- a/composer.json +++ b/composer.json @@ -19,16 +19,16 @@ } }, "require": { - "php": ">=5.6", - "symfony/framework-bundle": "~2.7|~3.0|~4.0|~5.0", - "symfony/security-bundle": "~2.7|~3.0|~4.0|~5.0", - "lightsaml/symfony-bridge": "dev-symfony5" + "php": ">=7.2.5", + "symfony/framework-bundle": "~5.0|~6.0", + "symfony/security-bundle": "~5.0|~6.0", + "lightsaml/symfony-bridge": "^2.0" }, "require-dev": { - "phpunit/phpunit": "^5.7", - "sebastian/comparator": "^1.2.4|~2.0|~3.0", - "symfony/symfony": "~2.7|~3.0|~4.0", - "symfony/monolog-bundle": "~2.7|~3.0|~4.0" + "phpunit/phpunit": "~8.4|~9.5", + "sebastian/comparator": "^4.0", + "symfony/symfony": "~5.0|~6.0", + "symfony/monolog-bundle": "~3.0" }, "config": { "bin-dir": "bin" diff --git a/src/LightSaml/SpBundle/Controller/DefaultController.php b/src/LightSaml/SpBundle/Controller/DefaultController.php index 1bc2829..a3e4c23 100644 --- a/src/LightSaml/SpBundle/Controller/DefaultController.php +++ b/src/LightSaml/SpBundle/Controller/DefaultController.php @@ -11,39 +11,43 @@ namespace LightSaml\SpBundle\Controller; -use LightSaml\Builder\Profile\Metadata\MetadataProfileBuilder; +use LightSaml\SymfonyBridgeBundle\Bridge\Container\BuildContainer; use LightSaml\Builder\Profile\WebBrowserSso\Sp\SsoSpSendAuthnRequestProfileBuilderFactory; -use LightSaml\SymfonyBridgeBundle\Bridge\Container\PartyContainer; -use LightSaml\SymfonyBridgeBundle\Bridge\Container\StoreContainer; +use LightSaml\Builder\Profile\Metadata\MetadataProfileBuilder; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; class DefaultController extends AbstractController { - private MetadataProfileBuilder $metadataProfileBuilder; - private SsoSpSendAuthnRequestProfileBuilderFactory $profileLoginFactory; - private StoreContainer $storeContainer; - private PartyContainer $partyContainer; - private string $discoveryRoute; - - public function __construct( - MetadataProfileBuilder $metadataProfileBuilder, - SsoSpSendAuthnRequestProfileBuilderFactory $profileLoginFactory, - StoreContainer $storeContainer, - PartyContainer $partyContainer, - string $discoveryRoute - ) { + /** + * @var BuildContainer $buildContainer + */ + protected BuildContainer $buildContainer; + /** + * @var SsoSpSendAuthnRequestProfileBuilderFactory $ssoSpSendAuthnRequestProfileBuilderFactory + */ + protected SsoSpSendAuthnRequestProfileBuilderFactory $ssoSpSendAuthnRequestProfileBuilderFactory; + /** + * @var MetadataProfileBuilder $metadataProfileBuilder + */ + protected MetadataProfileBuilder $metadataProfileBuilder; + /** + * @var string $samlSpDiscoveryRoute + */ + protected string $samlSpDiscoveryRoute; + + public function __construct(BuildContainer $buildContainer, SsoSpSendAuthnRequestProfileBuilderFactory $ssoSpSendAuthnRequestProfileBuilderFactory, MetadataProfileBuilder $metadataProfileBuilder, string $samlSpDiscoveryRoute) + { + $this->buildContainer = $buildContainer; + $this->ssoSpSendAuthnRequestProfileBuilderFactory = $ssoSpSendAuthnRequestProfileBuilderFactory; $this->metadataProfileBuilder = $metadataProfileBuilder; - $this->profileLoginFactory = $profileLoginFactory; - $this->storeContainer = $storeContainer; - $this->discoveryRoute = $discoveryRoute; - $this->partyContainer = $partyContainer; + $this->samlSpDiscoveryRoute = $samlSpDiscoveryRoute; } - public function metadataAction() { - $context = $this->metadataProfileBuilder->buildContext(); - $action = $this->metadataProfileBuilder->buildAction(); + $profile = $this->metadataProfileBuilder; + $context = $profile->buildContext(); + $action = $profile->buildAction(); $action->execute($context); @@ -52,7 +56,7 @@ public function metadataAction() public function discoveryAction() { - $parties = $this->partyContainer->getIdpEntityDescriptorStore()->all(); + $parties = $this->buildContainer->getPartyContainer()->getIdpEntityDescriptorStore()->all(); if (1 == count($parties)) { return $this->redirect($this->generateUrl('lightsaml_sp.login', ['idp' => $parties[0]->getEntityID()])); @@ -67,10 +71,10 @@ public function loginAction(Request $request) { $idpEntityId = $request->get('idp'); if (null === $idpEntityId) { - return $this->redirect($this->generateUrl($this->discoveryRoute)); + return $this->redirect($this->generateUrl($this->samlSpDiscoveryRoute)); } - $profile = $this->profileLoginFactory->get($idpEntityId); + $profile = $this->ssoSpSendAuthnRequestProfileBuilderFactory->get($idpEntityId); $context = $profile->buildContext(); $action = $profile->buildAction(); @@ -81,7 +85,7 @@ public function loginAction(Request $request) public function sessionsAction() { - $ssoState = $this->storeContainer->getSsoStateStore()->get(); + $ssoState = $this->buildContainer->getStoreContainer()->getSsoStateStore()->get(); return $this->render('@LightSamlSp/sessions.html.twig', [ 'sessions' => $ssoState->getSsoSessions(), diff --git a/src/LightSaml/SpBundle/Resources/config/services.yml b/src/LightSaml/SpBundle/Resources/config/services.yml index 14335e8..6633562 100644 --- a/src/LightSaml/SpBundle/Resources/config/services.yml +++ b/src/LightSaml/SpBundle/Resources/config/services.yml @@ -5,15 +5,14 @@ parameters: services: LightSaml\SpBundle\Controller\DefaultController: public: true - tags: [ 'controller.service_arguments' ] + tags: ['controller.service_arguments'] calls: - [ setContainer, [ "@service_container" ] ] arguments: - $metadataProfileBuilder: '@ligthsaml.profile.metadata' - $profileLoginFactory: '@ligthsaml.profile.login_factory' - $storeContainer: "@lightsaml.container.store" - $partyContainer: "@lightsaml.container.party" - $discoveryRoute: "%lightsaml_sp.route.discovery%" + - "@lightsaml.container.build" + - "@ligthsaml.profile.login_factory" + - "@ligthsaml.profile.metadata" + - "%lightsaml_sp.route.discovery%" lightsaml_sp.username_mapper.simple: class: LightSaml\SpBundle\Security\User\SimpleUsernameMapper From e7f24903526bc6706c7c95166865d8fa0eb6bf74 Mon Sep 17 00:00:00 2001 From: John Linhart Date: Tue, 16 Jul 2024 08:35:10 +0200 Subject: [PATCH 5/6] Must be our own dev branch for Symfony6 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 86abf5e..24312b7 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "php": ">=7.2.5", "symfony/framework-bundle": "~5.0|~6.0", "symfony/security-bundle": "~5.0|~6.0", - "lightsaml/symfony-bridge": "^2.0" + "lightsaml/symfony-bridge": "dev-symfony6" }, "require-dev": { "phpunit/phpunit": "~8.4|~9.5", From dece108521434147f9e14b2c3ed081be3e6d47de Mon Sep 17 00:00:00 2001 From: John Linhart Date: Tue, 3 Sep 2024 18:06:50 +0200 Subject: [PATCH 6/6] Updating deprecated code for Symfony 6 --- .../Security/Factory/LightSamlSpFactory.php | 22 +++++++++---------- src/LightSaml/SpBundle/LightSamlSpBundle.php | 4 +++- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/LightSaml/SpBundle/DependencyInjection/Security/Factory/LightSamlSpFactory.php b/src/LightSaml/SpBundle/DependencyInjection/Security/Factory/LightSamlSpFactory.php index 758c129..c7851fb 100644 --- a/src/LightSaml/SpBundle/DependencyInjection/Security/Factory/LightSamlSpFactory.php +++ b/src/LightSaml/SpBundle/DependencyInjection/Security/Factory/LightSamlSpFactory.php @@ -45,20 +45,13 @@ public function addConfiguration(NodeDefinition $node) * * @return string never null, the id of the authentication provider */ - protected function createAuthProvider(ContainerBuilder $container, $id, $config, $userProviderId) + public function createAuthenticator(ContainerBuilder $container, string $firewallName, array $config, string $userProviderId): string|array { - if (class_exists('Symfony\Component\DependencyInjection\ChildDefinition')) { - // Symfony >= 3.3 - $definition = new ChildDefinition('security.authentication.provider.lightsaml_sp'); - } else { - // Symfony < 3.3 - $definition = new DefinitionDecorator('security.authentication.provider.lightsaml_sp'); - } - - $providerId = 'security.authentication.provider.lightsaml_sp.'.$id; + $definition = new ChildDefinition('security.authentication.provider.lightsaml_sp'); + $providerId = 'security.authentication.provider.lightsaml_sp.'.$firewallName; $provider = $container ->setDefinition($providerId, $definition) - ->replaceArgument(0, $id) + ->replaceArgument(0, $firewallName) ->replaceArgument(2, $config['force']) ; if (isset($config['provider'])) { @@ -111,7 +104,12 @@ public function getPosition() return 'form'; } - public function getKey() + public function getPriority(): int + { + return 0; + } + + public function getKey(): string { return 'light_saml_sp'; } diff --git a/src/LightSaml/SpBundle/LightSamlSpBundle.php b/src/LightSaml/SpBundle/LightSamlSpBundle.php index 18169f6..70c09e9 100644 --- a/src/LightSaml/SpBundle/LightSamlSpBundle.php +++ b/src/LightSaml/SpBundle/LightSamlSpBundle.php @@ -12,6 +12,7 @@ namespace LightSaml\SpBundle; use LightSaml\SpBundle\DependencyInjection\Security\Factory\LightSamlSpFactory; +use Symfony\Bundle\SecurityBundle\DependencyInjection\SecurityExtension; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; @@ -22,6 +23,7 @@ public function build(ContainerBuilder $container) parent::build($container); $extension = $container->getExtension('security'); - $extension->addSecurityListenerFactory(new LightSamlSpFactory()); + \assert($extension instanceof SecurityExtension); + $extension->addAuthenticatorFactory(new LightSamlSpFactory()); } }