Completed
Push — master ( 205548...aaddfb )
by Tobias
05:26
created

HappyrApiExtension::enabledExceptionHandler()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 10
cts 10
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 7
nc 2
nop 2
crap 2
1
<?php
2
3
namespace Happyr\ApiBundle\DependencyInjection;
4
5
use Happyr\ApiBundle\Security\Authentication\Provider\DebugProvider;
6
use Happyr\ApiBundle\Security\Authentication\Provider\DummyProvider;
7
use Happyr\ApiBundle\Security\Firewall\DebugListener;
8
use Symfony\Component\Config\FileLocator;
9
use Symfony\Component\DependencyInjection\ContainerBuilder;
10
use Symfony\Component\DependencyInjection\Loader;
11
use Symfony\Component\DependencyInjection\Reference;
12
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
13
14
/**
15
 * @author Tobias Nyholm <[email protected]>
16
 */
17
class HappyrApiExtension extends Extension
18
{
19
    /**
20
     * {@inheritdoc}
21
     */
22 1
    public function load(array $configs, ContainerBuilder $container)
23
    {
24 1
        $configuration = new Configuration();
25 1
        $config = $this->processConfiguration($configuration, $configs);
26
27 1
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
28 1
        $loader->load('services.yml');
29
30
        // add the error map to the error handler
31 1
        $wsseProviderId = 'happyr_api.wsse.security.authentication.provider';
32 1
        if (!$config['wsse']['enabled']) {
33
            $container->removeDefinition($wsseProviderId);
34
            $container->register($wsseProviderId, DummyProvider::class)
35
                ->addArgument(null);
36 1
        } elseif ($config['wsse']['debug']) {
37
            $container->removeDefinition($wsseProviderId);
38
            $container->register($wsseProviderId, DebugProvider::class)
39
                ->addArgument(null)
40
                ->addMethodCall('setDebugRoles', [empty($config['wsse']['debug_roles']) ? ['ROLE_USER', 'ROLE_API_USER'] : $config['wsse']['debug_roles']]);
41
            $container->getDefinition('happyr_api.wsse.security.authentication.listener')
42
                ->setClass(DebugListener::class);
43
        } else {
44 1
            $definition = $container->getDefinition($wsseProviderId);
45 1
            $definition->replaceArgument(0, new Reference($config['wsse']['user_provider']));
46 1
            $definition->replaceArgument(1, new Reference($config['wsse']['cache_service']));
47 1
            $definition->replaceArgument(2, $config['wsse']['lifetime']);
48
        }
49
50 1
        if ($config['exception_listener']['enabled']) {
51 1
            $this->enabledExceptionHandler($container, $config);
52 1
        } else {
53
            $container->removeDefinition('happyr_api.exception_listener');
54
        }
55 1
    }
56
57
    /**
58
     * @param ContainerBuilder $container
59
     * @param $config
60
     *
61
     * @return mixed
62
     */
63 1
    private function enabledExceptionHandler(ContainerBuilder $container, $config)
64
    {
65 1
        $def = $container->getDefinition('happyr_api.exception_listener');
66 1
        $def->replaceArgument(1, $config['exception_listener']['path_prefix']);
67 1
        if ('dev' !== $container->getParameter('kernel.environment')) {
68 1
            $def->addTag(
69 1
                'kernel.event_listener',
70 1
                ['event' => 'kernel.exception', 'method' => 'onKernelException', 'priority' => -10]
71 1
            );
72 1
        }
73 1
    }
74
}
75