Failed Conditions
Push — master ( a96c48...74e563 )
by Florent
02:28
created

JWSCollector::getJWSVerifiers()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
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\DataCollector;
15
16
use Jose\Component\Signature\JWSBuilder;
17
use Jose\Component\Signature\JWSVerifier;
18
use Jose\Component\Signature\Serializer\JWSSerializerManagerFactory;
19
use Symfony\Component\HttpFoundation\Request;
20
use Symfony\Component\HttpFoundation\Response;
21
22
final class JWSCollector implements Collector
23
{
24
    /**
25
     * @var JWSSerializerManagerFactory|null
26
     */
27
    private $jwsSerializerManagerFactory;
28
29
    /**
30
     * JWSCollector constructor.
31
     *
32
     * @param JWSSerializerManagerFactory|null $jwsSerializerManagerFactory
33
     */
34
    public function __construct(?JWSSerializerManagerFactory $jwsSerializerManagerFactory = null)
35
    {
36
        $this->jwsSerializerManagerFactory = $jwsSerializerManagerFactory;
37
    }
38
39
    /**
40
     * {@inheritdoc}
41
     */
42
    public function collect(array &$data, Request $request, Response $response, \Exception $exception = null)
43
    {
44
        $this->collectSupportedJWSSerializations($data);
45
        $this->collectSupportedJWSBuilders($data);
46
        $this->collectSupportedJWSVerifiers($data);
47
    }
48
49
    /**
50
     * @param array $data
51
     */
52
    private function collectSupportedJWSSerializations(array &$data)
53
    {
54
        $data['jws']['jws_serialization'] = [];
55
        if (null === $this->jwsSerializerManagerFactory) {
56
            return;
57
        }
58
        $serializers = $this->jwsSerializerManagerFactory->all();
59
        foreach ($serializers as $serializer) {
60
            $data['jws']['jws_serialization'][$serializer->name()] = $serializer->displayName();
61
        }
62
    }
63
64
    /**
65
     * @param array $data
66
     */
67
    private function collectSupportedJWSBuilders(array &$data)
68
    {
69
        $data['jws']['jws_builders'] = [];
70
        foreach ($this->jwsBuilders as $id => $jwsBuilder) {
71
            $data['jws']['jws_builders'][$id] = [
72
                'signature_algorithms' => $jwsBuilder->getSignatureAlgorithmManager()->list(),
73
            ];
74
        }
75
    }
76
77
    /**
78
     * @param array $data
79
     */
80
    private function collectSupportedJWSVerifiers(array &$data)
81
    {
82
        $data['jws']['jws_verifiers'] = [];
83
        foreach ($this->jwsVerifiers as $id => $jwsVerifier) {
84
            $data['jws']['jws_verifiers'][$id] = [
85
                'signature_algorithms' => $jwsVerifier->getSignatureAlgorithmManager()->list(),
86
            ];
87
        }
88
    }
89
90
    /**
91
     * @var JWSBuilder[]
92
     */
93
    private $jwsBuilders = [];
94
95
    /**
96
     * @param string     $id
97
     * @param JWSBuilder $jwsBuilder
98
     */
99
    public function addJWSBuilder(string $id, JWSBuilder $jwsBuilder)
100
    {
101
        $this->jwsBuilders[$id] = $jwsBuilder;
102
    }
103
104
    /**
105
     * @var JWSVerifier[]
106
     */
107
    private $jwsVerifiers = [];
108
109
    /**
110
     * @param string      $id
111
     * @param JWSVerifier $jwsVerifier
112
     */
113
    public function addJWSVerifier(string $id, JWSVerifier $jwsVerifier)
114
    {
115
        $this->jwsVerifiers[$id] = $jwsVerifier;
116
    }
117
}
118