SAND-framework/console/skel/symfony-app/src/Session/AuthBundle/DependencyInjection/Configuration.php
2020-12-09 10:26:26 +01:00

114 lines
4.5 KiB
PHP

<?php
namespace App\Session\AuthBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
/**
* This is the class that validates and merges configuration from your app/config files.
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/configuration.html}
*/
class Configuration implements ConfigurationInterface
{
/**
* {@inheritdoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder('session_auth');
$rootNode = $treeBuilder->getRootNode();
$rootNode
->children()
->scalarNode('homepage')->defaultNull()->end()
->scalarNode('authentication_service')->defaultNull()->end()
->scalarNode('provider')->defaultNull()->end()
->booleanNode('use_default_provider')->defaultTrue()->end()
->scalarNode('user_entity')->defaultNull()->end()
->scalarNode('type_auth')->isRequired()->cannotBeEmpty()
->validate()
->ifNotInArray(array('Rsa', 'Cas','Session'))
->thenInvalid("La méthode d'authentification %s n'est pas gérée, seuls Rsa et Cas sont acceptés")
->end()
->end()
->scalarNode('environment')->end()
->end()
;
$rootNode
->validate()
->ifTrue(function ($v) {
if (!is_null($v['user_entity'])) {
$class = $v['user_entity'];
if (!class_exists($class)) {
return true;
}
return !array_key_exists("Symfony\Component\Security\Core\User\UserInterface", class_implements($class));
}
return false;
})
->thenInvalid("La classe renseignée pour 'entity' doit implémenter Symfony\Component\Security\Core\User\UserInterface")
->end();
$this->_addCasConfig($rootNode);
$this->_addRsaConfig($rootNode);
return $treeBuilder;
}
private function _addCasConfig(ArrayNodeDefinition $node)
{
$node
->children()
->arrayNode('cas')->info('A déclarer si authentification pas CAS.')
->addDefaultsIfNotSet()
->treatNullLike(['hostname' => null])
->treatNullLike(['port' => null])
->treatNullLike(['uri' => null])
->children()
->scalarNode('hostname')->defaultNull()->end()
->scalarNode('port')->defaultNull()->end()
->scalarNode('uri')->defaultNull()->end()
->end()
->end()
->end()
;
$node
->validate()
->ifTrue(function ($v) {
$cas_config = $v['cas'];
return ($v['type_auth']=="Cas" && (is_null($cas_config['hostname']) || is_null($cas_config['port']) || is_null($cas_config['uri'])));
})
->thenInvalid("En utilisant le type d'authentification Cas vous devez renseigner la section 'cas' et ses clés 'hostname', 'port', 'uri'")
->end();
}
private function _addRsaConfig(ArrayNodeDefinition $node)
{
$node
->children()
->arrayNode('rsa')->addDefaultsIfNotSet()->info('A déclarer si authentification pas RSA.')
->addDefaultsIfNotSet()
->treatNullLike(['logout_url' => null])
->children()
->scalarNode('logout_url')->defaultNull()->end()
->end()
->end()
->end()
;
$node
->validate()
->ifTrue(function ($v) {
$rsa_config = $v['rsa'];
return ($v['type_auth']==="Rsa" && is_null($rsa_config['logout_url']));
})
->thenInvalid("En utilisant le type d'authentification Rsa vous devez renseigner la section 'rsa' et sa clé 'logout_url'")
->end();
}
}