Passed
Pull Request — master (#669)
by
unknown
01:57
created

TConfigurable::keyFromFieldName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
c 1
b 0
f 0
dl 0
loc 2
ccs 2
cts 2
cp 1
rs 10
cc 1
nc 1
nop 2
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * SPDX-FileCopyrightText: 2025 LibreCode coop and contributors
7
 * SPDX-License-Identifier: AGPL-3.0-or-later
8
 */
9
10
namespace OCA\TwoFactorGateway\Provider\Gateway;
11
12
use OCA\TwoFactorGateway\AppInfo\Application;
13
use OCA\TwoFactorGateway\Exception\ConfigurationException;
14
use OCP\IAppConfig;
15
16
trait TConfigurable {
17
	/**
18
	 * @return string|static
19
	 * @throws ConfigurationException
20
	 */
21 10
	public function __call(string $name, array $args) {
22 10
		if (!preg_match('/^(?<operation>get|set|delete)(?<field>[A-Z][A-Za-z0-9_]*)$/', $name, $matches)) {
23 1
			throw new ConfigurationException('Invalid method ' . $name);
24
		}
25 9
		$field = strtolower(preg_replace('/(?<!^)[A-Z]/', '_$0', $matches['field']));
26 9
		$key = $this->keyFromField($field);
27
28 8
		switch ($matches['operation']) {
29 8
			case 'get':
30 4
				$val = (string)$this->getAppConfig()->getValueString(Application::APP_ID, $key, '');
31 4
				if ($val === '') {
32 2
					throw new ConfigurationException('No value set for ' . $field);
33
				}
34 3
				return $val;
35
36 7
			case 'set':
37 4
				$this->getAppConfig()->setValueString(Application::APP_ID, $key, (string)($args[0] ?? ''));
38 4
				return $this;
39
40 4
			case 'delete':
41 4
				$this->getAppConfig()->deleteKey(Application::APP_ID, $key);
42 4
				return $this;
43
		}
44
		throw new ConfigurationException('Invalid operation ' . $matches['operation']);
45
	}
46
47
	/**
48
	 * @return string
49
	 */
50 10
	private static function keyFromFieldName(string $id, string $fieldName):string {
51 10
		return $id . '_' . $fieldName;
52
	}
53
54
	/**
55
	 * @throws ConfigurationException
56
	 */
57 9
	private function keyFromField(string $fieldName): string {
58 9
		$settings = $this->getSettings();
0 ignored issues
show
Bug introduced by
The method getSettings() does not exist on OCA\TwoFactorGateway\Pro...r\Gateway\TConfigurable. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

58
		/** @scrutinizer ignore-call */ 
59
  $settings = $this->getSettings();
Loading history...
59 9
		$fields = $settings->fields;
60 9
		foreach ($fields as $field) {
61 9
			if ($field->field === $fieldName) {
62 8
				return static::keyFromFieldName($settings->id, $fieldName);
63
			}
64
		}
65 1
		throw new ConfigurationException('Invalid configuration field: ' . $fieldName . ', check SCHEMA at ' . static::class);
66
	}
67
68
	/**
69
	 * @throws ConfigurationException
70
	 */
71 8
	private function getAppConfig(): IAppConfig {
72 8
		if (!isset($this->appConfig)) {
73
			throw new ConfigurationException('No app config set');
74
		}
75 8
		return $this->appConfig;
76
	}
77
}
78