8000 Move Anonymous config to a SecurityFactory · symfony/symfony@0da2761 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0da2761

Browse files
committed
Move Anonymous config to a SecurityFactory
1 parent 6916822 commit 0da2761

File tree

4 files changed

+66
-36
lines changed

4 files changed

+66
-36
lines changed

src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -255,12 +255,6 @@ private function addFirewallsSection(ArrayNodeDefinition $rootNode, array $facto
255255
->end()
256256
->end()
257257
->end()
258-
->arrayNode('anonymous')
259-
->canBeUnset()
260-
->children()
261-
->scalarNode('secret')->defaultNull()->end()
262-
->end()
263-
->end()
264258
->arrayNode('switch_user')
265259
->canBeUnset()
266260
->children()
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory;
13+
14+
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
15+
use Symfony\Component\DependencyInjection\ChildDefinition;
16+
use Symfony\Component\DependencyInjection\ContainerBuilder;
17+
use Symfony\Component\DependencyInjection\Parameter;
18+
19+
/**
20+
* @author Wouter de Jong <wouter@wouterj.nl>
21+
*/
22+
class AnonymousFactory implements SecurityFactoryInterface
23+
{
24+
public function create(ContainerBuilder $container, $id, $config, $userProvider, $defaultEntryPoint)
25+
{
26+
if (null === $config['secret']) {
27+
$firewall['anonymous']['secret'] = new Parameter('container.build_hash');
28+
}
29+
30+
$listenerId = 'security.authentication.listener.anonymous.'.$id;
31+
$container
32+
->setDefinition($listenerId, new ChildDefinition('security.authentication.listener.anonymous'))
33+
->replaceArgument(1, $firewall['anonymous']['secret'])
34+
;
35+
36+
$providerId = 'security.authentication.provider.anonymous.'.$id;
37+
$container
38+
->setDefinition($providerId, new ChildDefinition('security.authentication.provider.anonymous'))
39+
->replaceArgument(0, $firewall['anonymous']['secret'])
40+
;
41+
42+
return [$providerId, $listenerId, $defaultEntryPoint];
43+
}
44+
45+
public function getPosition()
46+
{
47+
return 'anonymous';
48+
}
49+
50+
public function getKey()
51+
{
52+
return 'anonymous';
53+
}
54+
55+
public function addConfiguration(NodeDefinition $builder)
56+
{
57+
$builder
58+
->children()
59+
->scalarNode('secret')->defaultNull()->end()
60+
->end()
61+
;
62+
}
63+
}

src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
use Symfony\Component\DependencyInjection\ContainerBuilder;
2626
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
2727
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
28-
use Symfony\Component\DependencyInjection\Parameter;
2928
use Symfony\Component\DependencyInjection\Reference;
3029
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
3130
use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
@@ -48,7 +47,7 @@ class SecurityExtension extends Extension implements PrependExtensionInterface
4847
private $requestMatchers = [];
4948
private $expressions = [];
5049
private $contextListeners = [];
51-
private $listenerPositions = ['pre_auth', 'form', 'http', 'remember_me'];
50+
private $listenerPositions = ['pre_auth', 'form', 'http', 'remember_me', 'anonymous'];
5251
private $factories = [];
5352
private $userProviderFactories = [];
5453
private $statelessFirewallKeys = [];
@@ -429,10 +428,6 @@ private function createFirewall(ContainerBuilder $container, string $id, array $
429428
}
430429
}
431430

432-
if (isset($firewall['anonymous'])) {
433-
$listenerKeys[] = 'anonymous';
434-
}
435-
436431
$config->replaceArgument(10, $listenerKeys);
437432
$config->replaceArgument(11, isset($firewall['switch_user']) ? $firewall['switch_user'] : null);
438433

@@ -488,30 +483,6 @@ private function createAuthenticationListeners(ContainerBuilder $container, stri
488483
}
489484
}
490485

491-
// Anonymous
492-
if (isset($firewall['anonymous'])) {
493-
if (null === $firewall['anonymous']['secret']) {
494-
$firewall['anonymous']['secret'] = new Parameter('container.build_hash');
495-
}
496-
497-
$listenerId = 'security.authentication.listener.anonymous.'.$id;
498-
$container
499-
->setDefinition($listenerId, new ChildDefinition('security.authentication.listener.anonymous'))
500-
->replaceArgument(1, $firewall['anonymous']['secret'])
501-
;
502-
503-
$listeners[] = new Reference($listenerId);
504-
505-
$providerId = 'security.authentication.provider.anonymous.'.$id;
506-
$container
507-
->setDefinition($providerId, new ChildDefinition('security.authentication.provider.anonymous'))
508-
->replaceArgument(0, $firewall['anonymous']['secret'])
509-
;
510-
511-
$authenticationProviders[] = $providerId;
512-
$hasListeners = true;
513-
}
514-
515486
if (false === $hasListeners) {
516487
throw new InvalidConfigurationException(sprintf('No authentication listener registered for firewall "%s".', $id));
517488
}

src/Symfony/Bundle/SecurityBundle/SecurityBundle.php

Lines changed: 2 additions & 0 deletions
AB26
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Bundle\SecurityBundle\DependencyInjection\Compiler\AddSecurityVotersPass;
1616
use Symfony\Bundle\SecurityBundle\DependencyInjection\Compiler\AddSessionDomainConstraintPass;
1717
use Symfony\Bundle\SecurityBundle\DependencyInjection\Compiler\RegisterCsrfTokenClearingLogoutHandlerPass;
18+
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\AnonymousFactory;
1819
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\FormLoginFactory;
1920
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\FormLoginLdapFactory;
2021
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\GuardAuthenticationFactory;
@@ -57,6 +58,7 @@ public function build(ContainerBuilder $container)
5758
$extension->addSecurityListenerFactory(new SimplePreAuthenticationFactory(false));
5859
$extension->addSecurityListenerFactory(new SimpleFormFactory(false));
5960
$extension->addSecurityListenerFactory(new GuardAuthenticationFactory());
61+
$extension->addSecurityListenerFactory(new AnonymousFactory());
6062

6163
$extension->addUserProviderFactory(new InMemoryFactory());
6264
$extension->addUserProviderFactory(new LdapFactory());

0 commit comments

Comments
 (0)
0