protected function createListener($container, $id, $config, $userProvider)
{
$listenerId = $this->getListenerId();
$listener = new DefinitionDecorator($listenerId);
$listener->replaceArgument(2, $id);
/* @var \Symfony\Component\DependencyInjection\ContainerBuilder $container */
$listenerId .= '.' . $id;
$container->setDefinition($listenerId, $listener);
$container->setAlias('ezpublish_rest.session_authenticator', $listenerId);
if ($container->hasDefinition('security.logout_listener.' . $id)) {
// Copying logout handlers to REST session authenticator, to allow proper logout using it.
$logoutListenerDef = $container->getDefinition('security.logout_listener.' . $id);
$logoutListenerDef->addMethodCall('addHandler', array(new Reference('ezpublish_rest.security.authentication.logout_handler')));
foreach ($logoutListenerDef->getMethodCalls() as $callArray) {
if ($callArray[0] !== 'addHandler') {
continue;
}
$listener->addMethodCall('addLogoutHandler', $callArray[1]);
}
}
return $listenerId;
}