From ae7e8187b01faf8e23f3728d9f6e64407f3df30b Mon Sep 17 00:00:00 2001 From: Joris van de Sande Date: Mon, 5 Feb 2018 16:41:28 +0100 Subject: [PATCH 1/2] Compatibility with Symfony 4 --- composer.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/composer.json b/composer.json index c934ceb0..2d7ea4e2 100644 --- a/composer.json +++ b/composer.json @@ -37,22 +37,22 @@ "require": { "authbucket/oauth2-php": "~4.2", "php": ">=5.5.9", - "symfony/framework-bundle": "~2.8|~3.0", - "symfony/monolog-bundle": "~2.8|~3.0", - "symfony/security-bundle": "~2.8|~3.0" + "symfony/framework-bundle": "~2.8 || ~3.0 || ~4.0", + "symfony/monolog-bundle": "~2.8 || ~3.0", + "symfony/security-bundle": "~2.8 || ~3.0 || ~4.0" }, "require-dev": { "doctrine/doctrine-bundle": "~1.4|~1.6", "doctrine/doctrine-fixtures-bundle": "~2.3", - "doctrine/orm": "~2.4|~2.5", + "doctrine/orm": "~2.4", "ext-pdo_sqlite": "*", "phpunit/phpunit": "~5.7", "satooshi/php-coveralls": "~1.0", - "sensio/distribution-bundle": "~4.0|~5.0", - "sensio/framework-extra-bundle": "~3.0", - "symfony/phpunit-bridge": "~2.8|~3.0", - "symfony/swiftmailer-bundle": "~2.3", - "symfony/symfony": "~2.8|~3.0", + "sensio/distribution-bundle": "~4.0 || ~5.0", + "sensio/framework-extra-bundle": "~3.0 || ~5.0", + "symfony/phpunit-bridge": "~2.8 || ~3.0 || ~4.0", + "symfony/swiftmailer-bundle": "~2.3 || ~3.0", + "symfony/symfony": "~2.8 || ~3.0 || ~4.0", "twig/extensions": "~1.0" }, "scripts": { From 55cbf8e31c61e6df9f0b5bcb5bb4f8a55f71f732 Mon Sep 17 00:00:00 2001 From: Joris van de Sande Date: Wed, 7 Feb 2018 09:14:44 +0100 Subject: [PATCH 2/2] DefinitionDecorator is removed in Symfony 4 --- .../Security/Factory/ResourceFactory.php | 14 ++++++++++++-- .../Security/Factory/TokenFactory.php | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/DependencyInjection/Security/Factory/ResourceFactory.php b/src/DependencyInjection/Security/Factory/ResourceFactory.php index 6906b708..bf1a2ee0 100644 --- a/src/DependencyInjection/Security/Factory/ResourceFactory.php +++ b/src/DependencyInjection/Security/Factory/ResourceFactory.php @@ -13,6 +13,7 @@ use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\SecurityFactoryInterface; use Symfony\Component\Config\Definition\Builder\NodeDefinition; +use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\DefinitionDecorator; @@ -28,14 +29,14 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, $providerId = 'security.authentication.provider.resource.'.$id; $container - ->setDefinition($providerId, new DefinitionDecorator('security.authentication.provider.resource')) + ->setDefinition($providerId, $this->decorate('security.authentication.provider.resource')) ->replaceArgument(0, $id) ->replaceArgument(2, $config['resource_type']) ->replaceArgument(3, $config['scope']) ->replaceArgument(4, $config['options']); $listenerId = 'security.authentication.listener.resource.'.$id; - $container->setDefinition($listenerId, new DefinitionDecorator('security.authentication.listener.resource')) + $container->setDefinition($listenerId, $this->decorate('security.authentication.listener.resource')) ->replaceArgument(0, $id); return [$providerId, $listenerId, $defaultEntryPoint]; @@ -73,4 +74,13 @@ public function addConfiguration(NodeDefinition $node) ->end() ->end(); } + + private function decorate($definitionId) + { + if (class_exists(ChildDefinition::class)) { + return new ChildDefinition($definitionId); + } + + return new DefinitionDecorator($definitionId); + } } diff --git a/src/DependencyInjection/Security/Factory/TokenFactory.php b/src/DependencyInjection/Security/Factory/TokenFactory.php index 6aa12de7..8b74a187 100644 --- a/src/DependencyInjection/Security/Factory/TokenFactory.php +++ b/src/DependencyInjection/Security/Factory/TokenFactory.php @@ -13,6 +13,7 @@ use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\SecurityFactoryInterface; use Symfony\Component\Config\Definition\Builder\NodeDefinition; +use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\DefinitionDecorator; @@ -21,11 +22,11 @@ class TokenFactory implements SecurityFactoryInterface public function create(ContainerBuilder $container, $id, $config, $userProvider, $defaultEntryPoint) { $providerId = 'security.authentication.provider.token.'.$id; - $container->setDefinition($providerId, new DefinitionDecorator('security.authentication.provider.token')) + $container->setDefinition($providerId, $this->decorate('security.authentication.provider.token')) ->replaceArgument(0, $id); $listenerId = 'security.authentication.listener.token.'.$id; - $container->setDefinition($listenerId, new DefinitionDecorator('security.authentication.listener.token')) + $container->setDefinition($listenerId, $this->decorate('security.authentication.listener.token')) ->replaceArgument(0, $id); return [$providerId, $listenerId, $defaultEntryPoint]; @@ -44,4 +45,13 @@ public function getKey() public function addConfiguration(NodeDefinition $node) { } + + private function decorate($definitionId) + { + if (class_exists(ChildDefinition::class)) { + return new ChildDefinition($definitionId); + } + + return new DefinitionDecorator($definitionId); + } }