Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
81.82% |
18 / 22 |
|
66.67% |
2 / 3 |
CRAP | |
0.00% |
0 / 1 |
TierManager | |
81.82% |
18 / 22 |
|
66.67% |
2 / 3 |
8.38 | |
0.00% |
0 / 1 |
__construct | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
1 | |||
getClientTierConfig | |
69.23% |
9 / 13 |
|
0.00% |
0 / 1 |
5.73 | |||
getDefaultTierName | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\OAuthRateLimiter; |
4 | |
5 | use MediaWiki\Config\ServiceOptions; |
6 | use Psr\Log\LoggerInterface; |
7 | |
8 | class TierManager { |
9 | |
10 | public const CONSTRUCTOR_OPTIONS = [ |
11 | 'OAuthRateLimiterDefaultClientTier', |
12 | 'OAuthRateLimiterTierConfig' |
13 | ]; |
14 | |
15 | /** |
16 | * @var ServiceOptions |
17 | */ |
18 | private $serviceOptions; |
19 | |
20 | /** |
21 | * @var LoggerInterface |
22 | */ |
23 | private $logger; |
24 | |
25 | /** |
26 | * @var ClientTierStore |
27 | */ |
28 | private $clientTierStore; |
29 | |
30 | /** |
31 | * @param ServiceOptions $serviceOptions |
32 | * @param LoggerInterface $logger |
33 | * @param ClientTierStore $clientTierStore |
34 | */ |
35 | public function __construct( |
36 | ServiceOptions $serviceOptions, |
37 | LoggerInterface $logger, |
38 | ClientTierStore $clientTierStore |
39 | ) { |
40 | $serviceOptions->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS ); |
41 | $this->serviceOptions = $serviceOptions; |
42 | $this->logger = $logger; |
43 | $this->clientTierStore = $clientTierStore; |
44 | } |
45 | |
46 | /** |
47 | * @param string $clientID |
48 | * @return array |
49 | */ |
50 | public function getClientTierConfig( string $clientID ): array { |
51 | $tierName = $this->clientTierStore->getClientTierName( $clientID ); |
52 | $tierConfig = $this->serviceOptions->get( 'OAuthRateLimiterTierConfig' ); |
53 | |
54 | if ( $tierName !== null && array_key_exists( $tierName, $tierConfig ) ) { |
55 | return $tierConfig[$tierName]; |
56 | } |
57 | |
58 | $defaultTierName = $this->getDefaultTierName(); |
59 | if ( $defaultTierName === null ) { |
60 | return []; |
61 | } |
62 | if ( array_key_exists( $defaultTierName, $tierConfig ) ) { |
63 | return $tierConfig[$defaultTierName]; |
64 | } |
65 | |
66 | $this->logger->error( |
67 | "wgOAuthRateLimiterTierConfig does not contain $tierName" |
68 | ); |
69 | return []; |
70 | } |
71 | |
72 | /** |
73 | * @return int|string|null |
74 | */ |
75 | public function getDefaultTierName() { |
76 | $defaultClientTier = $this->serviceOptions->get( 'OAuthRateLimiterDefaultClientTier' ); |
77 | |
78 | if ( $defaultClientTier ) { |
79 | return $defaultClientTier; |
80 | } |
81 | |
82 | $this->logger->error( 'wgOAuthRateLimiterDefaultClientTier is empty or not properly set' ); |
83 | return null; |
84 | } |
85 | } |