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