Completed
Pull Request — develop (#172)
by
unknown
01:55
created

OpenConextProfileExtension   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 106
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 6
dl 0
loc 106
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A load() 0 33 2
A parseAttributeSupportMailConfiguration() 0 9 1
A parseInformationRequestMailConfiguration() 0 9 1
A parseDefaultLocaleConfiguration() 0 6 1
A parseAvailableLocaleConfiguration() 0 10 1
A parseLocaleCookieStorageConfiguration() 0 24 2
A parseEngineBlockAttributeAggregationConfiguration() 0 6 1
1
<?php
2
3
/**
4
 * Copyright 2015 SURFnet B.V.
5
 *
6
 * Licensed under the Apache License, Version 2.0 (the "License");
7
 * you may not use this file except in compliance with the License.
8
 * You may obtain a copy of the License at
9
 *
10
 *     http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing, software
13
 * distributed under the License is distributed on an "AS IS" BASIS,
14
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
 * See the License for the specific language governing permissions and
16
 * limitations under the License.
17
 */
18
19
namespace OpenConext\ProfileBundle\DependencyInjection;
20
21
use OpenConext\Profile\Value\AttributeAggregation\AttributeAggregationEnabledAttributes;
22
use OpenConext\Profile\Value\Locale;
23
use OpenConext\Profile\Value\LocaleSet;
24
use OpenConext\ProfileBundle\Service\UserService;
25
use OpenConext\ProfileBundle\Storage\SingleCookieStorage;
26
use Symfony\Component\DependencyInjection\ContainerBuilder;
27
use Symfony\Component\Config\FileLocator;
28
use Symfony\Component\DependencyInjection\Definition;
29
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
30
use Symfony\Component\DependencyInjection\Loader;
31
use \DateTime;
32
33
class OpenConextProfileExtension extends Extension
34
{
35
    public function load(array $configs, ContainerBuilder $container)
36
    {
37
        $configuration = new Configuration();
38
        $config        = $this->processConfiguration($configuration, $configs);
39
40
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
41
        $loader->load('services.yml');
42
        
43
        $this->parseAttributeSupportMailConfiguration($config['attribute_support'], $container);
44
        $this->parseInformationRequestMailConfiguration($config['information_request'], $container);
45
46
        $this->parseDefaultLocaleConfiguration($config['default_locale'], $container);
47
        $this->parseAvailableLocaleConfiguration($config['locales'], $container);
48
        $this->parseLocaleCookieStorageConfiguration(
49
            $config['locale_cookie_domain'],
50
            $config['locale_cookie_key'],
51
            $config['locale_cookie_expires_in'],
52
            $config['locale_cookie_secure'],
53
            $config['locale_cookie_http_only'],
54
            $container
55
        );
56
57
        $this->parseEngineBlockAttributeAggregationConfiguration(
58
            $config['attribute_aggregation_supported_attributes'],
59
            $container
60
        );
61
62
        // The user lifecycle can be disabled
63
        if (!$container->getParameter('user_lifecycle_enabled')) {
64
            $container->getDefinition(UserService::class)
65
                ->removeMethodCall('setUserLifecycleApiClient');
66
        }
67
    }
68
69
    private function parseAttributeSupportMailConfiguration(array $attributeSupportConfig, ContainerBuilder $container)
70
    {
71
        $container
72
            ->getDefinition('profile.attribute_support.email_from')
73
            ->replaceArgument(0, $attributeSupportConfig['email_from']);
74
        $container
75
            ->getDefinition('profile.attribute_support.email_to')
76
            ->replaceArgument(0, $attributeSupportConfig['email_to']);
77
    }
78
79
    private function parseInformationRequestMailConfiguration(array $attributeSupportConfig, ContainerBuilder $container)
80
    {
81
        $container
82
            ->getDefinition('profile.information_request.email_from')
83
            ->replaceArgument(0, $attributeSupportConfig['email_from']);
84
        $container
85
            ->getDefinition('profile.information_request.email_to')
86
            ->replaceArgument(0, $attributeSupportConfig['email_to']);
87
    }
88
89
    private function parseDefaultLocaleConfiguration($defaultLocaleConfig, ContainerBuilder $container)
90
    {
91
        $container
92
            ->getDefinition(Locale::class)
93
            ->replaceArgument(0, $defaultLocaleConfig);
94
    }
95
96
    private function parseAvailableLocaleConfiguration(array $availableLocaleConfig, ContainerBuilder $container)
97
    {
98
        $availableLocales = array_map(function ($availableLocale) {
99
            return new Definition(Locale::class, [$availableLocale]);
100
        }, $availableLocaleConfig);
101
102
        $container
103
            ->getDefinition(LocaleSet::class)
104
            ->replaceArgument(0, $availableLocales);
105
    }
106
107
    private function parseLocaleCookieStorageConfiguration(
108
        $localeCookieDomain,
109
        $localeCookieKey,
110
        $localeCookieExpiresIn,
111
        $localeCookieSecure,
112
        $localeCookieHttpOnly,
113
        ContainerBuilder $container
114
    ) {
115
116
        if ($localeCookieExpiresIn !== null) {
117
            $localeCookieExpirationDateDefinition = new Definition(DateTime::class);
118
            $localeCookieExpirationDateDefinition->addMethodCall('modify', [$localeCookieExpiresIn]);
119
        } else {
120
            $localeCookieExpirationDateDefinition = null;
121
        }
122
123
        $container
124
            ->getDefinition(SingleCookieStorage::class)
125
            ->replaceArgument(0, $localeCookieDomain)
126
            ->replaceArgument(1, $localeCookieKey)
127
            ->replaceArgument(2, $localeCookieExpirationDateDefinition)
128
            ->replaceArgument(3, $localeCookieSecure)
129
            ->replaceArgument(4, $localeCookieHttpOnly);
130
    }
131
132
    private function parseEngineBlockAttributeAggregationConfiguration($aaConfig, ContainerBuilder $container)
133
    {
134
        $container
135
            ->getDefinition(AttributeAggregationEnabledAttributes::class)
136
            ->replaceArgument(0, $aaConfig);
137
    }
138
}
139