Passed
Pull Request — main (#540)
by
unknown
12:11 queued 06:14
created

applySsoRegistrationBypassOptionChangedEvent()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 10
nc 2
nop 1
dl 0
loc 16
rs 9.9332
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * Copyright 2022 SURFnet bv
7
 *
8
 * Licensed under the Apache License, Version 2.0 (the "License");
9
 * you may not use this file except in compliance with the License.
10
 * You may obtain a copy of the License at
11
 *
12
 *     http://www.apache.org/licenses/LICENSE-2.0
13
 *
14
 * Unless required by applicable law or agreed to in writing, software
15
 * distributed under the License is distributed on an "AS IS" BASIS,
16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
 * See the License for the specific language governing permissions and
18
 * limitations under the License.
19
 */
0 ignored issues
show
Coding Style introduced by
Missing @link tag in file comment
Loading history...
20
21
namespace Surfnet\StepupMiddleware\GatewayBundle\Projector;
22
23
use Surfnet\Stepup\Configuration\Event\SsoRegistrationBypassOptionChangedEvent;
24
use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent;
25
use Surfnet\Stepup\Projector\Projector;
26
use Surfnet\Stepup\Configuration\Event\InstitutionConfigurationRemovedEvent;
27
use Surfnet\Stepup\Configuration\Event\NewInstitutionConfigurationCreatedEvent;
28
use Surfnet\Stepup\Configuration\Event\SsoOn2faOptionChangedEvent;
29
use Surfnet\StepupMiddleware\GatewayBundle\Entity\InstitutionConfiguration;
30
use Surfnet\StepupMiddleware\GatewayBundle\Repository\InstitutionConfigurationRepository;
31
32
class InstitutionConfigurationProjector extends Projector
0 ignored issues
show
Coding Style introduced by
Missing doc comment for class InstitutionConfigurationProjector
Loading history...
33
{
34
    public function __construct(private readonly InstitutionConfigurationRepository $repository)
35
    {
36
    }
37
38
    public function applyNewInstitutionConfigurationCreatedEvent(NewInstitutionConfigurationCreatedEvent $event): void
39
    {
40
        $institutionConfiguration = new InstitutionConfiguration(
41
            (string)$event->institution,
42
            $event->ssoOn2faOption->isEnabled(),
43
            $event->ssoRegistrationBypassOption->isEnabled(),
44
        );
45
46
        $this->repository->save($institutionConfiguration);
47
    }
48
49
    public function applySsoOn2faOptionChangedEvent(SsoOn2faOptionChangedEvent $event): void
50
    {
51
        $institutionConfiguration = $this->repository->findByInstitution((string)$event->institution);
52
        if ($institutionConfiguration instanceof InstitutionConfiguration) {
53
            $institutionConfiguration->ssoOn2faEnabled = $event->ssoOn2faOption->isEnabled();
54
            $this->repository->save($institutionConfiguration);
55
            return;
56
        }
57
        // It can happen that the event changed for an institution that already exists, but is not yet projected to
58
        // this projection. In that case we can create it.
59
        $institutionConfiguration = new InstitutionConfiguration(
60
            (string)$event->institution,
61
            $event->ssoOn2faOption->isEnabled(),
62
            false,
63
        );
64
        $this->repository->save($institutionConfiguration);
65
    }
66
67
    public function applySsoRegistrationBypassOptionChangedEvent(SsoRegistrationBypassOptionChangedEvent $event): void
68
    {
69
        $institutionConfiguration = $this->repository->findByInstitution((string)$event->institution);
70
        if ($institutionConfiguration instanceof InstitutionConfiguration) {
71
            $institutionConfiguration->ssoRegistrationBypass = $event->ssoRegistrationBypassOption->isEnabled();
72
            $this->repository->save($institutionConfiguration);
73
            return;
74
        }
75
        // It can happen that the event changed for an institution that already exists, but is not yet projected to
76
        // this projection. In that case we can create it.
77
        $institutionConfiguration = new InstitutionConfiguration(
78
            (string)$event->institution,
79
            false,
80
            $event->ssoRegistrationBypassOption->isEnabled(),
81
        );
82
        $this->repository->save($institutionConfiguration);
83
    }
84
85
    public function applyInstitutionConfigurationRemovedEvent(InstitutionConfigurationRemovedEvent $event): void
86
    {
87
        $this->repository->removeFor((string)$event->institution);
88
    }
89
90
    protected function applyIdentityForgottenEvent(IdentityForgottenEvent $event): void
91
    {
92
        // do nothing, no sensitive data in this projection
93
    }
94
}
95