Failed Conditions
Push — master ( 509a4e...389d77 )
by Florent
01:57
created

ConfigurationHelper::addKey()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 7
nc 1
nop 4
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * The MIT License (MIT)
7
 *
8
 * Copyright (c) 2014-2017 Spomky-Labs
9
 *
10
 * This software may be modified and distributed under the terms
11
 * of the MIT license.  See the LICENSE file for details.
12
 */
13
14
namespace Jose\Bundle\JoseFramework\Helper;
15
16
use Symfony\Component\DependencyInjection\ContainerBuilder;
17
18
/**
19
 * This helper will help you to create services configuration.
20
 */
21
final class ConfigurationHelper
22
{
23
    const BUNDLE_ALIAS = 'jose';
24
25
    /**
26
     * @param ContainerBuilder $container
27
     * @param string           $name
28
     * @param string[]         $signatureAlgorithms
29
     * @param bool             $is_public
30
     */
31
    public static function addJWSBuilder(ContainerBuilder $container, string $name, array $signatureAlgorithms, bool $is_public = true)
32
    {
33
        $config = [
34
            self::BUNDLE_ALIAS => [
35
                'jws_builders' => [
36
                    $name => [
37
                        'is_public' => $is_public,
38
                        'signature_algorithms' => $signatureAlgorithms,
39
                    ],
40
                ],
41
            ],
42
        ];
43
        self::updateJoseConfiguration($container, $config, 'jws_builders');
44
    }
45
46
    /**
47
     * @param ContainerBuilder $container
48
     * @param string           $name
49
     * @param string[]         $signatureAlgorithms
50
     * @param string[]         $headerCheckers
51
     * @param bool             $is_public
52
     */
53
    public static function addJWSVerifier(ContainerBuilder $container, string $name, array $signatureAlgorithms, array  $headerCheckers, bool $is_public = true)
54
    {
55
        $config = [
56
            self::BUNDLE_ALIAS => [
57
                'jws_verifiers' => [
58
                    $name => [
59
                        'is_public' => $is_public,
60
                        'signature_algorithms' => $signatureAlgorithms,
61
                        'header_checkers' => $headerCheckers,
62
                    ],
63
                ],
64
            ],
65
        ];
66
67
        self::updateJoseConfiguration($container, $config, 'jws_verifiers');
68
    }
69
70
    /**
71
     * @param ContainerBuilder $container
72
     * @param string           $name
73
     * @param string[]         $serializers
74
     * @param bool             $is_public
75
     */
76
    public static function addJWSSerializer(ContainerBuilder $container, string $name, array $serializers, bool $is_public = true)
77
    {
78
        $config = [
79
            self::BUNDLE_ALIAS => [
80
                'jws_serializers' => [
81
                    $name => [
82
                        'is_public' => $is_public,
83
                        'serializers' => $serializers,
84
                    ],
85
                ],
86
            ],
87
        ];
88
89
        self::updateJoseConfiguration($container, $config, 'jws_serializers');
90
    }
91
92
    /**
93
     * @param ContainerBuilder $container
94
     * @param string           $name
95
     * @param string[]         $serializers
96
     * @param bool             $is_public
97
     */
98
    public static function addJWESerializer(ContainerBuilder $container, string $name, array $serializers, bool $is_public = true)
99
    {
100
        $config = [
101
            self::BUNDLE_ALIAS => [
102
                'jwe_serializers' => [
103
                    $name => [
104
                        'is_public' => $is_public,
105
                        'serializers' => $serializers,
106
                    ],
107
                ],
108
            ],
109
        ];
110
111
        self::updateJoseConfiguration($container, $config, 'jwe_serializers');
112
    }
113
114
    /**
115
     * @param ContainerBuilder $container
116
     * @param string           $name
117
     * @param string[]         $claimCheckers
118
     * @param bool             $is_public
119
     */
120
    public static function addClaimChecker(ContainerBuilder $container, string $name, array  $claimCheckers, bool $is_public = true)
121
    {
122
        $config = [
123
            self::BUNDLE_ALIAS => [
124
                'claim_checkers' => [
125
                    $name => [
126
                        'is_public' => $is_public,
127
                        'claims' => $claimCheckers,
128
                    ],
129
                ],
130
            ],
131
        ];
132
133
        self::updateJoseConfiguration($container, $config, 'claim_checkers');
134
    }
135
136
    /**
137
     * @param ContainerBuilder $container
138
     * @param string           $name
139
     * @param string[]         $headerCheckers
140
     * @param bool             $is_public
141
     */
142
    public static function addHeaderChecker(ContainerBuilder $container, string $name, array  $headerCheckers, bool $is_public = true)
143
    {
144
        $config = [
145
            self::BUNDLE_ALIAS => [
146
                'header_checkers' => [
147
                    $name => [
148
                        'is_public' => $is_public,
149
                        'headers' => $headerCheckers,
150
                    ],
151
                ],
152
            ],
153
        ];
154
155
        self::updateJoseConfiguration($container, $config, 'header_checkers');
156
    }
157
158
    /**
159
     * @param ContainerBuilder $container
160
     * @param string           $name
161
     * @param string           $type
162
     * @param array            $parameters
163
     */
164
    public static function addKey(ContainerBuilder $container, string $name, string $type, array  $parameters)
165
    {
166
        $config = [
167
            self::BUNDLE_ALIAS => [
168
                'keys' => [
169
                    $name => [
170
                        $type => $parameters,
171
                    ],
172
                ],
173
            ],
174
        ];
175
176
        self::updateJoseConfiguration($container, $config, 'keys');
177
    }
178
179
    /**
180
     * @param ContainerBuilder $container
181
     * @param string           $name
182
     * @param string           $type
183
     * @param array            $parameters
184
     */
185
    public static function addKeyset(ContainerBuilder $container, string $name, string $type, array  $parameters)
186
    {
187
        $config = [
188
            self::BUNDLE_ALIAS => [
189
                'key_sets' => [
190
                    $name => [
191
                        $type => $parameters,
192
                    ],
193
                ],
194
            ],
195
        ];
196
197
        self::updateJoseConfiguration($container, $config, 'key_sets');
198
    }
199
200
    /**
201
     * @param ContainerBuilder $container
202
     * @param string           $name
203
     * @param array            $parameters
204
     */
205
    public static function addKeyUri(ContainerBuilder $container, string $name, array $parameters)
206
    {
207
        $config = [
208
            self::BUNDLE_ALIAS => [
209
                'jwk_uris' => [
210
                    $name =>  $parameters,
211
                ],
212
            ],
213
        ];
214
215
        self::updateJoseConfiguration($container, $config, 'jwk_uris');
216
    }
217
218
    /**
219
     * @param ContainerBuilder $container
220
     * @param string           $name
221
     * @param array            $keyEncryptionAlgorithm
222
     * @param array            $contentEncryptionAlgorithms
223
     * @param array            $compressionMethods
224
     * @param bool             $is_public
225
     */
226
    public static function addJWEBuilder(ContainerBuilder $container, string $name, array $keyEncryptionAlgorithm, array $contentEncryptionAlgorithms, array $compressionMethods = ['DEF'], bool $is_public = true)
227
    {
228
        $config = [
229
            self::BUNDLE_ALIAS => [
230
                'jwe_builders' => [
231
                    $name => [
232
                        'is_public' => $is_public,
233
                        'key_encryption_algorithms' => $keyEncryptionAlgorithm,
234
                        'content_encryption_algorithms' => $contentEncryptionAlgorithms,
235
                        'compression_methods' => $compressionMethods,
236
                    ],
237
                ],
238
            ],
239
        ];
240
241
        self::updateJoseConfiguration($container, $config, 'jwe_builders');
242
    }
243
244
    /**
245
     * @param ContainerBuilder $container
246
     * @param string           $name
247
     * @param array            $keyEncryptionAlgorithm
248
     * @param array            $contentEncryptionAlgorithms
249
     * @param array            $compressionMethods
250
     * @param array            $headerCheckers
251
     * @param bool             $is_public
252
     */
253
    public static function addJWEDecrypter(ContainerBuilder $container, string $name, array $keyEncryptionAlgorithm, array $contentEncryptionAlgorithms, array $compressionMethods = ['DEF'], array  $headerCheckers = [], bool $is_public = true)
254
    {
255
        $config = [
256
            self::BUNDLE_ALIAS => [
257
                'jwe_decrypters' => [
258
                    $name => [
259
                        'is_public' => $is_public,
260
                        'key_encryption_algorithms' => $keyEncryptionAlgorithm,
261
                        'content_encryption_algorithms' => $contentEncryptionAlgorithms,
262
                        'compression_methods' => $compressionMethods,
263
                        'header_checkers' => $headerCheckers,
264
                    ],
265
                ],
266
            ],
267
        ];
268
269
        self::updateJoseConfiguration($container, $config, 'jwe_decrypters');
270
    }
271
272
    /**
273
     * @param ContainerBuilder $container
274
     * @param array            $config
275
     * @param string           $element
276
     */
277
    private static function updateJoseConfiguration(ContainerBuilder $container, array $config, string $element)
278
    {
279
        $jose_config = current($container->getExtensionConfig(self::BUNDLE_ALIAS));
280
        if (!isset($jose_config[$element])) {
281
            $jose_config[$element] = [];
282
        }
283
        $jose_config[$element] = array_merge($jose_config[$element], $config[self::BUNDLE_ALIAS][$element]);
284
        $container->prependExtensionConfig(self::BUNDLE_ALIAS, $jose_config);
285
    }
286
}
287