Configuration   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 122
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 12
eloc 41
dl 0
loc 122
rs 10
c 0
b 0
f 0

12 Methods

Rating   Name   Duplication   Size   Complexity  
A setUserProvider() 0 5 1
A getUserProvider() 0 3 1
A getSecurityProvider() 0 3 1
A getRoleChecker() 0 3 1
A setRoleChecker() 0 5 1
A setSecurityProvider() 0 5 1
A disable() 0 5 1
A getTimezone() 0 3 1
A enable() 0 5 1
A __construct() 0 11 1
A configureOptions() 0 16 1
A isEnabled() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DH\Auditor;
6
7
use Symfony\Component\OptionsResolver\OptionsResolver;
8
9
/**
10
 * @see \DH\Auditor\Tests\ConfigurationTest
11
 */
12
final class Configuration
13
{
14
    private bool $enabled;
15
16
    private string $timezone;
17
18
    /**
19
     * @var null|callable
20
     */
21
    private $userProvider;
22
23
    /**
24
     * @var null|callable
25
     */
26
    private $roleChecker;
27
28
    /**
29
     * @var null|callable
30
     */
31
    private $securityProvider;
32
33
    public function __construct(array $options)
34
    {
35
        $resolver = new OptionsResolver();
36
        $this->configureOptions($resolver);
37
        $config = $resolver->resolve($options);
38
39
        $this->enabled = $config['enabled'];
40
        $this->timezone = $config['timezone'];
41
        $this->userProvider = $config['user_provider'];
42
        $this->securityProvider = $config['security_provider'];
43
        $this->roleChecker = $config['role_checker'];
44
    }
45
46
    /**
47
     * enabled auditing.
48
     */
49
    public function enable(): self
50
    {
51
        $this->enabled = true;
52
53
        return $this;
54
    }
55
56
    /**
57
     * disable auditing.
58
     */
59
    public function disable(): self
60
    {
61
        $this->enabled = false;
62
63
        return $this;
64
    }
65
66
    /**
67
     * Is auditing enabled.
68
     */
69
    public function isEnabled(): bool
70
    {
71
        return $this->enabled;
72
    }
73
74
    /**
75
     * Get the value of timezone.
76
     */
77
    public function getTimezone(): string
78
    {
79
        return $this->timezone;
80
    }
81
82
    public function setUserProvider(callable $userProvider): self
83
    {
84
        $this->userProvider = $userProvider;
85
86
        return $this;
87
    }
88
89
    public function getUserProvider(): ?callable
90
    {
91
        return $this->userProvider;
92
    }
93
94
    public function setSecurityProvider(callable $securityProvider): self
95
    {
96
        $this->securityProvider = $securityProvider;
97
98
        return $this;
99
    }
100
101
    public function getSecurityProvider(): ?callable
102
    {
103
        return $this->securityProvider;
104
    }
105
106
    public function setRoleChecker(callable $roleChecker): self
107
    {
108
        $this->roleChecker = $roleChecker;
109
110
        return $this;
111
    }
112
113
    public function getRoleChecker(): ?callable
114
    {
115
        return $this->roleChecker;
116
    }
117
118
    private function configureOptions(OptionsResolver $resolver): void
119
    {
120
        // https://symfony.com/doc/current/components/options_resolver.html
121
        $resolver
122
            ->setDefaults([
123
                'enabled' => true,
124
                'timezone' => 'UTC',
125
                'role_checker' => null,
126
                'user_provider' => null,
127
                'security_provider' => null,
128
            ])
129
            ->setAllowedTypes('enabled', 'bool')
130
            ->setAllowedTypes('timezone', 'string')
131
            ->setAllowedTypes('role_checker', ['null', 'string', 'callable'])
132
            ->setAllowedTypes('user_provider', ['null', 'string', 'callable'])
133
            ->setAllowedTypes('security_provider', ['null', 'string', 'callable'])
134
        ;
135
    }
136
}
137