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": { 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); + } }