Oauth2EncryptionKeyUsageAction::run()   B
last analyzed

Complexity

Conditions 7
Paths 7

Size

Total Lines 41
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 27
c 1
b 0
f 0
dl 0
loc 41
ccs 0
cts 27
cp 0
rs 8.5546
cc 7
nc 7
nop 0
crap 56
1
<?php
2
3
namespace rhertogh\Yii2Oauth2Server\controllers\console\encryption;
4
5
use rhertogh\Yii2Oauth2Server\controllers\console\Oauth2EncryptionController;
6
use rhertogh\Yii2Oauth2Server\interfaces\controllers\console\encryption\Oauth2EncryptionKeyUsageActionInterface;
7
use yii\base\Action;
8
use yii\console\ExitCode;
9
use yii\console\widgets\Table;
10
11
/**
12
 * @property Oauth2EncryptionController $controller
13
 */
14
class Oauth2EncryptionKeyUsageAction extends Action implements Oauth2EncryptionKeyUsageActionInterface
15
{
16
    /**
17
     * Lists how many times each encryption key is used.
18
     *
19
     * @throws \Throwable
20
     * @throws \yii\base\InvalidConfigException
21
     */
22
    public function run()
23
    {
24
        $module = $this->controller->module;
25
        $modelUsage = $module->getStorageEncryptionKeyUsage();
26
27
        if ($this->controller->keyName) {
28
            $keyName = $this->controller->keyName;
29
            $result = [];
30
            foreach ($modelUsage as $model => $modelResult) {
31
                if (array_key_exists($keyName, $modelResult)) {
32
                    $result[$model] = $modelResult[$keyName];
33
                } else {
34
                    $result[$model] = '[none]';
35
                }
36
            }
37
38
            $this->controller->stdout('Storage Encryption Key Usage for "' . $keyName . '":' . PHP_EOL);
39
            $this->controller->stdout(Table::widget([
40
                'headers' => ['Model', 'Usage'],
41
                'rows' => array_map(fn($model) => [$model, $result[$model]], array_keys($result)),
42
            ]));
43
        } else {
44
            $result = [];
45
            foreach ($modelUsage as $modelResult) {
46
                foreach ($modelResult as $keyName => $modelPks) {
47
                    if (array_key_exists($keyName, $result)) {
48
                        $result[$keyName] += count($modelPks);
49
                    } else {
50
                        $result[$keyName] = count($modelPks);
51
                    }
52
                }
53
            }
54
55
            $this->controller->stdout('Storage Encryption Keys Usage:' . PHP_EOL);
56
            $this->controller->stdout(Table::widget([
57
                'headers' => ['Key', 'Usage'],
58
                'rows' => array_map(fn($keyName) => [$keyName, $result[$keyName]], array_keys($result)),
59
            ]));
60
        }
61
62
        return ExitCode::OK;
63
    }
64
}
65