Completed
Pull Request — develop (#225)
by
unknown
04:34 queued 02:10
created

IdentityProviderFactory   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

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

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 18 2
A create() 0 8 2
1
<?php
2
/**
3
 * Copyright 2010 SURFnet B.V.
4
 *
5
 * Licensed under the Apache License, Version 2.0 (the "License");
6
 * you may not use this file except in compliance with the License.
7
 * You may obtain a copy of the License at
8
 *
9
 *     http://www.apache.org/licenses/LICENSE-2.0
10
 *
11
 * Unless required by applicable law or agreed to in writing, software
12
 * distributed under the License is distributed on an "AS IS" BASIS,
13
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
 * See the License for the specific language governing permissions and
15
 * limitations under the License.
16
 */
17
18
namespace Surfnet\StepupSelfService\SelfServiceBundle\Service\RemoteVetting;
19
20
use SAML2\Configuration\PrivateKey;
21
use Surfnet\SamlBundle\Entity\IdentityProvider;
22
use Surfnet\StepupSelfService\SelfServiceBundle\Assert;
23
use Surfnet\StepupSelfService\SelfServiceBundle\Exception\InvalidRemoteVettingIdentityProviderException;
24
use Surfnet\StepupSelfService\SelfServiceBundle\Service\RemoteVetting\Configuration\RemoteVettingConfiguration;
25
26
class IdentityProviderFactory
27
{
28
    /**
29
     * @var IdentityProvider[]
30
     */
31
    private $identityProviders = [];
32
33
    /**
34
     * @param RemoteVettingConfiguration $configuration
35
     */
36
    public function __construct(RemoteVettingConfiguration $configuration)
37
    {
38
        foreach ($configuration->getRemoteVettingIdps() as $idp) {
39
            Assert::file($idp->getPrivateKey(), 'privateKey should be a file');
40
            Assert::file($idp->getCertificateFile(), 'certificateFile should be a file');
41
42
            $idpConfiguration = [
43
                'name' => $idp->getName(),
44
                'entityId' => $idp->getEntityId(),
45
                'ssoUrl' => $idp->getSsoUrl(),
46
                'certificateFile' => $idp->getCertificateFile(),
47
                'privateKeys' => [new PrivateKey($idp->getPrivateKey(), PrivateKey::NAME_DEFAULT)],
48
            ];
49
50
            // set idp
51
            $this->identityProviders[$idp->getSlug()] = new IdentityProvider($idpConfiguration);
52
        }
53
    }
54
55
    /**
56
     * @param string $name
57
     * @return IdentityProvider
58
     */
59
    public function create($name)
60
    {
61
        if (array_key_exists($name, $this->identityProviders)) {
62
            return $this->identityProviders[$name];
63
        }
64
65
        throw new InvalidRemoteVettingIdentityProviderException(sprintf("Invalid IdP requested '%s'", $name));
66
    }
67
}
68