mediawiki-extensions-AbuseF.../extension.json
Daimona Eaytoy 5e609eb537 Add GlobalNameUtils class
This is just a temporary location for these two methods. Since they're
used a lot, having them in the AbuseFilter class means that the
dependency graph is unnecessarily complicated. Thus, since these methods
aren't doing much, they were moved to a dedicated class. Future todo is
finding an appropriate location, that might be either as part of another
service, or keep them in a Utilities class, perhaps a single class with
all util methods, rather than a specific class.

Change-Id: I52cc47a6b9a387cd1e68c5127f6598a4c43ca428
2020-12-12 17:49:48 +00:00

467 lines
18 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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.36.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": "SpecialAbuseLog",
"services": [
"LinkBatchFactory",
"PermissionManager",
"AbuseFilterPermissionManager",
"AbuseFilterConsequencesRegistry"
]
},
"AbuseFilter": {
"class": "SpecialAbuseFilter",
"services": [
"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"
]
}
},
"LogRestrictions": {
"abusefilter": "abusefilter-view",
"abusefilterprivatedetails": "abusefilter-privatedetails-log"
},
"APIModules": {
"abusefilterchecksyntax": "MediaWiki\\Extension\\AbuseFilter\\Api\\CheckSyntax",
"abusefilterevalexpression": "MediaWiki\\Extension\\AbuseFilter\\Api\\EvalExpression",
"abusefilterunblockautopromote": "MediaWiki\\Extension\\AbuseFilter\\Api\\UnblockAutopromote",
"abusefiltercheckmatch": "MediaWiki\\Extension\\AbuseFilter\\Api\\CheckMatch",
"abuselogprivatedetails": "MediaWiki\\Extension\\AbuseFilter\\Api\\AbuseLogPrivateDetails"
},
"APIListModules": {
"abuselog": "MediaWiki\\Extension\\AbuseFilter\\Api\\QueryAbuseLog",
"abusefilters": "MediaWiki\\Extension\\AbuseFilter\\Api\\QueryAbuseFilters"
},
"MessagesDirs": {
"AbuseFilter": [
"i18n",
"i18n/api"
]
},
"ExtensionMessagesFiles": {
"AbuseFilterAliases": "AbuseFilter.alias.php"
},
"AutoloadNamespaces": {
"MediaWiki\\Extension\\AbuseFilter\\Api\\": "includes/Api/",
"MediaWiki\\Extension\\AbuseFilter\\VariableGenerator\\": "includes/VariableGenerator/",
"MediaWiki\\Extension\\AbuseFilter\\Hooks\\": "includes/Hooks/",
"MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\": "includes/LogFormatter/",
"MediaWiki\\Extension\\AbuseFilter\\Parser\\": "includes/Parser/",
"MediaWiki\\Extension\\AbuseFilter\\Filter\\": "includes/Filter/",
"MediaWiki\\Extension\\AbuseFilter\\Pager\\": "includes/Pager/",
"MediaWiki\\Extension\\AbuseFilter\\View\\": "includes/View/",
"MediaWiki\\Extension\\AbuseFilter\\Watcher\\": "includes/Watcher/",
"MediaWiki\\Extension\\AbuseFilter\\Consequence\\": "includes/Consequence/",
"MediaWiki\\Extension\\AbuseFilter\\ChangeTags\\": "includes/ChangeTags/"
},
"AutoloadClasses": {
"AbuseFilter": "includes/AbuseFilter.php",
"AbuseFilterHooks": "includes/AbuseFilterHooks.php",
"AbuseFilterPreAuthenticationProvider": "includes/AbuseFilterPreAuthenticationProvider.php",
"AbuseFilterRunner": "includes/AbuseFilterRunner.php",
"AbuseFilterSpecialPage": "includes/special/AbuseFilterSpecialPage.php",
"SpecialAbuseLog": "includes/special/SpecialAbuseLog.php",
"SpecialAbuseFilter": "includes/special/SpecialAbuseFilter.php",
"AbuseFilterChangesList": "includes/AbuseFilterChangesList.php",
"TableDiffFormatterFullContext": "includes/TableDiffFormatterFullContext.php",
"AbuseFilterVariableHolder": "includes/AbuseFilterVariableHolder.php",
"MediaWiki\\Extension\\AbuseFilter\\GlobalNameUtils": "includes/GlobalNameUtils.php",
"MediaWiki\\Extension\\AbuseFilter\\FilterLookup": "includes/FilterLookup.php",
"MediaWiki\\Extension\\AbuseFilter\\KeywordsManager": "includes/KeywordsManager.php",
"MediaWiki\\Extension\\AbuseFilter\\AbuseFilterPermissionManager": "includes/AbuseFilterPermissionManager.php",
"MediaWiki\\Extension\\AbuseFilter\\AbuseFilterServices": "includes/AbuseFilterServices.php",
"MediaWiki\\Extension\\AbuseFilter\\FilterProfiler": "includes/FilterProfiler.php",
"MediaWiki\\Extension\\AbuseFilter\\BlockAutopromoteStore": "includes/BlockAutopromoteStore.php",
"MediaWiki\\Extension\\AbuseFilter\\FilterUser": "includes/FilterUser.php",
"MediaWiki\\Extension\\AbuseFilter\\CentralDBManager": "includes/CentralDBManager.php",
"MediaWiki\\Extension\\AbuseFilter\\CentralDBNotAvailableException": "includes/CentralDBNotAvailableException.php",
"MediaWiki\\Extension\\AbuseFilter\\FilterValidator": "includes/FilterValidator.php",
"MediaWiki\\Extension\\AbuseFilter\\FilterCompare": "includes/FilterCompare.php",
"MediaWiki\\Extension\\AbuseFilter\\FilterImporter": "includes/FilterImporter.php",
"MediaWiki\\Extension\\AbuseFilter\\EditBoxBuilder": "includes/EditBoxBuilder.php",
"MediaWiki\\Extension\\AbuseFilter\\EditBoxBuilderFactory": "includes/EditBoxBuilderFactory.php",
"MediaWiki\\Extension\\AbuseFilter\\InvalidImportDataException": "includes/InvalidImportDataException.php",
"MediaWiki\\Extension\\AbuseFilter\\FilterStore": "includes/FilterStore.php",
"MediaWiki\\Extension\\AbuseFilter\\ConsequencesFactory": "includes/ConsequencesFactory.php",
"MediaWiki\\Extension\\AbuseFilter\\ConsequencesLookup": "includes/ConsequencesLookup.php",
"MediaWiki\\Extension\\AbuseFilter\\AbuseLogger": "includes/AbuseLogger.php",
"MediaWiki\\Extension\\AbuseFilter\\AbuseLoggerFactory": "includes/AbuseLoggerFactory.php",
"MediaWiki\\Extension\\AbuseFilter\\ConsequencesRegistry": "includes/ConsequencesRegistry.php",
"AFComputedVariable": "includes/AFComputedVariable.php",
"NormalizeThrottleParameters": "maintenance/normalizeThrottleParameters.php",
"FixOldLogEntries": "maintenance/fixOldLogEntries.php",
"UpdateVarDumps": "maintenance/updateVarDumps.php",
"MigrateAflFilter": "maintenance/migrateAflFilter.php"
},
"TestAutoloadClasses": {
"AbuseFilterConsequencesTest": "tests/phpunit/AbuseFilterConsequencesTest.php",
"AbuseFilterParserTestCase": "tests/phpunit/unit/AbuseFilterParserTestCase.php",
"AbuseFilterUploadTestTrait": "tests/phpunit/AbuseFilterUploadTestTrait.php",
"AbuseFilterCreateAccountTestTrait": "tests/phpunit/AbuseFilterCreateAccountTestTrait.php",
"AbuseFilterRowsAndFiltersTestTrait": "tests/phpunit/AbuseFilterRowsAndFiltersTestTrait.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": "AbuseFilterHooks::onRegistration",
"HookHandlers": {
"ToolLinks": {
"class": "MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\ToolLinksHandler",
"services": [ "AbuseFilterPermissionManager" ]
},
"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"
}
},
"Hooks": {
"EditFilterMergedContent": "AbuseFilterHooks::onEditFilterMergedContent",
"GetAutoPromoteGroups": "AbuseFilterHooks::onGetAutoPromoteGroups",
"TitleMove": "AbuseFilterHooks::onTitleMove",
"ArticleDelete": "AbuseFilterHooks::onArticleDelete",
"RecentChange_save": "AbuseFilterHooks::onRecentChangeSave",
"ListDefinedTags": "ChangeTags",
"ChangeTagsListActive": "ChangeTags",
"LoadExtensionSchemaUpdates": "SchemaChanges",
"ContributionsToolLinks": "ToolLinks",
"HistoryPageToolLinks": "ToolLinks",
"UndeletePageToolLinks": "ToolLinks",
"UploadVerifyUpload": "AbuseFilterHooks::onUploadVerifyUpload",
"UploadStashFile": "AbuseFilterHooks::onUploadStashFile",
"PageSaveComplete": "AbuseFilterHooks::onPageSaveComplete",
"RenameUserSQL": "AbuseFilterHooks::onRenameUserSQL",
"UserMergeAccountFields": "AbuseFilterHooks::onUserMergeAccountFields",
"ParserOutputStashForEdit": "AbuseFilterHooks::onParserOutputStashForEdit",
"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')."
},
"AbuseFilterParserClass": {
"value": "AbuseFilterParser",
"description": "Class of the parser to use. The only possible values are 'AbuseFilterParser' and 'AbuseFilterCachingParser' (experimental). The code should only use the ParserFactory service."
},
"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 a number between 1 and AbuseFilterProfileActionsCap."
},
"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."
},
"AbuseFilterCustomActionsHandlers": {
"value": [],
"description": "Callback functions for custom actions. DEPRECATED since 1.36! Use the AbuseFilterCustomActions hook instead."
},
"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."
},
"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"
},
"AbuseFilterAflFilterMigrationStage": {
"value": "Bogus value - set in AbuseFilterHooks::onRegistration",
"description": "Stage of the migration of afl_filter to afl_filter_id and afl_global. Should be one of the following (combinations of) constants: SCHEMA_COMPAT_OLD, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, SCHEMA_COMPAT_NEW. For a detailed migration guide, see https://phabricator.wikimedia.org/T220791#5496752 § Method 1."
}
},
"load_composer_autoloader": true,
"manifest_version": 2
}