Skip to content

Commit

Permalink
[FrameworkBundle] made firewall authentication listeners configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
fabpot committed Dec 2, 2010
1 parent 45e34c2 commit 978a14c
Show file tree
Hide file tree
Showing 7 changed files with 236 additions and 148 deletions.
@@ -0,0 +1,57 @@
<?php

namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Security\Factory;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;

class FormLoginFactory implements SecurityFactoryInterface
{
public function create(ContainerBuilder $container, $id, $config, $userProvider, $providerIds, $defaultEntryPoint)
{
$provider = 'security.authentication.provider.dao.'.$id;
$container
->register($provider, '%security.authentication.provider.dao.class%')
->setArguments(array(new Reference($userProvider), new Reference('security.account_checker'), new Reference('security.encoder.'.$providerIds[$userProvider])));
;

// listener
$listenerId = 'security.authentication.listener.form.'.$id;
$listener = $container->setDefinition($listenerId, clone $container->getDefinition('security.authentication.listener.form'));
$arguments = $listener->getArguments();
$arguments[1] = new Reference($provider);
$listener->setArguments($arguments);

$options = array(
'check_path' => '/login_check',
'login_path' => '/login',
'use_forward' => false,
'always_use_default_target_path' => false,
'default_target_path' => '/',
'target_path_parameter' => '_target_path',
'use_referer' => false,
'failure_path' => null,
'failure_forward' => false,
);
foreach (array_keys($options) as $key) {
if (isset($config[$key])) {
$options[$key] = $config[$key];
}
}
$container->setParameter('security.authentication.form.options', $options);
$container->setParameter('security.authentication.form.login_path', $options['login_path']);
$container->setParameter('security.authentication.form.use_forward', $options['use_forward']);

return array($provider, $listenerId, 'security.authentication.form_entry_point');
}

public function getPosition()
{
return 'form';
}

public function getKey()
{
return 'form-login';
}
}
@@ -0,0 +1,45 @@
<?php

namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Security\Factory;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;

class HttpBasicFactory implements SecurityFactoryInterface
{
public function create(ContainerBuilder $container, $id, $config, $userProvider, $providerIds, $defaultEntryPoint)
{
$provider = 'security.authentication.provider.dao.'.$id;
$container
->register($provider, '%security.authentication.provider.dao.class%')
->setArguments(array(new Reference($userProvider), new Reference('security.account_checker'), new Reference('security.encoder.'.$providerIds[$userProvider])));
;

// listener
$listenerId = 'security.authentication.listener.basic.'.$id;
$listener = $container->setDefinition($listenerId, clone $container->getDefinition('security.authentication.listener.basic'));
$arguments = $listener->getArguments();
$arguments[1] = new Reference($provider);
$listener->setArguments($arguments);

if (isset($config['path'])) {
$container->setParameter('security.authentication.form.path', $config['path']);
}

if (null === $defaultEntryPoint) {
$defaultEntryPoint = 'security.authentication.basic_entry_point';
}

return array($provider, $listenerId, $defaultEntryPoint);
}

public function getPosition()
{
return 'http';
}

public function getKey()
{
return 'http-basic';
}
}
@@ -0,0 +1,41 @@
<?php

namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Security\Factory;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;

class HttpDigestFactory implements SecurityFactoryInterface
{
public function create(ContainerBuilder $container, $id, $config, $userProvider, $providerIds, $defaultEntryPoint)
{
$provider = 'security.authentication.provider.dao.'.$id;
$container
->register($provider, '%security.authentication.provider.dao.class%')
->setArguments(array(new Reference($userProvider), new Reference('security.account_checker'), new Reference('security.encoder.'.$providerIds[$userProvider])));
;

// listener
$listenerId = 'security.authentication.listener.digest.'.$id;
$listener = $container->setDefinition($listenerId, clone $container->getDefinition('security.authentication.listener.digest'));
$arguments = $listener->getArguments();
$arguments[1] = new Reference($userProvider);
$listener->setArguments($arguments);

if (null === $defaultEntryPoint) {
$defaultEntryPoint = 'security.authentication.digest_entry_point';
}

return array($provider, $listenerId, $defaultEntryPoint);
}

public function getPosition()
{
return 'http';
}

public function getKey()
{
return 'http-digest';
}
}
@@ -0,0 +1,14 @@
<?php

namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Security\Factory;

use Symfony\Component\DependencyInjection\ContainerBuilder;

interface SecurityFactoryInterface
{
public function create(ContainerBuilder $container, $id, $config, $userProvider, $providerIds, $defaultEntryPoint);

public function getPosition();

public function getKey();
}
@@ -0,0 +1,37 @@
<?php

namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Security\Factory;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;

class X509Factory implements SecurityFactoryInterface
{
public function create(ContainerBuilder $container, $id, $config, $userProvider, $providerIds, $defaultEntryPoint)
{
$provider = 'security.authentication.provider.pre_authenticated.'.$id;
$container
->register($provider, '%security.authentication.provider.pre_authenticated.class%')
->setArguments(array(new Reference($userProvider), new Reference('security.account_checker')))
;

// listener
$listenerId = 'security.authentication.listener.x509.'.$id;
$listener = $container->setDefinition($listenerId, clone $container->getDefinition('security.authentication.listener.x509'));
$arguments = $listener->getArguments();
$arguments[1] = new Reference($provider);
$listener->setArguments($arguments);

return array($provider, $listenerId, $defaultEntryPoint);
}

public function getPosition()
{
return 'pre_auth';
}

public function getKey()
{
return 'x509';
}
}

0 comments on commit 978a14c

Please sign in to comment.