mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter.git
synced 2024-11-15 02:03:53 +00:00
d351d7150b
$wgAbuseFilterActions shouldn't be used normally, as it excludes actions registered by other extensions. Note: mw:Extension:AbuseFilter#Integration_with_other_extensions should be updated after merging. Bug: T239348 Change-Id: I89b3f0228eacdf145e8f2dd2a5602d0c7ce75a86
219 lines
8.7 KiB
PHP
219 lines
8.7 KiB
PHP
<?php
|
|
|
|
use MediaWiki\Config\ServiceOptions;
|
|
use MediaWiki\Extension\AbuseFilter\AbuseFilterPermissionManager as PermManager;
|
|
use MediaWiki\Extension\AbuseFilter\AbuseLogger;
|
|
use MediaWiki\Extension\AbuseFilter\AbuseLoggerFactory;
|
|
use MediaWiki\Extension\AbuseFilter\BlockAutopromoteStore;
|
|
use MediaWiki\Extension\AbuseFilter\CentralDBManager;
|
|
use MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagger;
|
|
use MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagsManager;
|
|
use MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagValidator;
|
|
use MediaWiki\Extension\AbuseFilter\ConsequencesFactory;
|
|
use MediaWiki\Extension\AbuseFilter\ConsequencesLookup;
|
|
use MediaWiki\Extension\AbuseFilter\ConsequencesRegistry;
|
|
use MediaWiki\Extension\AbuseFilter\EditBoxBuilderFactory;
|
|
use MediaWiki\Extension\AbuseFilter\FilterCompare;
|
|
use MediaWiki\Extension\AbuseFilter\FilterImporter;
|
|
use MediaWiki\Extension\AbuseFilter\FilterLookup;
|
|
use MediaWiki\Extension\AbuseFilter\FilterProfiler;
|
|
use MediaWiki\Extension\AbuseFilter\FilterStore;
|
|
use MediaWiki\Extension\AbuseFilter\FilterUser;
|
|
use MediaWiki\Extension\AbuseFilter\FilterValidator;
|
|
use MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterHookRunner;
|
|
use MediaWiki\Extension\AbuseFilter\KeywordsManager;
|
|
use MediaWiki\Extension\AbuseFilter\Parser\ParserFactory;
|
|
use MediaWiki\Extension\AbuseFilter\Watcher\EmergencyWatcher;
|
|
use MediaWiki\Extension\AbuseFilter\Watcher\UpdateHitCountWatcher;
|
|
use MediaWiki\Logger\LoggerFactory;
|
|
use MediaWiki\MediaWikiServices;
|
|
use MediaWiki\Session\SessionManager;
|
|
|
|
// This file is actually covered by AbuseFilterServicesTest, but it's not possible to specify a path
|
|
// in @covers annotations (https://github.com/sebastianbergmann/phpunit/issues/3794)
|
|
// @codeCoverageIgnoreStart
|
|
|
|
return [
|
|
KeywordsManager::SERVICE_NAME => function ( MediaWikiServices $services ): KeywordsManager {
|
|
return new KeywordsManager(
|
|
new AbuseFilterHookRunner( $services->getHookContainer() )
|
|
);
|
|
},
|
|
FilterProfiler::SERVICE_NAME => function ( MediaWikiServices $services ): FilterProfiler {
|
|
return new FilterProfiler(
|
|
$services->getMainObjectStash(),
|
|
new ServiceOptions(
|
|
FilterProfiler::CONSTRUCTOR_OPTIONS,
|
|
$services->getMainConfig()
|
|
),
|
|
WikiMap::getCurrentWikiDbDomain()->getId(),
|
|
$services->getStatsdDataFactory(),
|
|
LoggerFactory::getInstance( 'AbuseFilter' )
|
|
);
|
|
},
|
|
PermManager::SERVICE_NAME => function ( MediaWikiServices $services ): PermManager {
|
|
return new PermManager( $services->getPermissionManager() );
|
|
},
|
|
ChangeTagger::SERVICE_NAME => function ( MediaWikiServices $services ) : ChangeTagger {
|
|
return new ChangeTagger(
|
|
$services->getService( ChangeTagsManager::SERVICE_NAME )
|
|
);
|
|
},
|
|
ChangeTagsManager::SERVICE_NAME => function ( MediaWikiServices $services ): ChangeTagsManager {
|
|
return new ChangeTagsManager(
|
|
$services->getDBLoadBalancer(),
|
|
$services->getMainWANObjectCache(),
|
|
$services->get( CentralDBManager::SERVICE_NAME )
|
|
);
|
|
},
|
|
ChangeTagValidator::SERVICE_NAME => function ( MediaWikiServices $services ): ChangeTagValidator {
|
|
return new ChangeTagValidator(
|
|
$services->getService( ChangeTagsManager::SERVICE_NAME )
|
|
);
|
|
},
|
|
CentralDBManager::SERVICE_NAME => function ( MediaWikiServices $services ): CentralDBManager {
|
|
return new CentralDBManager(
|
|
$services->getDBLoadBalancerFactory(),
|
|
$services->getMainConfig()->get( 'AbuseFilterCentralDB' ),
|
|
$services->getMainConfig()->get( 'AbuseFilterIsCentral' )
|
|
);
|
|
},
|
|
BlockAutopromoteStore::SERVICE_NAME => function ( MediaWikiServices $services ): BlockAutopromoteStore {
|
|
return new BlockAutopromoteStore(
|
|
ObjectCache::getInstance( 'db-replicated' ),
|
|
LoggerFactory::getInstance( 'AbuseFilter' ),
|
|
$services->get( FilterUser::SERVICE_NAME )
|
|
);
|
|
},
|
|
FilterUser::SERVICE_NAME => function ( MediaWikiServices $services ): FilterUser {
|
|
return new FilterUser(
|
|
// TODO We need a proper MessageLocalizer, see T247127
|
|
RequestContext::getMain(),
|
|
$services->getUserGroupManager(),
|
|
LoggerFactory::getInstance( 'AbuseFilter' )
|
|
);
|
|
},
|
|
ParserFactory::SERVICE_NAME => function ( MediaWikiServices $services ): ParserFactory {
|
|
return new ParserFactory(
|
|
$services->getContentLanguage(),
|
|
// We could use $services here, but we need the fallback
|
|
ObjectCache::getLocalServerInstance( 'hash' ),
|
|
LoggerFactory::getInstance( 'AbuseFilter' ),
|
|
$services->getService( KeywordsManager::SERVICE_NAME ),
|
|
$services->getMainConfig()->get( 'AbuseFilterParserClass' )
|
|
);
|
|
},
|
|
FilterLookup::SERVICE_NAME => function ( MediaWikiServices $services ): FilterLookup {
|
|
return new FilterLookup(
|
|
$services->getDBLoadBalancer(),
|
|
$services->getMainWANObjectCache(),
|
|
$services->get( CentralDBManager::SERVICE_NAME )
|
|
);
|
|
},
|
|
EmergencyWatcher::SERVICE_NAME => function ( MediaWikiServices $services ): EmergencyWatcher {
|
|
return new EmergencyWatcher(
|
|
$services->getService( FilterProfiler::SERVICE_NAME ),
|
|
$services->getDBLoadBalancer(),
|
|
$services->getService( FilterLookup::SERVICE_NAME ),
|
|
new ServiceOptions(
|
|
EmergencyWatcher::CONSTRUCTOR_OPTIONS,
|
|
$services->getMainConfig()
|
|
)
|
|
);
|
|
},
|
|
FilterValidator::SERVICE_NAME => function ( MediaWikiServices $services ): FilterValidator {
|
|
return new FilterValidator(
|
|
$services->get( ChangeTagValidator::SERVICE_NAME ),
|
|
$services->get( ParserFactory::SERVICE_NAME ),
|
|
$services->get( PermManager::SERVICE_NAME ),
|
|
// Pass the cleaned list of enabled restrictions
|
|
array_keys( array_filter( $services->getMainConfig()->get( 'AbuseFilterActionRestrictions' ) ) )
|
|
);
|
|
},
|
|
FilterCompare::SERVICE_NAME => function ( MediaWikiServices $services ): FilterCompare {
|
|
return new FilterCompare(
|
|
$services->get( ConsequencesRegistry::SERVICE_NAME )
|
|
);
|
|
},
|
|
FilterImporter::SERVICE_NAME => function ( MediaWikiServices $services ): FilterImporter {
|
|
return new FilterImporter(
|
|
new ServiceOptions(
|
|
FilterImporter::CONSTRUCTOR_OPTIONS,
|
|
$services->getMainConfig()
|
|
),
|
|
$services->get( ConsequencesRegistry::SERVICE_NAME )
|
|
);
|
|
},
|
|
FilterStore::SERVICE_NAME => function ( MediaWikiServices $services ): FilterStore {
|
|
return new FilterStore(
|
|
$services->get( ConsequencesRegistry::SERVICE_NAME ),
|
|
$services->getDBLoadBalancer(),
|
|
$services->get( FilterProfiler::SERVICE_NAME ),
|
|
$services->get( FilterLookup::SERVICE_NAME ),
|
|
$services->get( ChangeTagsManager::SERVICE_NAME ),
|
|
$services->get( FilterValidator::SERVICE_NAME ),
|
|
$services->get( FilterCompare::SERVICE_NAME )
|
|
);
|
|
},
|
|
ConsequencesFactory::SERVICE_NAME => function ( MediaWikiServices $services ): ConsequencesFactory {
|
|
return new ConsequencesFactory(
|
|
new ServiceOptions(
|
|
ConsequencesFactory::CONSTRUCTOR_OPTIONS,
|
|
$services->getMainConfig()
|
|
),
|
|
LoggerFactory::getInstance( 'AbuseFilter' ),
|
|
$services->getBlockUserFactory(),
|
|
$services->getUserGroupManager(),
|
|
$services->getMainObjectStash(),
|
|
$services->get( ChangeTagger::SERVICE_NAME ),
|
|
$services->get( BlockAutopromoteStore::SERVICE_NAME ),
|
|
$services->get( FilterUser::SERVICE_NAME ),
|
|
SessionManager::getGlobalSession(),
|
|
RequestContext::getMain()->getRequest()->getIP()
|
|
);
|
|
},
|
|
EditBoxBuilderFactory::SERVICE_NAME => function ( MediaWikiServices $services ): EditBoxBuilderFactory {
|
|
return new EditBoxBuilderFactory(
|
|
$services->get( PermManager::SERVICE_NAME ),
|
|
$services->get( KeywordsManager::SERVICE_NAME ),
|
|
ExtensionRegistry::getInstance()->isLoaded( 'CodeEditor' )
|
|
);
|
|
},
|
|
ConsequencesLookup::SERVICE_NAME => function ( MediaWikiServices $services ) : ConsequencesLookup {
|
|
return new ConsequencesLookup(
|
|
$services->getDBLoadBalancer(),
|
|
$services->get( CentralDBManager::SERVICE_NAME ),
|
|
$services->get( ConsequencesRegistry::SERVICE_NAME ),
|
|
LoggerFactory::getInstance( 'AbuseFilter' )
|
|
);
|
|
},
|
|
ConsequencesRegistry::SERVICE_NAME => function ( MediaWikiServices $services ): ConsequencesRegistry {
|
|
return new ConsequencesRegistry(
|
|
AbuseFilterHookRunner::getRunner(),
|
|
$services->getMainConfig()->get( 'AbuseFilterActions' ),
|
|
$services->getMainConfig()->get( 'AbuseFilterCustomActionsHandlers' )
|
|
);
|
|
},
|
|
AbuseLoggerFactory::SERVICE_NAME => function ( MediaWikiServices $services ) : AbuseLoggerFactory {
|
|
return new AbuseLoggerFactory(
|
|
$services->get( CentralDBManager::SERVICE_NAME ),
|
|
$services->get( FilterLookup::SERVICE_NAME ),
|
|
$services->getDBLoadBalancer(),
|
|
new ServiceOptions(
|
|
AbuseLogger::CONSTRUCTOR_OPTIONS,
|
|
$services->getMainConfig()
|
|
),
|
|
WikiMap::getCurrentWikiDbDomain()->getId(),
|
|
RequestContext::getMain()->getRequest()->getIP()
|
|
);
|
|
},
|
|
UpdateHitCountWatcher::SERVICE_NAME => function ( MediaWikiServices $services ): UpdateHitCountWatcher {
|
|
return new UpdateHitCountWatcher(
|
|
$services->getDBLoadBalancer(),
|
|
$services->get( CentralDBManager::SERVICE_NAME )
|
|
);
|
|
},
|
|
];
|
|
|
|
// @codeCoverageIgnoreEnd
|