Completed
Push — master ( ea0713...bd13d1 )
by Vitor
15s
created

AProvider   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 9
eloc 22
c 1
b 0
f 1
dl 0
loc 45
ccs 0
cts 23
cp 0
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getProviderId() 0 10 3
A getIdFromProviderFqcn() 0 10 4
A setAppConfig() 0 3 1
A idOverride() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * SPDX-FileCopyrightText: 2024 Christoph Wurst <[email protected]>
7
 * SPDX-License-Identifier: AGPL-3.0-or-later
8
 */
9
10
namespace OCA\TwoFactorGateway\Provider\Channel\Telegram\Provider;
11
12
use OCA\TwoFactorGateway\Exception\MessageTransmissionException;
13
use OCA\TwoFactorGateway\Provider\Gateway\TConfigurable;
14
use OCP\IAppConfig;
15
use Symfony\Component\Console\Input\InputInterface;
16
use Symfony\Component\Console\Output\OutputInterface;
17
18
abstract class AProvider implements IProvider {
19
	use TConfigurable;
20
	public IAppConfig $appConfig;
21
22
	/**
23
	 * @throws MessageTransmissionException
24
	 */
25
	#[\Override]
26
	abstract public function send(string $identifier, string $message);
27
28
	#[\Override]
29
	public function setAppConfig(IAppConfig $appConfig): void {
30
		$this->appConfig = $appConfig;
31
	}
32
33
	#[\Override]
34
	public static function idOverride(): ?string {
35
		return null;
36
	}
37
38
	#[\Override]
39
	public static function getProviderId(): string {
40
		if (static::SCHEMA['id'] ?? null) {
41
			return static::SCHEMA['id'];
42
		}
43
		$id = self::getIdFromProviderFqcn(static::class);
44
		if ($id === null) {
45
			throw new \LogicException('Cannot derive gateway id from FQCN: ' . static::class);
46
		}
47
		return $id;
48
	}
49
50
	#[\Override]
51
	abstract public function cliConfigure(InputInterface $input, OutputInterface $output): int;
52
53
	private static function getIdFromProviderFqcn(string $fqcn): ?string {
54
		$prefix = 'OCA\\TwoFactorGateway\\Provider\\Channel\\Telegram\\Provider\\Drivers\\';
55
		if (strncmp($fqcn, $prefix, strlen($prefix)) !== 0) {
56
			return null;
57
		}
58
		$type = substr($fqcn, strlen($prefix));
59
		if (strpos($type, '\\') !== false) {
60
			return null;
61
		}
62
		return $type !== '' ? strtolower($type) : null;
63
	}
64
}
65