Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
n/a
0 / 0
n/a
0 / 0
CRAP
n/a
0 / 0
1<?php
2
3use MediaWiki\Config\ServiceOptions;
4use MediaWiki\Extension\AbuseFilter\AbuseFilterPermissionManager as PermManager;
5use MediaWiki\Extension\AbuseFilter\AbuseLogger;
6use MediaWiki\Extension\AbuseFilter\AbuseLoggerFactory;
7use MediaWiki\Extension\AbuseFilter\BlockAutopromoteStore;
8use MediaWiki\Extension\AbuseFilter\CentralDBManager;
9use MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagger;
10use MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagsManager;
11use MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagValidator;
12use MediaWiki\Extension\AbuseFilter\Consequences\ConsequencesExecutor;
13use MediaWiki\Extension\AbuseFilter\Consequences\ConsequencesExecutorFactory as ConsExecutorFactory;
14use MediaWiki\Extension\AbuseFilter\Consequences\ConsequencesFactory;
15use MediaWiki\Extension\AbuseFilter\Consequences\ConsequencesLookup;
16use MediaWiki\Extension\AbuseFilter\Consequences\ConsequencesRegistry;
17use MediaWiki\Extension\AbuseFilter\EchoNotifier;
18use MediaWiki\Extension\AbuseFilter\EditBox\EditBoxBuilderFactory;
19use MediaWiki\Extension\AbuseFilter\EditRevUpdater;
20use MediaWiki\Extension\AbuseFilter\EmergencyCache;
21use MediaWiki\Extension\AbuseFilter\FilterCompare;
22use MediaWiki\Extension\AbuseFilter\FilterImporter;
23use MediaWiki\Extension\AbuseFilter\FilterLookup;
24use MediaWiki\Extension\AbuseFilter\FilterProfiler;
25use MediaWiki\Extension\AbuseFilter\FilterRunner;
26use MediaWiki\Extension\AbuseFilter\FilterRunnerFactory;
27use MediaWiki\Extension\AbuseFilter\FilterStore;
28use MediaWiki\Extension\AbuseFilter\FilterUser;
29use MediaWiki\Extension\AbuseFilter\FilterValidator;
30use MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterHookRunner;
31use MediaWiki\Extension\AbuseFilter\KeywordsManager;
32use MediaWiki\Extension\AbuseFilter\Parser\RuleCheckerFactory;
33use MediaWiki\Extension\AbuseFilter\SpecsFormatter;
34use MediaWiki\Extension\AbuseFilter\TextExtractor;
35use MediaWiki\Extension\AbuseFilter\VariableGenerator\VariableGeneratorFactory;
36use MediaWiki\Extension\AbuseFilter\Variables\LazyVariableComputer;
37use MediaWiki\Extension\AbuseFilter\Variables\VariablesBlobStore;
38use MediaWiki\Extension\AbuseFilter\Variables\VariablesFormatter;
39use MediaWiki\Extension\AbuseFilter\Variables\VariablesManager;
40use MediaWiki\Extension\AbuseFilter\Watcher\EmergencyWatcher;
41use MediaWiki\Extension\AbuseFilter\Watcher\UpdateHitCountWatcher;
42use MediaWiki\Logger\LoggerFactory;
43use MediaWiki\MediaWikiServices;
44use MediaWiki\Session\SessionManager;
45use Wikimedia\Equivset\Equivset;
46
47// This file is actually covered by AbuseFilterServicesTest, but it's not possible to specify a path
48// in @covers annotations (https://github.com/sebastianbergmann/phpunit/issues/3794)
49// @codeCoverageIgnoreStart
50
51return [
52    AbuseFilterHookRunner::SERVICE_NAME => static function ( MediaWikiServices $services ): AbuseFilterHookRunner {
53        return new AbuseFilterHookRunner( $services->getHookContainer() );
54    },
55    KeywordsManager::SERVICE_NAME => static function ( MediaWikiServices $services ): KeywordsManager {
56        return new KeywordsManager( $services->get( AbuseFilterHookRunner::SERVICE_NAME ) );
57    },
58    FilterProfiler::SERVICE_NAME => static function ( MediaWikiServices $services ): FilterProfiler {
59        return new FilterProfiler(
60            $services->getWRStatsFactory(),
61            new ServiceOptions(
62                FilterProfiler::CONSTRUCTOR_OPTIONS,
63                $services->getMainConfig()
64            ),
65            WikiMap::getCurrentWikiDbDomain()->getId(),
66            $services->getStatsdDataFactory(),
67            LoggerFactory::getInstance( 'AbuseFilter' )
68        );
69    },
70    PermManager::SERVICE_NAME => static function ( MediaWikiServices $services ): PermManager {
71        // No longer has any dependencies
72        return new PermManager();
73    },
74    ChangeTagger::SERVICE_NAME => static function ( MediaWikiServices $services ): ChangeTagger {
75        return new ChangeTagger(
76            $services->getService( ChangeTagsManager::SERVICE_NAME )
77        );
78    },
79    ChangeTagsManager::SERVICE_NAME => static function ( MediaWikiServices $services ): ChangeTagsManager {
80        return new ChangeTagsManager(
81            $services->getDBLoadBalancer(),
82            $services->getMainWANObjectCache(),
83            $services->get( CentralDBManager::SERVICE_NAME )
84        );
85    },
86    ChangeTagValidator::SERVICE_NAME => static function ( MediaWikiServices $services ): ChangeTagValidator {
87        return new ChangeTagValidator(
88            $services->getService( ChangeTagsManager::SERVICE_NAME )
89        );
90    },
91    CentralDBManager::SERVICE_NAME => static function ( MediaWikiServices $services ): CentralDBManager {
92        return new CentralDBManager(
93            $services->getDBLoadBalancerFactory(),
94            $services->getMainConfig()->get( 'AbuseFilterCentralDB' ),
95            $services->getMainConfig()->get( 'AbuseFilterIsCentral' )
96        );
97    },
98    BlockAutopromoteStore::SERVICE_NAME => static function ( MediaWikiServices $services ): BlockAutopromoteStore {
99        return new BlockAutopromoteStore(
100            $services->getMainObjectStash(),
101            LoggerFactory::getInstance( 'AbuseFilter' ),
102            $services->get( FilterUser::SERVICE_NAME )
103        );
104    },
105    FilterUser::SERVICE_NAME => static function ( MediaWikiServices $services ): FilterUser {
106        return new FilterUser(
107            // TODO We need a proper MessageLocalizer, see T247127
108            RequestContext::getMain(),
109            $services->getUserGroupManager(),
110            LoggerFactory::getInstance( 'AbuseFilter' )
111        );
112    },
113    RuleCheckerFactory::SERVICE_NAME => static function ( MediaWikiServices $services ): RuleCheckerFactory {
114        return new RuleCheckerFactory(
115            $services->getContentLanguage(),
116            // We could use $services here, but we need the fallback
117            ObjectCache::getLocalServerInstance( 'hash' ),
118            LoggerFactory::getInstance( 'AbuseFilter' ),
119            $services->getService( KeywordsManager::SERVICE_NAME ),
120            $services->get( VariablesManager::SERVICE_NAME ),
121            $services->getStatsdDataFactory(),
122            new Equivset(),
123            $services->getMainConfig()->get( 'AbuseFilterConditionLimit' )
124        );
125    },
126    FilterLookup::SERVICE_NAME => static function ( MediaWikiServices $services ): FilterLookup {
127        return new FilterLookup(
128            $services->getDBLoadBalancer(),
129            $services->getMainWANObjectCache(),
130            $services->get( CentralDBManager::SERVICE_NAME )
131        );
132    },
133    EmergencyCache::SERVICE_NAME => static function ( MediaWikiServices $services ): EmergencyCache {
134        return new EmergencyCache(
135            $services->getMainObjectStash(),
136            $services->getMainConfig()->get( 'AbuseFilterEmergencyDisableAge' )
137        );
138    },
139    EmergencyWatcher::SERVICE_NAME => static function ( MediaWikiServices $services ): EmergencyWatcher {
140        return new EmergencyWatcher(
141            $services->getService( EmergencyCache::SERVICE_NAME ),
142            $services->getDBLoadBalancer(),
143            $services->getService( FilterLookup::SERVICE_NAME ),
144            $services->getService( EchoNotifier::SERVICE_NAME ),
145            new ServiceOptions(
146                EmergencyWatcher::CONSTRUCTOR_OPTIONS,
147                $services->getMainConfig()
148            )
149        );
150    },
151    EchoNotifier::SERVICE_NAME => static function ( MediaWikiServices $services ): EchoNotifier {
152        return new EchoNotifier(
153            $services->getService( FilterLookup::SERVICE_NAME ),
154            $services->getService( ConsequencesRegistry::SERVICE_NAME ),
155            ExtensionRegistry::getInstance()->isLoaded( 'Echo' )
156        );
157    },
158    FilterValidator::SERVICE_NAME => static function ( MediaWikiServices $services ): FilterValidator {
159        return new FilterValidator(
160            $services->get( ChangeTagValidator::SERVICE_NAME ),
161            $services->get( RuleCheckerFactory::SERVICE_NAME ),
162            $services->get( PermManager::SERVICE_NAME ),
163            new ServiceOptions(
164                FilterValidator::CONSTRUCTOR_OPTIONS,
165                $services->getMainConfig()
166            )
167        );
168    },
169    FilterCompare::SERVICE_NAME => static function ( MediaWikiServices $services ): FilterCompare {
170        return new FilterCompare(
171            $services->get( ConsequencesRegistry::SERVICE_NAME )
172        );
173    },
174    FilterImporter::SERVICE_NAME => static function ( MediaWikiServices $services ): FilterImporter {
175        return new FilterImporter(
176            new ServiceOptions(
177                FilterImporter::CONSTRUCTOR_OPTIONS,
178                $services->getMainConfig()
179            ),
180            $services->get( ConsequencesRegistry::SERVICE_NAME )
181        );
182    },
183    FilterStore::SERVICE_NAME => static function ( MediaWikiServices $services ): FilterStore {
184        return new FilterStore(
185            $services->get( ConsequencesRegistry::SERVICE_NAME ),
186            $services->getDBLoadBalancer(),
187            $services->get( FilterProfiler::SERVICE_NAME ),
188            $services->get( FilterLookup::SERVICE_NAME ),
189            $services->get( ChangeTagsManager::SERVICE_NAME ),
190            $services->get( FilterValidator::SERVICE_NAME ),
191            $services->get( FilterCompare::SERVICE_NAME ),
192            $services->get( EmergencyCache::SERVICE_NAME )
193        );
194    },
195    ConsequencesFactory::SERVICE_NAME => static function ( MediaWikiServices $services ): ConsequencesFactory {
196        return new ConsequencesFactory(
197            new ServiceOptions(
198                ConsequencesFactory::CONSTRUCTOR_OPTIONS,
199                $services->getMainConfig()
200            ),
201            LoggerFactory::getInstance( 'AbuseFilter' ),
202            $services->getBlockUserFactory(),
203            $services->getDatabaseBlockStore(),
204            $services->getUserGroupManager(),
205            $services->getMainObjectStash(),
206            $services->get( ChangeTagger::SERVICE_NAME ),
207            $services->get( BlockAutopromoteStore::SERVICE_NAME ),
208            $services->get( FilterUser::SERVICE_NAME ),
209            SessionManager::getGlobalSession(),
210            // TODO: Use a proper MessageLocalizer once available (T247127)
211            RequestContext::getMain(),
212            $services->getUserEditTracker(),
213            $services->getUserFactory()
214        );
215    },
216    EditBoxBuilderFactory::SERVICE_NAME => static function ( MediaWikiServices $services ): EditBoxBuilderFactory {
217        return new EditBoxBuilderFactory(
218            $services->get( PermManager::SERVICE_NAME ),
219            $services->get( KeywordsManager::SERVICE_NAME ),
220            ExtensionRegistry::getInstance()->isLoaded( 'CodeEditor' )
221        );
222    },
223    ConsequencesLookup::SERVICE_NAME => static function ( MediaWikiServices $services ): ConsequencesLookup {
224        return new ConsequencesLookup(
225            $services->getDBLoadBalancer(),
226            $services->get( CentralDBManager::SERVICE_NAME ),
227            $services->get( ConsequencesRegistry::SERVICE_NAME ),
228            LoggerFactory::getInstance( 'AbuseFilter' )
229        );
230    },
231    ConsequencesRegistry::SERVICE_NAME => static function ( MediaWikiServices $services ): ConsequencesRegistry {
232        return new ConsequencesRegistry(
233            $services->get( AbuseFilterHookRunner::SERVICE_NAME ),
234            $services->getMainConfig()->get( 'AbuseFilterActions' )
235        );
236    },
237    AbuseLoggerFactory::SERVICE_NAME => static function ( MediaWikiServices $services ): AbuseLoggerFactory {
238        return new AbuseLoggerFactory(
239            $services->get( CentralDBManager::SERVICE_NAME ),
240            $services->get( FilterLookup::SERVICE_NAME ),
241            $services->get( VariablesBlobStore::SERVICE_NAME ),
242            $services->get( VariablesManager::SERVICE_NAME ),
243            $services->get( EditRevUpdater::SERVICE_NAME ),
244            $services->getDBLoadBalancer(),
245            new ServiceOptions(
246                AbuseLogger::CONSTRUCTOR_OPTIONS,
247                $services->getMainConfig()
248            ),
249            WikiMap::getCurrentWikiDbDomain()->getId(),
250            RequestContext::getMain()->getRequest()->getIP()
251        );
252    },
253    UpdateHitCountWatcher::SERVICE_NAME => static function ( MediaWikiServices $services ): UpdateHitCountWatcher {
254        return new UpdateHitCountWatcher(
255            $services->getDBLoadBalancer(),
256            $services->get( CentralDBManager::SERVICE_NAME )
257        );
258    },
259    VariablesBlobStore::SERVICE_NAME => static function ( MediaWikiServices $services ): VariablesBlobStore {
260        return new VariablesBlobStore(
261            $services->get( VariablesManager::SERVICE_NAME ),
262            $services->getBlobStoreFactory(),
263            $services->getBlobStore(),
264            $services->getMainConfig()->get( 'AbuseFilterCentralDB' )
265        );
266    },
267    ConsExecutorFactory::SERVICE_NAME => static function ( MediaWikiServices $services ): ConsExecutorFactory {
268        return new ConsExecutorFactory(
269            $services->get( ConsequencesLookup::SERVICE_NAME ),
270            $services->get( ConsequencesFactory::SERVICE_NAME ),
271            $services->get( ConsequencesRegistry::SERVICE_NAME ),
272            $services->get( FilterLookup::SERVICE_NAME ),
273            LoggerFactory::getInstance( 'AbuseFilter' ),
274            new ServiceOptions(
275                ConsequencesExecutor::CONSTRUCTOR_OPTIONS,
276                $services->getMainConfig()
277            )
278        );
279    },
280    FilterRunnerFactory::SERVICE_NAME => static function ( MediaWikiServices $services ): FilterRunnerFactory {
281        return new FilterRunnerFactory(
282            $services->get( AbuseFilterHookRunner::SERVICE_NAME ),
283            $services->get( FilterProfiler::SERVICE_NAME ),
284            $services->get( ChangeTagger::SERVICE_NAME ),
285            $services->get( FilterLookup::SERVICE_NAME ),
286            $services->get( RuleCheckerFactory::SERVICE_NAME ),
287            $services->get( ConsExecutorFactory::SERVICE_NAME ),
288            $services->get( AbuseLoggerFactory::SERVICE_NAME ),
289            $services->get( VariablesManager::SERVICE_NAME ),
290            $services->get( VariableGeneratorFactory::SERVICE_NAME ),
291            $services->get( EmergencyCache::SERVICE_NAME ),
292            $services->get( UpdateHitCountWatcher::SERVICE_NAME ),
293            $services->get( EmergencyWatcher::SERVICE_NAME ),
294            ObjectCache::getLocalClusterInstance(),
295            LoggerFactory::getInstance( 'AbuseFilter' ),
296            LoggerFactory::getInstance( 'StashEdit' ),
297            $services->getStatsdDataFactory(),
298            new ServiceOptions(
299                FilterRunner::CONSTRUCTOR_OPTIONS,
300                $services->getMainConfig()
301            )
302        );
303    },
304    VariablesFormatter::SERVICE_NAME => static function ( MediaWikiServices $services ): VariablesFormatter {
305        return new VariablesFormatter(
306            $services->get( KeywordsManager::SERVICE_NAME ),
307            $services->get( VariablesManager::SERVICE_NAME ),
308            // TODO: Use a proper MessageLocalizer once available (T247127)
309            RequestContext::getMain()
310        );
311    },
312    SpecsFormatter::SERVICE_NAME => static function ( MediaWikiServices $services ): SpecsFormatter {
313        return new SpecsFormatter(
314            // TODO: Use a proper MessageLocalizer once available (T247127)
315            RequestContext::getMain()
316        );
317    },
318    LazyVariableComputer::SERVICE_NAME => static function ( MediaWikiServices $services ): LazyVariableComputer {
319        return new LazyVariableComputer(
320            $services->get( TextExtractor::SERVICE_NAME ),
321            $services->get( AbuseFilterHookRunner::SERVICE_NAME ),
322            LoggerFactory::getInstance( 'AbuseFilter' ),
323            $services->getDBLoadBalancer(),
324            $services->getMainWANObjectCache(),
325            $services->getRevisionLookup(),
326            $services->getRevisionStore(),
327            $services->getContentLanguage(),
328            $services->getParser(),
329            $services->getUserEditTracker(),
330            $services->getUserGroupManager(),
331            $services->getPermissionManager(),
332            $services->getRestrictionStore(),
333            WikiMap::getCurrentWikiDbDomain()->getId()
334        );
335    },
336    TextExtractor::SERVICE_NAME => static function ( MediaWikiServices $services ): TextExtractor {
337        return new TextExtractor( $services->get( AbuseFilterHookRunner::SERVICE_NAME ) );
338    },
339    VariablesManager::SERVICE_NAME => static function ( MediaWikiServices $services ): VariablesManager {
340        return new VariablesManager(
341            $services->get( KeywordsManager::SERVICE_NAME ),
342            $services->get( LazyVariableComputer::SERVICE_NAME )
343        );
344    },
345    VariableGeneratorFactory::SERVICE_NAME => static function (
346        MediaWikiServices $services
347    ): VariableGeneratorFactory {
348        return new VariableGeneratorFactory(
349            $services->get( AbuseFilterHookRunner::SERVICE_NAME ),
350            $services->get( TextExtractor::SERVICE_NAME ),
351            $services->getMimeAnalyzer(),
352            $services->getRepoGroup(),
353            $services->getWikiPageFactory()
354        );
355    },
356    EditRevUpdater::SERVICE_NAME => static function ( MediaWikiServices $services ): EditRevUpdater {
357        return new EditRevUpdater(
358            $services->get( CentralDBManager::SERVICE_NAME ),
359            $services->getRevisionLookup(),
360            $services->getDBLoadBalancer(),
361            WikiMap::getCurrentWikiDbDomain()->getId()
362        );
363    },
364];
365
366// @codeCoverageIgnoreEnd