Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
45 / 45 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
1 / 1 |
FilterRunnerFactory | |
100.00% |
45 / 45 |
|
100.00% |
2 / 2 |
3 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
17 / 17 |
|
100.00% |
1 / 1 |
1 | |||
newRunner | |
100.00% |
28 / 28 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\AbuseFilter; |
4 | |
5 | use BagOStuff; |
6 | use IBufferingStatsdDataFactory; |
7 | use MediaWiki\Config\ServiceOptions; |
8 | use MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagger; |
9 | use MediaWiki\Extension\AbuseFilter\Consequences\ConsequencesExecutorFactory; |
10 | use MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterHookRunner; |
11 | use MediaWiki\Extension\AbuseFilter\Parser\RuleCheckerFactory; |
12 | use MediaWiki\Extension\AbuseFilter\VariableGenerator\VariableGeneratorFactory; |
13 | use MediaWiki\Extension\AbuseFilter\Variables\VariableHolder; |
14 | use MediaWiki\Extension\AbuseFilter\Variables\VariablesManager; |
15 | use MediaWiki\Extension\AbuseFilter\Watcher\EmergencyWatcher; |
16 | use MediaWiki\Extension\AbuseFilter\Watcher\UpdateHitCountWatcher; |
17 | use MediaWiki\Title\Title; |
18 | use NullStatsdDataFactory; |
19 | use Psr\Log\LoggerInterface; |
20 | use User; |
21 | |
22 | class FilterRunnerFactory { |
23 | public const SERVICE_NAME = 'AbuseFilterFilterRunnerFactory'; |
24 | |
25 | /** @var AbuseFilterHookRunner */ |
26 | private $hookRunner; |
27 | /** @var FilterProfiler */ |
28 | private $filterProfiler; |
29 | /** @var ChangeTagger */ |
30 | private $changeTagger; |
31 | /** @var FilterLookup */ |
32 | private $filterLookup; |
33 | /** @var RuleCheckerFactory */ |
34 | private $ruleCheckerFactory; |
35 | /** @var ConsequencesExecutorFactory */ |
36 | private $consExecutorFactory; |
37 | /** @var AbuseLoggerFactory */ |
38 | private $abuseLoggerFactory; |
39 | /** @var VariablesManager */ |
40 | private $varManager; |
41 | /** @var VariableGeneratorFactory */ |
42 | private $varGeneratorFactory; |
43 | /** @var EmergencyCache */ |
44 | private $emergencyCache; |
45 | /** @var UpdateHitCountWatcher */ |
46 | private $updateHitCountWatcher; |
47 | /** @var EmergencyWatcher */ |
48 | private $emergencyWatcher; |
49 | /** @var BagOStuff */ |
50 | private $localCache; |
51 | /** @var LoggerInterface */ |
52 | private $logger; |
53 | /** @var LoggerInterface */ |
54 | private $editStashLogger; |
55 | /** @var IBufferingStatsdDataFactory */ |
56 | private $statsdDataFactory; |
57 | /** @var ServiceOptions */ |
58 | private $options; |
59 | |
60 | /** |
61 | * @param AbuseFilterHookRunner $hookRunner |
62 | * @param FilterProfiler $filterProfiler |
63 | * @param ChangeTagger $changeTagger |
64 | * @param FilterLookup $filterLookup |
65 | * @param RuleCheckerFactory $ruleCheckerFactory |
66 | * @param ConsequencesExecutorFactory $consExecutorFactory |
67 | * @param AbuseLoggerFactory $abuseLoggerFactory |
68 | * @param VariablesManager $varManager |
69 | * @param VariableGeneratorFactory $varGeneratorFactory |
70 | * @param EmergencyCache $emergencyCache |
71 | * @param UpdateHitCountWatcher $updateHitCountWatcher |
72 | * @param EmergencyWatcher $emergencyWatcher |
73 | * @param BagOStuff $localCache |
74 | * @param LoggerInterface $logger |
75 | * @param LoggerInterface $editStashLogger |
76 | * @param IBufferingStatsdDataFactory $statsdDataFactory |
77 | * @param ServiceOptions $options |
78 | */ |
79 | public function __construct( |
80 | AbuseFilterHookRunner $hookRunner, |
81 | FilterProfiler $filterProfiler, |
82 | ChangeTagger $changeTagger, |
83 | FilterLookup $filterLookup, |
84 | RuleCheckerFactory $ruleCheckerFactory, |
85 | ConsequencesExecutorFactory $consExecutorFactory, |
86 | AbuseLoggerFactory $abuseLoggerFactory, |
87 | VariablesManager $varManager, |
88 | VariableGeneratorFactory $varGeneratorFactory, |
89 | EmergencyCache $emergencyCache, |
90 | UpdateHitCountWatcher $updateHitCountWatcher, |
91 | EmergencyWatcher $emergencyWatcher, |
92 | BagOStuff $localCache, |
93 | LoggerInterface $logger, |
94 | LoggerInterface $editStashLogger, |
95 | IBufferingStatsdDataFactory $statsdDataFactory, |
96 | ServiceOptions $options |
97 | ) { |
98 | $this->hookRunner = $hookRunner; |
99 | $this->filterProfiler = $filterProfiler; |
100 | $this->changeTagger = $changeTagger; |
101 | $this->filterLookup = $filterLookup; |
102 | $this->ruleCheckerFactory = $ruleCheckerFactory; |
103 | $this->consExecutorFactory = $consExecutorFactory; |
104 | $this->abuseLoggerFactory = $abuseLoggerFactory; |
105 | $this->varManager = $varManager; |
106 | $this->varGeneratorFactory = $varGeneratorFactory; |
107 | $this->emergencyCache = $emergencyCache; |
108 | $this->updateHitCountWatcher = $updateHitCountWatcher; |
109 | $this->emergencyWatcher = $emergencyWatcher; |
110 | $this->localCache = $localCache; |
111 | $this->logger = $logger; |
112 | $this->editStashLogger = $editStashLogger; |
113 | $this->statsdDataFactory = $statsdDataFactory; |
114 | $this->options = $options; |
115 | } |
116 | |
117 | /** |
118 | * @param User $user |
119 | * @param Title $title |
120 | * @param VariableHolder $vars |
121 | * @param string $group |
122 | * @return FilterRunner |
123 | */ |
124 | public function newRunner( |
125 | User $user, |
126 | Title $title, |
127 | VariableHolder $vars, |
128 | string $group |
129 | ): FilterRunner { |
130 | // TODO Add a method to this class taking these as params? Add a hook for custom watchers |
131 | $watchers = [ $this->updateHitCountWatcher, $this->emergencyWatcher ]; |
132 | return new FilterRunner( |
133 | $this->hookRunner, |
134 | $this->filterProfiler, |
135 | $this->changeTagger, |
136 | $this->filterLookup, |
137 | $this->ruleCheckerFactory, |
138 | $this->consExecutorFactory, |
139 | $this->abuseLoggerFactory, |
140 | $this->varManager, |
141 | $this->varGeneratorFactory, |
142 | $this->emergencyCache, |
143 | $watchers, |
144 | new EditStashCache( |
145 | $this->localCache, |
146 | // Bots do not use edit stashing, so avoid distorting the stats |
147 | $user->isBot() ? new NullStatsdDataFactory() : $this->statsdDataFactory, |
148 | $this->varManager, |
149 | $this->editStashLogger, |
150 | $title, |
151 | $group |
152 | ), |
153 | $this->logger, |
154 | $this->options, |
155 | $user, |
156 | $title, |
157 | $vars, |
158 | $group |
159 | ); |
160 | } |
161 | } |