TokenManagerFactory::__invoke()   A
last analyzed

Complexity

Conditions 6
Paths 4

Size

Total Lines 22
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 6.1308

Importance

Changes 0
Metric Value
cc 6
eloc 12
nc 4
nop 1
dl 0
loc 22
ccs 11
cts 13
cp 0.8462
crap 6.1308
rs 9.2222
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Service\Token;
6
7
use App\Exception\ConfigException;
8
use Psr\Container\ContainerInterface;
9
10
class TokenManagerFactory
11
{
12 2
    public function __invoke(ContainerInterface $container): TokenManager
13
    {
14 2
        $config = $container->get('config')['token_manager'] ?? null;
15 2
        if ($config === null) {
16 1
            throw new ConfigException("['token_manager'] config key is missing.");
17
        }
18 1
        if (mb_strlen($config['private_key'] ?? '') < 32) {
19
            throw new ConfigException("['tokenManager']['private_key'] config key is must be at least 32 chars long.");
20
        }
21
22 1
        if (isset($config['default_expiry']) && (
23 1
            !is_numeric($config['default_expiry']) || $config['default_expiry'] < 0
24
        )) {
25
            throw new ConfigException("['tokenManager']['default_expiry'] must be numeric > 0");
26
        }
27
28 1
        $defaultExpiry = $config['default_expiry'] ?? TokenManager::DEFAULT_EXPIRY;
29
30 1
        $issuer   = $config['default_issuer'] ?? $this->getDefaultIssuer();
31 1
        $audience = $config['default_audience'] ?? $this->getDefaultIssuer();
32
33 1
        return new TokenManager($config['private_key'], $defaultExpiry, $issuer, $audience);
34
    }
35
36 1
    public function getDefaultIssuer(): string
37
    {
38 1
        return $_SERVER['SERVER_NAME'] ?? 'localhost';
39
    }
40
}
41