diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 92f4739cb..c4f217896 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -51,6 +51,17 @@ public function getConfigTreeBuilder() $this->addDbalSection($rootNode); $this->addOrmSection($rootNode); + $rootNode + ->children() + ->arrayNode('prng') + ->children() + ->scalarNode('connection')->cannotBeEmpty()->isRequired()->end() + ->scalarNode('table_name')->defaultValue('seed_table')->cannotBeEmpty()->end() + ->end() + ->end() + ->end() + ; + return $treeBuilder; } diff --git a/DependencyInjection/DoctrineExtension.php b/DependencyInjection/DoctrineExtension.php index 04a1ec191..8c6ddb90d 100644 --- a/DependencyInjection/DoctrineExtension.php +++ b/DependencyInjection/DoctrineExtension.php @@ -47,6 +47,32 @@ public function load(array $configs, ContainerBuilder $container) if (!empty($config['orm'])) { $this->ormLoad($config['orm'], $container); } + + if (!empty($config['prng'])) { + $this->secureRandomLoad($config['prng'], $container); + } + } + + protected function secureRandomLoad(array $config, ContainerBuilder $container) + { + $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('prng.xml'); + + $container + ->getDefinition('doctrine.security.seed_provider') + ->replaceArgument(0, new Reference('doctrine.dbal.'.$config['connection'].'_connection')) + ->replaceArgument(1, $config['table_name']) + ; + $container->setAlias('security.prng_seed_provider', 'doctrine.security.seed_provider'); + + $container + ->getDefinition('doctrine.security.prng_schema_listener') + ->addTag('doctrine.event_listener', array('connection' => $config['connection'], 'event' => 'postGenerateSchema', 'lazy' => true)) + ; + $container + ->getDefinition('doctrine.security.prng_schema') + ->replaceArgument(0, $config['table_name']) + ; } /** diff --git a/Resources/config/prng.xml b/Resources/config/prng.xml new file mode 100644 index 000000000..d8339fa48 --- /dev/null +++ b/Resources/config/prng.xml @@ -0,0 +1,25 @@ + + + + + + Symfony\Bridge\Doctrine\Security\DoctrineSeedProvider + Symfony\Bridge\Doctrine\Security\PrngSchema + Symfony\Bridge\Doctrine\Security\EventListener\PrngSchemaListener + + + + + + + + + + + + + + + diff --git a/Resources/config/schema/doctrine-1.0.xsd b/Resources/config/schema/doctrine-1.0.xsd index 76170b95d..21d982b60 100644 --- a/Resources/config/schema/doctrine-1.0.xsd +++ b/Resources/config/schema/doctrine-1.0.xsd @@ -10,6 +10,7 @@ + @@ -187,4 +188,9 @@ + + + + +