Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
AbuseLoggerFactory
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
3 / 3
3
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getProtectedVarsAccessLogger
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
1
 newLogger
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace MediaWiki\Extension\AbuseFilter;
4
5use MediaWiki\CheckUser\Services\CheckUserInsert;
6use MediaWiki\Config\ServiceOptions;
7use MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterHookRunner;
8use MediaWiki\Extension\AbuseFilter\Parser\RuleCheckerFactory;
9use MediaWiki\Extension\AbuseFilter\Variables\VariableHolder;
10use MediaWiki\Extension\AbuseFilter\Variables\VariablesBlobStore;
11use MediaWiki\Extension\AbuseFilter\Variables\VariablesManager;
12use MediaWiki\Title\Title;
13use MediaWiki\Title\TitleFactory;
14use MediaWiki\User\ActorStore;
15use MediaWiki\User\User;
16use Psr\Log\LoggerInterface;
17use Wikimedia\Rdbms\LBFactory;
18
19class AbuseLoggerFactory {
20    public const SERVICE_NAME = ServiceNames::AbuseLoggerFactory;
21
22    public const CONSTRUCTOR_OPTIONS = [
23        'AbuseFilterLogIP',
24        'AbuseFilterNotifications',
25        'AbuseFilterNotificationsPrivate',
26    ];
27
28    /**
29     * The default amount of time after which a duplicate log entry can be inserted. 24 hours (in
30     * seconds).
31     *
32     * @var int
33     */
34    private const DEFAULT_DEBOUNCE_DELAY = 24 * 60 * 60;
35
36    public function __construct(
37        private readonly CentralDBManager $centralDBManager,
38        private readonly FilterLookup $filterLookup,
39        private readonly VariablesBlobStore $varBlobStore,
40        private readonly VariablesManager $varManager,
41        private readonly EditRevUpdater $editRevUpdater,
42        private readonly AbuseFilterPermissionManager $afPermissionManager,
43        private readonly RuleCheckerFactory $ruleCheckerFactory,
44        private readonly LBFactory $lbFactory,
45        private readonly ActorStore $actorStore,
46        private readonly TitleFactory $titleFactory,
47        private readonly ServiceOptions $options,
48        private readonly string $wikiID,
49        private readonly string $requestIP,
50        private readonly LoggerInterface $logger,
51        private readonly AbuseFilterHookRunner $hookRunner,
52        private readonly ?CheckUserInsert $checkUserInsert
53    ) {
54        $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
55    }
56
57    /**
58     * @param int $delay
59     * @return ProtectedVarsAccessLogger
60     */
61    public function getProtectedVarsAccessLogger(
62        int $delay = self::DEFAULT_DEBOUNCE_DELAY
63    ): ProtectedVarsAccessLogger {
64        return new ProtectedVarsAccessLogger(
65            $this->logger,
66            $this->lbFactory,
67            $this->actorStore,
68            $this->hookRunner,
69            $this->titleFactory,
70            $delay
71        );
72    }
73
74    /**
75     * @param Title $title
76     * @param User $user
77     * @param VariableHolder $vars
78     * @return AbuseLogger
79     */
80    public function newLogger(
81        Title $title,
82        User $user,
83        VariableHolder $vars
84    ): AbuseLogger {
85        return new AbuseLogger(
86            $this->centralDBManager,
87            $this->filterLookup,
88            $this->varBlobStore,
89            $this->varManager,
90            $this->editRevUpdater,
91            $this->lbFactory,
92            $this->ruleCheckerFactory,
93            $this->afPermissionManager,
94            $this->options,
95            $this->wikiID,
96            $this->requestIP,
97            $title,
98            $user,
99            $vars,
100            $this->checkUserInsert
101        );
102    }
103}