RemoteAccessManagerExtension   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 1
dl 0
loc 62
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A loadConfiguration() 0 28 3
A beforeCompile() 0 13 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SixtyEightPublishers\Application\RemoteAccessManager\DI;
6
7
use Nette\DI\CompilerExtension;
8
use SixtyEightPublishers\Application\RemoteAccessManager\Handler\IAccessHandler;
9
use SixtyEightPublishers\Application\RemoteAccessManager\RemoteAccessManager;
10
use SixtyEightPublishers\Application\Environment\ConfigurationException;
11
use SixtyEightPublishers\Application\RemoteAccessManager\Handler\DefaultAccessHandler;
12
13
class RemoteAccessManagerExtension extends CompilerExtension
14
{
15
	/**
16
	 * @var array
17
	 */
18
	private $defaults = [
19
		'disable' => FALSE,
20
		'allowAll' => RemoteAccessManager::ALLOWED_ALL,
21
		'secretKey' => RemoteAccessManager::COOKIE_SECRET,
22
		'whitelist' => NULL,
23
		'blacklist' => NULL,
24
	];
25
26
	/**
27
	 * {@inheritdoc}
28
	 */
29
	public function loadConfiguration()
30
	{
31
		$builder = $this->getContainerBuilder();
32
		$config = $this->getConfig($this->defaults);
33
34
		if (!is_bool($config['allowAll'])) {
35
			throw new ConfigurationException("Config key 'allowAll' must be a bool value.");
36
		}
37
38
		if ($config['disable'] === TRUE) {
39
			return;
40
		}
41
42
		$builder->addDefinition($this->prefix('handler'))
43
			->setType(DefaultAccessHandler::class);
44
45
		$builder->addDefinition($this->prefix('remoteAccess'))
46
			->setType(RemoteAccessManager::class)
47
			->setArguments([
48
				'whitelist' => $config['whitelist'],
49
				'blacklist' => $config['blacklist'],
50
				'mode' => $config['allowAll'],
51
				'key' => $config['secretKey'],
52
				'consoleMode' => $builder->parameters['consoleMode'],
53
			])
54
			->addTag('run', TRUE)
55
			->addSetup('process');
56
	}
57
58
	/**
59
	 * {@inheritdoc}
60
	 */
61
	public function beforeCompile()
62
	{
63
		$builder = $this->getContainerBuilder();
64
		$handlers = $builder->findByType(IAccessHandler::class);
65
66
		if (count($handlers) > 1) {
67
			foreach ($handlers as $name => $definition) {
68
				if ($definition->getType() === DefaultAccessHandler::class) {
69
					$builder->removeDefinition($name);
70
				}
71
			}
72
		}
73
	}
74
}
75