From b1222624b2d1ac3b63b46fa3a4f59466c88c0037 Mon Sep 17 00:00:00 2001 From: Reinier Kip Date: Tue, 2 Dec 2014 16:29:24 +0100 Subject: [PATCH] Configure firewall's kernel exception listener with configured entry point or a default entry point --- .../DependencyInjection/SecurityExtension.php | 6 +++--- .../Tests/Functional/FirewallEntryPointTest.php | 14 ++++++++++++++ .../app/FirewallEntryPoint/config_form_login.yml | 9 +++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/FirewallEntryPoint/config_form_login.yml diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index dcc68f44cf..336f9de024 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -334,10 +334,10 @@ class SecurityExtension extends Extension } // Determine default entry point - $defaultEntryPoint = isset($firewall['entry_point']) ? $firewall['entry_point'] : null; + $configuredEntryPoint = isset($firewall['entry_point']) ? $firewall['entry_point'] : null; // Authentication listeners - list($authListeners, $defaultEntryPoint) = $this->createAuthenticationListeners($container, $id, $firewall, $authenticationProviders, $defaultProvider, $defaultEntryPoint); + list($authListeners, $defaultEntryPoint) = $this->createAuthenticationListeners($container, $id, $firewall, $authenticationProviders, $defaultProvider, $configuredEntryPoint); $listeners = array_merge($listeners, $authListeners); @@ -350,7 +350,7 @@ class SecurityExtension extends Extension $listeners[] = new Reference('security.access_listener'); // Exception listener - $exceptionListener = new Reference($this->createExceptionListener($container, $firewall, $id, $defaultEntryPoint)); + $exceptionListener = new Reference($this->createExceptionListener($container, $firewall, $id, $configuredEntryPoint ?: $defaultEntryPoint)); return array($matcher, $listeners, $exceptionListener); } diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/FirewallEntryPointTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/FirewallEntryPointTest.php index 23acde45a5..656d493009 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/FirewallEntryPointTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/FirewallEntryPointTest.php @@ -35,6 +35,20 @@ class FirewallEntryPointTest extends WebTestCase ); } + public function testItUsesTheConfiguredEntryPointFromTheExceptionListenerWithFormLoginAndNoCredentials() + { + $client = $this->createClient(array('test_case' => 'FirewallEntryPoint', 'root_config' => 'config_form_login.yml')); + $client->insulate(); + + $client->request('GET', '/secure/resource'); + + $this->assertEquals( + EntryPointStub::RESPONSE_TEXT, + $client->getResponse()->getContent(), + "Custom entry point wasn't started" + ); + } + protected function setUp() { parent::setUp(); diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/FirewallEntryPoint/config_form_login.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/FirewallEntryPoint/config_form_login.yml new file mode 100644 index 0000000000..8763b08110 --- /dev/null +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/FirewallEntryPoint/config_form_login.yml @@ -0,0 +1,9 @@ +imports: + - { resource: ./config.yml } + +security: + firewalls: + secure: + pattern: ^/ + form_login: + check_path: /login_check