101 lines
2.9 KiB
PHP
101 lines
2.9 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory;
|
|
|
|
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
|
|
use Symfony\Component\DependencyInjection\DefinitionDecorator;
|
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
use Symfony\Component\DependencyInjection\Reference;
|
|
|
|
/**
|
|
* FormLoginFactory creates services for form login authentication.
|
|
*
|
|
* @author Fabien Potencier <fabien@symfony.com>
|
|
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
|
|
*/
|
|
class FormLoginFactory extends AbstractFactory
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->addOption('username_parameter', '_username');
|
|
$this->addOption('password_parameter', '_password');
|
|
$this->addOption('csrf_parameter', '_csrf_token');
|
|
$this->addOption('intention', 'authenticate');
|
|
$this->addOption('post_only', true);
|
|
}
|
|
|
|
public function getPosition()
|
|
{
|
|
return 'form';
|
|
}
|
|
|
|
public function getKey()
|
|
{
|
|
return 'form-login';
|
|
}
|
|
|
|
public function addConfiguration(NodeDefinition $node)
|
|
{
|
|
parent::addConfiguration($node);
|
|
|
|
$node
|
|
->children()
|
|
->scalarNode('csrf_provider')->cannotBeEmpty()->end()
|
|
->end()
|
|
;
|
|
}
|
|
|
|
protected function getListenerId()
|
|
{
|
|
return 'security.authentication.listener.form';
|
|
}
|
|
|
|
protected function createAuthProvider(ContainerBuilder $container, $id, $config, $userProviderId)
|
|
{
|
|
$provider = 'security.authentication.provider.dao.'.$id;
|
|
$container
|
|
->setDefinition($provider, new DefinitionDecorator('security.authentication.provider.dao'))
|
|
->replaceArgument(0, new Reference($userProviderId))
|
|
->replaceArgument(2, $id)
|
|
;
|
|
|
|
return $provider;
|
|
}
|
|
|
|
protected function createListener($container, $id, $config, $userProvider)
|
|
{
|
|
$listenerId = parent::createListener($container, $id, $config, $userProvider);
|
|
|
|
if (isset($config['csrf_provider'])) {
|
|
$container
|
|
->getDefinition($listenerId)
|
|
->addArgument(new Reference($config['csrf_provider']))
|
|
;
|
|
}
|
|
|
|
return $listenerId;
|
|
}
|
|
|
|
protected function createEntryPoint($container, $id, $config, $defaultEntryPoint)
|
|
{
|
|
$entryPointId = 'security.authentication.form_entry_point.'.$id;
|
|
$container
|
|
->setDefinition($entryPointId, new DefinitionDecorator('security.authentication.form_entry_point'))
|
|
->addArgument(new Reference('security.http_utils'))
|
|
->addArgument($config['login_path'])
|
|
->addArgument($config['use_forward'])
|
|
;
|
|
|
|
return $entryPointId;
|
|
}
|
|
}
|