mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter.git
synced 2024-11-14 17:55:00 +00:00
9abc464e3d
Change-Id: I5b3b2b758e17c94298e7217d755dd8c7b08cb1ac
513 lines
16 KiB
JSON
513 lines
16 KiB
JSON
{
|
||
"name": "Abuse Filter",
|
||
"author": [
|
||
"Andrew Garrett",
|
||
"[https://www.mediawiki.org/wiki/User:Daimona_Eaytoy Daimona Eaytoy]",
|
||
"Marius Hoch",
|
||
"River Tarnell",
|
||
"Victor Vasiliev"
|
||
],
|
||
"url": "https://www.mediawiki.org/wiki/Extension:AbuseFilter",
|
||
"descriptionmsg": "abusefilter-desc",
|
||
"license-name": "GPL-2.0-or-later",
|
||
"type": "antispam",
|
||
"requires": {
|
||
"MediaWiki": ">= 1.38.0"
|
||
},
|
||
"AvailableRights": [
|
||
"abusefilter-modify",
|
||
"abusefilter-log-detail",
|
||
"abusefilter-view",
|
||
"abusefilter-log",
|
||
"abusefilter-privatedetails",
|
||
"abusefilter-privatedetails-log",
|
||
"abusefilter-modify-restricted",
|
||
"abusefilter-revert",
|
||
"abusefilter-view-private",
|
||
"abusefilter-log-private",
|
||
"abusefilter-hidden-log",
|
||
"abusefilter-hide-log",
|
||
"abusefilter-modify-global"
|
||
],
|
||
"GroupPermissions": {
|
||
"*": {
|
||
"abusefilter-view": true,
|
||
"abusefilter-log": true
|
||
},
|
||
"sysop": {
|
||
"abusefilter-log-detail": true,
|
||
"abusefilter-view-private": true,
|
||
"abusefilter-log-private": true,
|
||
"abusefilter-modify": true,
|
||
"abusefilter-modify-restricted": true,
|
||
"abusefilter-revert": true
|
||
},
|
||
"suppress": {
|
||
"abusefilter-hidden-log": true,
|
||
"abusefilter-hide-log": true
|
||
}
|
||
},
|
||
"GrantPermissions": {
|
||
"basic": {
|
||
"abusefilter-log": true,
|
||
"abusefilter-log-detail": true,
|
||
"abusefilter-view": true
|
||
},
|
||
"oversight": {
|
||
"abusefilter-hide-log": true
|
||
},
|
||
"viewrestrictedlogs": {
|
||
"abusefilter-hidden-log": true,
|
||
"abusefilter-log-private": true,
|
||
"abusefilter-view-private": true
|
||
}
|
||
},
|
||
"SpecialPages": {
|
||
"AbuseLog": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Special\\SpecialAbuseLog",
|
||
"services": [
|
||
"LinkBatchFactory",
|
||
"PermissionManager",
|
||
"UserIdentityLookup",
|
||
"AbuseFilterPermissionManager",
|
||
"AbuseFilterConsequencesRegistry",
|
||
"AbuseFilterVariablesBlobStore",
|
||
"AbuseFilterSpecsFormatter",
|
||
"AbuseFilterVariablesFormatter",
|
||
"AbuseFilterVariablesManager"
|
||
]
|
||
},
|
||
"AbuseFilter": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Special\\SpecialAbuseFilter",
|
||
"services": [
|
||
"AbuseFilterPermissionManager",
|
||
"ObjectFactory"
|
||
]
|
||
}
|
||
},
|
||
"LogTypes": [
|
||
"abusefilter",
|
||
"abusefilterprivatedetails"
|
||
],
|
||
"LogNames": {
|
||
"abusefilter": "abusefilter-log-name",
|
||
"abusefilterprivatedetails": "abusefilterprivatedetails-log-name"
|
||
},
|
||
"LogHeaders": {
|
||
"abusefilter": "abusefilter-log-header"
|
||
},
|
||
"LogActionsHandlers": {
|
||
"abusefilter/hit": "MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseLogHitFormatter",
|
||
"abusefilter/modify": "MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseFilterModifyLogFormatter",
|
||
"abusefilter/create": "MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseFilterModifyLogFormatter",
|
||
"abusefilterprivatedetails/access": "LogFormatter",
|
||
"suppress/hide-afl": "MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseFilterSuppressLogFormatter",
|
||
"suppress/unhide-afl": "MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseFilterSuppressLogFormatter",
|
||
"rights/blockautopromote": "MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseFilterRightsLogFormatter",
|
||
"rights/restoreautopromote": "MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseFilterRightsLogFormatter"
|
||
},
|
||
"ActionFilteredLogs": {
|
||
"abusefilter": {
|
||
"modify": [
|
||
"modify"
|
||
],
|
||
"create": [
|
||
"create"
|
||
]
|
||
},
|
||
"suppress": {
|
||
"abuselog": [
|
||
"hide-afl",
|
||
"unhide-afl"
|
||
]
|
||
},
|
||
"rights": {
|
||
"blockautopromote": [
|
||
"blockautopromote"
|
||
],
|
||
"restoreautopromote": [
|
||
"restoreautopromote"
|
||
]
|
||
}
|
||
},
|
||
"LogRestrictions": {
|
||
"abusefilter": "abusefilter-view",
|
||
"abusefilterprivatedetails": "abusefilter-privatedetails-log"
|
||
},
|
||
"AuthManagerAutoConfig": {
|
||
"preauth": {
|
||
"AbuseFilterPreAuthenticationProvider": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\AbuseFilterPreAuthenticationProvider",
|
||
"services": [
|
||
"AbuseFilterVariableGeneratorFactory",
|
||
"AbuseFilterRunnerFactory",
|
||
"StatsdDataFactory",
|
||
"UserFactory"
|
||
],
|
||
"sort": 5
|
||
}
|
||
}
|
||
},
|
||
"APIModules": {
|
||
"abusefilterchecksyntax": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Api\\CheckSyntax",
|
||
"services": [
|
||
"AbuseFilterRuleCheckerFactory",
|
||
"AbuseFilterPermissionManager"
|
||
]
|
||
},
|
||
"abusefilterevalexpression": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Api\\EvalExpression",
|
||
"services": [
|
||
"AbuseFilterRuleCheckerFactory",
|
||
"AbuseFilterPermissionManager",
|
||
"AbuseFilterVariableGeneratorFactory"
|
||
]
|
||
},
|
||
"abusefilterunblockautopromote": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Api\\UnblockAutopromote",
|
||
"services": [
|
||
"AbuseFilterBlockAutopromoteStore"
|
||
]
|
||
},
|
||
"abusefiltercheckmatch": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Api\\CheckMatch",
|
||
"services": [
|
||
"AbuseFilterRuleCheckerFactory",
|
||
"AbuseFilterPermissionManager",
|
||
"AbuseFilterVariablesBlobStore",
|
||
"AbuseFilterVariableGeneratorFactory"
|
||
]
|
||
},
|
||
"abuselogprivatedetails": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Api\\AbuseLogPrivateDetails",
|
||
"services": [
|
||
"AbuseFilterPermissionManager"
|
||
]
|
||
}
|
||
},
|
||
"APIListModules": {
|
||
"abuselog": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Api\\QueryAbuseLog",
|
||
"services": [
|
||
"AbuseFilterFilterLookup",
|
||
"AbuseFilterPermissionManager",
|
||
"AbuseFilterVariablesBlobStore",
|
||
"AbuseFilterVariablesManager"
|
||
]
|
||
},
|
||
"abusefilters": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Api\\QueryAbuseFilters",
|
||
"services": [
|
||
"AbuseFilterPermissionManager"
|
||
]
|
||
}
|
||
},
|
||
"MessagesDirs": {
|
||
"AbuseFilter": [
|
||
"i18n",
|
||
"i18n/api"
|
||
]
|
||
},
|
||
"ExtensionMessagesFiles": {
|
||
"AbuseFilterAliases": "AbuseFilter.alias.php"
|
||
},
|
||
"AutoloadNamespaces": {
|
||
"MediaWiki\\Extension\\AbuseFilter\\": "includes/",
|
||
"MediaWiki\\Extension\\AbuseFilter\\Maintenance\\": "maintenance/"
|
||
},
|
||
"TestAutoloadClasses": {
|
||
"AbuseFilterConsequencesTest": "tests/phpunit/AbuseFilterConsequencesTest.php",
|
||
"MediaWiki\\Extension\\AbuseFilter\\Tests\\Unit\\Parser\\ParserTestCase": "tests/phpunit/unit/Parser/ParserTestCase.php",
|
||
"MediaWiki\\Extension\\AbuseFilter\\Tests\\Integration\\Api\\AbuseFilterApiTestTrait": "tests/phpunit/integration/Api/AbuseFilterApiTestTrait.php",
|
||
"AbuseFilterUploadTestTrait": "tests/phpunit/AbuseFilterUploadTestTrait.php",
|
||
"AbuseFilterCreateAccountTestTrait": "tests/phpunit/AbuseFilterCreateAccountTestTrait.php",
|
||
"AbuseFilterRowsAndFiltersTestTrait": "tests/phpunit/AbuseFilterRowsAndFiltersTestTrait.php",
|
||
"ConsequenceGetMessageTestTrait": "tests/phpunit/ConsequenceGetMessageTestTrait.php"
|
||
},
|
||
"ResourceModules": {
|
||
"ext.abuseFilter": {
|
||
"styles": "ext.abuseFilter.css"
|
||
},
|
||
"ext.abuseFilter.edit": {
|
||
"scripts": "ext.abuseFilter.edit.js",
|
||
"messages": [
|
||
"abusefilter-edit-syntaxok",
|
||
"abusefilter-edit-syntaxerr",
|
||
"abusefilter-http-error",
|
||
"abusefilter-edit-throttle-placeholder",
|
||
"abusefilter-edit-tag-placeholder",
|
||
"abusefilter-edit-warn-leave",
|
||
"unknown-error"
|
||
],
|
||
"dependencies": [
|
||
"mediawiki.util",
|
||
"mediawiki.api",
|
||
"mediawiki.confirmCloseWindow",
|
||
"jquery.textSelection",
|
||
"jquery.spinner",
|
||
"oojs-ui-core",
|
||
"oojs-ui-widgets"
|
||
]
|
||
},
|
||
"ext.abuseFilter.tools": {
|
||
"scripts": "ext.abuseFilter.tools.js",
|
||
"messages": [
|
||
"abusefilter-reautoconfirm-notallowed",
|
||
"abusefilter-reautoconfirm-none",
|
||
"abusefilter-reautoconfirm-done",
|
||
"abusefilter-http-error",
|
||
"abusefilter-tools-syntax-error",
|
||
"unknown-error"
|
||
],
|
||
"dependencies": [
|
||
"mediawiki.api",
|
||
"user.options",
|
||
"jquery.spinner"
|
||
]
|
||
},
|
||
"ext.abuseFilter.examine": {
|
||
"scripts": "ext.abuseFilter.examine.js",
|
||
"messages": [
|
||
"abusefilter-examine-match",
|
||
"abusefilter-examine-nomatch",
|
||
"abusefilter-examine-syntaxerror",
|
||
"abusefilter-examine-notfound",
|
||
"abusefilter-mustviewprivateoredit",
|
||
"abusefilter-http-error",
|
||
"unknown-error"
|
||
],
|
||
"dependencies": [
|
||
"jquery.spinner",
|
||
"mediawiki.api"
|
||
]
|
||
},
|
||
"ext.abuseFilter.ace": {
|
||
"scripts": "mode-abusefilter.js",
|
||
"dependencies": "ext.codeEditor.ace"
|
||
},
|
||
"ext.abuseFilter.visualEditor": {
|
||
"scripts": "ve-abusefilter/ve.init.mw.AbuseFilterSaveErrorHandler.js",
|
||
"targets": [ "desktop", "mobile" ]
|
||
}
|
||
},
|
||
"attributes": {
|
||
"VisualEditor": {
|
||
"PluginModules": [
|
||
"ext.abuseFilter.visualEditor"
|
||
]
|
||
}
|
||
},
|
||
"ResourceFileModulePaths": {
|
||
"localBasePath": "modules",
|
||
"remoteExtPath": "AbuseFilter/modules"
|
||
},
|
||
"callback": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\RegistrationCallback::onRegistration",
|
||
"HookHandlers": {
|
||
"ToolLinks": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\ToolLinksHandler",
|
||
"services": [ "AbuseFilterPermissionManager" ]
|
||
},
|
||
"AutoPromoteGroups": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\AutoPromoteGroupsHandler",
|
||
"factory": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\AutoPromoteGroupsHandler::factory",
|
||
"services": [ "AbuseFilterConsequencesRegistry", "AbuseFilterBlockAutopromoteStore" ]
|
||
},
|
||
"ChangeTags": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\ChangeTagsHandler",
|
||
"services": [ "AbuseFilterChangeTagsManager" ]
|
||
},
|
||
"Tests": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\TestsHandler"
|
||
},
|
||
"SchemaChanges": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\SchemaChangesHandler",
|
||
"factory": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\SchemaChangesHandler::newFromGlobalState"
|
||
},
|
||
"UserRename": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\UserRenameHandler"
|
||
},
|
||
"PageSave": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\PageSaveHandler",
|
||
"services": [ "AbuseFilterEditRevUpdater" ]
|
||
},
|
||
"RecentChangeSave": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\RecentChangeSaveHandler",
|
||
"services": [ "AbuseFilterChangeTagger" ]
|
||
},
|
||
"FilteredActions": {
|
||
"class": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\FilteredActionsHandler",
|
||
"services": [ "StatsdDataFactory", "AbuseFilterRunnerFactory", "AbuseFilterVariableGeneratorFactory", "AbuseFilterEditRevUpdater" ]
|
||
}
|
||
},
|
||
"Hooks": {
|
||
"EditFilterMergedContent": "FilteredActions",
|
||
"GetAutoPromoteGroups": "AutoPromoteGroups",
|
||
"TitleMove": "FilteredActions",
|
||
"ArticleDelete": "FilteredActions",
|
||
"RecentChange_save": "RecentChangeSave",
|
||
"ListDefinedTags": "ChangeTags",
|
||
"ChangeTagsListActive": "ChangeTags",
|
||
"LoadExtensionSchemaUpdates": "SchemaChanges",
|
||
"ContributionsToolLinks": "ToolLinks",
|
||
"HistoryPageToolLinks": "ToolLinks",
|
||
"UndeletePageToolLinks": "ToolLinks",
|
||
"UploadVerifyUpload": "FilteredActions",
|
||
"UploadStashFile": "FilteredActions",
|
||
"PageSaveComplete": "PageSave",
|
||
"RenameUserSQL": "UserRename",
|
||
"UserMergeAccountFields": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\UserMergeHandler::onUserMergeAccountFields",
|
||
"BeforeCreateEchoEvent": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\EchoHandler::onBeforeCreateEchoEvent",
|
||
"ParserOutputStashForEdit": "FilteredActions",
|
||
"UnitTestsAfterDatabaseSetup": "Tests",
|
||
"UnitTestsBeforeDatabaseTeardown": "Tests"
|
||
},
|
||
"ServiceWiringFiles": [
|
||
"includes/ServiceWiring.php"
|
||
],
|
||
"config": {
|
||
"AbuseFilterActions": {
|
||
"value": {
|
||
"throttle": true,
|
||
"warn": true,
|
||
"disallow": true,
|
||
"blockautopromote": true,
|
||
"block": true,
|
||
"rangeblock": false,
|
||
"degroup": false,
|
||
"tag": true
|
||
},
|
||
"description": "Array of enabled actions in the form [action name => is enabled?]. At the end of setup, false values will be filtered out"
|
||
},
|
||
"AbuseFilterConditionLimit": {
|
||
"value": 1000,
|
||
"description": "The maximum number of 'conditions' that can be used each time the filters are run against a change. (More complex filters require more 'conditions')."
|
||
},
|
||
"AbuseFilterEmergencyDisableThreshold": {
|
||
"value": {
|
||
"default": 0.05
|
||
},
|
||
"description": "Disable potentially dangerous actions (AbuseFilterRestrictions) of a filter if it matches more than X actions, constituting more than Y% (e.g. 0.05 = 5%) of the last Z actions, and the filter has been modified in the last S seconds. X is AbuseFilterEmergencyDisableCount, Y is AbuseFilterEmergencyDisableThreshold, S is AbuseFilterEmergencyDisableAge and Z is the number of analyzed actions since the filter was modified."
|
||
},
|
||
"AbuseFilterEmergencyDisableCount": {
|
||
"value": {
|
||
"default": 2
|
||
},
|
||
"description": "See description for AbuseFilterEmergencyDisableThreshold"
|
||
},
|
||
"AbuseFilterEmergencyDisableAge": {
|
||
"value": {
|
||
"default": 86400
|
||
},
|
||
"description": "See description for AbuseFilterEmergencyDisableThreshold"
|
||
},
|
||
"AbuseFilterActionRestrictions": {
|
||
"value": {
|
||
"throttle": false,
|
||
"warn": false,
|
||
"disallow": false,
|
||
"blockautopromote": true,
|
||
"block": true,
|
||
"rangeblock": true,
|
||
"degroup": true,
|
||
"tag": false
|
||
},
|
||
"description": "Do users need 'abusefilter-modify-restricted' user right as well as 'abusefilter-modify' in order to create or modify filters which carry out this action? Array like [action name => is restricted?]"
|
||
},
|
||
"AbuseFilterNotifications": {
|
||
"value": false,
|
||
"description": "Allows to configure the extension to send hit notifications to Special:RecentChanges or UDP. Available options: rc, udp, rcandudp"
|
||
},
|
||
"AbuseFilterNotificationsPrivate": {
|
||
"value": false,
|
||
"description": "Enable notifications for private filters"
|
||
},
|
||
"AbuseFilterCentralDB": {
|
||
"value": null,
|
||
"description": "Name of a database where global abuse filters will be stored in. To use a DB with prefixed tables, set this to \"{$databaseName}-{$prefix}\"."
|
||
},
|
||
"AbuseFilterIsCentral": {
|
||
"value": false,
|
||
"description": "Set this variable to true for the wiki where global AbuseFilters are stored in"
|
||
},
|
||
"AbuseFilterLocallyDisabledGlobalActions": {
|
||
"value": {
|
||
"throttle": false,
|
||
"warn": false,
|
||
"disallow": false,
|
||
"blockautopromote": false,
|
||
"block": false,
|
||
"rangeblock": false,
|
||
"degroup": false,
|
||
"tag": false
|
||
},
|
||
"description": "An array of actions which, if set on a global filter, will not be used for local hits of such filter (not in the central wiki). The array is [ action => will be disabled? ]. NOTE: Locally disabling throttle or warn will *not* disable the remaining actions."
|
||
},
|
||
"AbuseFilterBlockDuration": {
|
||
"value": "indefinite",
|
||
"description": "Old standard block duration for logged in users. Kept for backward compatibility after T32024."
|
||
},
|
||
"AbuseFilterAnonBlockDuration": {
|
||
"value": null,
|
||
"description": "Old standard block duration for anonymous users, $wgAbuseFilterBlockDuration will be used if null. Kept for backward compatibility after T32024."
|
||
},
|
||
"AbuseFilterBlockAutopromoteDuration": {
|
||
"value": 5,
|
||
"description": "Duration, in days, for which users' autopromotion is blocked by filters."
|
||
},
|
||
"AbuseFilterValidGroups": {
|
||
"value": [ "default" ],
|
||
"description": "The list of 'groups' filters can be divided into – used for applying edit filters to certain types of actions. By default there is only one group."
|
||
},
|
||
"AbuseFilterDefaultWarningMessage": {
|
||
"value": {
|
||
"default": "abusefilter-warning"
|
||
},
|
||
"description": "Default warning messages, per filter group"
|
||
},
|
||
"AbuseFilterDefaultDisallowMessage": {
|
||
"value": {
|
||
"default": "abusefilter-disallowed"
|
||
},
|
||
"description": "Default disallow messages, per filter group"
|
||
},
|
||
"AbuseFilterLogIPMaxAge": {
|
||
"value": 7776000,
|
||
"description": "Age used as cutoff when purging old IP log data, defaults to 3 months. Used by maintenance script purgeOldLogIPData.php"
|
||
},
|
||
"AbuseFilterSlowFilterRuntimeLimit": {
|
||
"value": 500,
|
||
"description": "Runtime in milliseconds before a filter is considered slow."
|
||
},
|
||
"AbuseFilterProfileActionsCap": {
|
||
"value": 10000,
|
||
"description": "Number of action that determines when to reset profiling stats."
|
||
},
|
||
"AbuseFilterProfilerCache": {
|
||
"value": null,
|
||
"description": "The key in $wgObjectCaches to use for a profiler, or null to use the main stash"
|
||
},
|
||
"AbuseFilterRangeBlockSize": {
|
||
"value": {
|
||
"IPv4": 16,
|
||
"IPv6": 19
|
||
},
|
||
"description": "Size of the range blocked by 'rangeblock' action."
|
||
},
|
||
"AbuseFilterLogPrivateDetailsAccess": {
|
||
"value": false,
|
||
"description": "Whether accessing private information from a filter log entry is logged."
|
||
},
|
||
"AbuseFilterPrivateDetailsForceReason": {
|
||
"value": false,
|
||
"description": "Whether users are forced to provide a reason for accessing private information from a filter log entry."
|
||
},
|
||
"AbuseFilterLogIP": {
|
||
"value": true,
|
||
"description": "Whether to include IP in the abuse_filter_log"
|
||
}
|
||
},
|
||
"load_composer_autoloader": true,
|
||
"manifest_version": 2
|
||
}
|