{"master":{"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.47.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","abusefilter-modify-blocked-external-domains","abusefilter-bypass-blocked-external-domains","abusefilter-blocked-external-domains-log","abusefilter-access-protected-vars","abusefilter-protected-vars-log"],"GroupPermissions":{"*":{"abusefilter-view":true,"abusefilter-log":true},"user":{"abusefilter-blocked-external-domains-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,"abusefilter-modify-blocked-external-domains":true,"abusefilter-access-protected-vars":true,"abusefilter-protected-vars-log":true},"suppress":{"abusefilter-hidden-log":true,"abusefilter-hide-log":true},"bot":{"abusefilter-bypass-blocked-external-domains":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},"editprotected":{"abusefilter-bypass-blocked-external-domains":true}},"SpecialPages":{"AbuseLog":{"class":"MediaWiki\\Extension\\AbuseFilter\\Special\\SpecialAbuseLog","services":["DBLoadBalancerFactory","LinkBatchFactory","PermissionManager","UserIdentityLookup","AbuseFilterPermissionManager","AbuseFilterConsequencesRegistry","AbuseFilterVariablesBlobStore","AbuseFilterSpecsFormatter","AbuseFilterVariablesFormatter","AbuseFilterVariablesManager","AbuseFilterAbuseLoggerFactory","AbuseFilterFilterLookup","TempUserConfig","ExtensionRegistry","AbuseLogConditionFactory"]},"AbuseFilter":{"class":"MediaWiki\\Extension\\AbuseFilter\\Special\\SpecialAbuseFilter","services":["AbuseFilterPermissionManager","ObjectFactory"]},"BlockedExternalDomains":{"class":"MediaWiki\\Extension\\AbuseFilter\\Special\\BlockedExternalDomains","services":["AbuseFilterBlockedDomainStorage","AbuseFilterBlockedDomainValidator","MainWANObjectCache"]}},"LogTypes":["abusefilter","abusefilterblockeddomainhit","abusefilterprivatedetails","abusefilter-protected-vars"],"LogNames":{"abusefilter":"abusefilter-log-name","abusefilterprivatedetails":"abusefilterprivatedetails-log-name","abusefilter-protected-vars":"abusefilter-protected-vars-log-name"},"LogHeaders":{"abusefilter":"abusefilter-log-header","abusefilter-protected-vars":"abusefilter-protected-vars-log-header"},"LogActionsHandlers":{"abusefilter\/hit":{"class":"MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseLogHitFormatter","services":["AbuseFilterSpecsFormatter"]},"abusefilter\/modify":"MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseFilterModifyLogFormatter","abusefilter\/create":"MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseFilterModifyLogFormatter","abusefilterblockeddomainhit\/*":"MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\AbuseFilterBlockedDomainHitLogFormatter","abusefilterprivatedetails\/access":"MediaWiki\\Logging\\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","abusefilter-protected-vars\/*":{"class":"MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\ProtectedVarsAccessLogFormatter","services":["UserFactory"]}},"ActionFilteredLogs":{"abusefilter":{"modify":["modify"],"create":["create"]},"suppress":{"abuselog":["hide-afl","unhide-afl"]},"rights":{"blockautopromote":["blockautopromote"],"restoreautopromote":["restoreautopromote"]},"abusefilter-protected-vars":{"change-access":["change-access-enable","change-access-disable"],"view-protected-variable-value":["view-protected-var-value"]}},"LogRestrictions":{"abusefilter":"abusefilter-view","abusefilterprivatedetails":"abusefilter-privatedetails-log","abusefilterblockeddomainhit":"abusefilter-blocked-external-domains-log","abusefilter-protected-vars":"abusefilter-protected-vars-log"},"AuthManagerAutoConfig":{"preauth":{"AbuseFilterPreAuthenticationProvider":{"class":"MediaWiki\\Extension\\AbuseFilter\\AbuseFilterPreAuthenticationProvider","services":["AbuseFilterVariableGeneratorFactory","AbuseFilterFilterRunnerFactory","StatsFactory","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","AbuseFilterFilterLookup","AbuseFilterAbuseLoggerFactory","RecentChangeLookup","ReadOnlyMode"]},"abuselogprivatedetails":{"class":"MediaWiki\\Extension\\AbuseFilter\\Api\\AbuseLogPrivateDetails","services":["AbuseFilterPermissionManager","DBLoadBalancerFactory","AbuseFilterLogDetailsLookup","AbuseFilterFilterLookup"]}},"APIListModules":{"abuselog":{"class":"MediaWiki\\Extension\\AbuseFilter\\Api\\QueryAbuseLog","services":["AbuseFilterFilterLookup","AbuseFilterPermissionManager","AbuseFilterVariablesBlobStore","AbuseFilterVariablesManager","UserFactory","AbuseFilterAbuseLoggerFactory","AbuseFilterRuleCheckerFactory","AbuseLogConditionFactory","TemporaryAccountIPsViewerSpecification","ReadOnlyMode"]},"abusefilters":{"class":"MediaWiki\\Extension\\AbuseFilter\\Api\\QueryAbuseFilters","services":["AbuseFilterPermissionManager","AbuseFilterFilterLookup"]}},"ExtensionMessagesFiles":{"AbuseFilterAliases":"AbuseFilter.alias.php"},"attributes":{"CommunityConfiguration":{"EditorCapabilities":{"BlockedDomain":{"class":"MediaWiki\\Extension\\AbuseFilter\\BlockedDomains\\EditorCapability","services":["MainWANObjectCache","LinkRenderer","AbuseFilterBlockedDomainValidator"]}},"ProviderClasses":{"BlockedDomain":{"class":"MediaWiki\\Extension\\AbuseFilter\\BlockedDomains\\BlockedDomainConfigProvider","services":["LocalServerObjectCache","AbuseFilterBlockedDomainValidator"]}},"Providers":{"BlockedDomain":{"store":{"type":"wikipage","args":["MediaWiki:BlockedExternalDomains.json"]},"validator":{"type":"noop"},"type":"BlockedDomain","options":{"editorCapability":"BlockedDomain"}}}},"Echo":{"Notifications":{"throttled-filter":{"category":"system","section":"alert","group":"negative","presentation-model":"MediaWiki\\Extension\\AbuseFilter\\ThrottleFilterPresentationModel"}}},"VisualEditor":{"PluginModules":["ext.abuseFilter.visualEditor"]}},"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","services":["AbuseFilterConsequencesRegistry","AbuseFilterBlockAutopromoteStore"]},"ChangeTags":{"class":"MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\ChangeTagsHandler","services":["AbuseFilterChangeTagsManager"]},"SchemaChanges":{"class":"MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\SchemaChangesHandler","factory":"MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\SchemaChangesHandler::newFromGlobalState"},"EditPermission":{"class":"MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\EditPermissionHandler","services":["MainConfig","PermissionManager"]},"RecentChangeSave":{"class":"MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\RecentChangeSaveHandler","services":["AbuseFilterChangeTagger"]},"FilteredActions":{"class":"MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\FilteredActionsHandler","services":["StatsFactory","AbuseFilterFilterRunnerFactory","AbuseFilterVariableGeneratorFactory","AbuseFilterEditRevUpdater","AbuseFilterBlockedDomainFilter","PermissionManager","TitleFactory","UserFactory","TempUserConfig"]},"CheckUser":{"class":"MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\CheckUserHandler","services":["AbuseFilterFilterUser","UserIdentityUtils"]},"ConfirmEdit":{"class":"MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\ConfirmEditHandler","optional_services":["ConfirmEditCaptchaFactory"]},"UserMerge":{"class":"MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\UserMergeHandler"},"ResourceLoader":{"class":"MediaWiki\\Extension\\AbuseFilter\\Hooks\\Handlers\\ResourceLoaderHandler"}},"Hooks":{"EditFilterMergedContent":["FilteredActions","ConfirmEdit"],"GetAutoPromoteGroups":"AutoPromoteGroups","TitleMove":"FilteredActions","PageDelete":"FilteredActions","RecentChange_save":"RecentChangeSave","ListDefinedTags":"ChangeTags","ChangeTagsListActive":"ChangeTags","LoadExtensionSchemaUpdates":"SchemaChanges","ContributionsToolLinks":"ToolLinks","HistoryPageToolLinks":"ToolLinks","UndeletePageToolLinks":"ToolLinks","HtmlPageLinkRendererEnd":"ToolLinks","UploadVerifyUpload":"FilteredActions","UploadStashFile":"FilteredActions","getUserPermissionsErrors":"EditPermission","CheckUserInsertChangesRow":"CheckUser","CheckUserInsertPrivateEventRow":"CheckUser","CheckUserInsertLogEventRow":"CheckUser","UserMergeAccountFields":"UserMerge","ParserOutputStashForEdit":"FilteredActions","JsonValidateSave":"EditPermission","ResourceLoaderRegisterModules":"ResourceLoader"},"DomainEventIngresses":[{"events":["PageLatestRevisionChanged"],"class":"MediaWiki\\Extension\\AbuseFilter\\MediaWikiEventIngress\\PageEventIngress","services":["AbuseFilterEditRevUpdater","WikiPageFactory"]}],"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 \u2013\u00a0used 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 PurgeOldLogData.php"},"AbuseFilterLogProtectedVariablesMaxAge":{"value":7776000,"description":"Age used as a cutoff when purging old protected variable values from the variables dump. Defaults to 3 months. Note that the user_unnamed_ip protected variable is purged after $wgAbuseFilterLogIPMaxAge seconds instead. Used by maintenance script PurgeOldLogData.php. If set to 0, then protected variables are never purged."},"AbuseFilterSlowFilterRuntimeLimit":{"value":500,"description":"Runtime in milliseconds before a filter is considered slow."},"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"},"AbuseFilterEnableBlockedExternalDomain":{"value":false,"description":"Temporary config value to disable Special:BlockedExternalDomains"},"AbuseFilterProtectedVariables":{"value":["user_unnamed_ip"],"description":"Array of variables that are be considered protected (limited access) and require the abusefilter-access-protected-vars right to use\/view. To access this list, use the AbuseFilterProtectedVariablesLookup service which will also include protected variables provided by other extensions."},"AbuseFilterUseCodeEditor":{"value":true,"description":"Set to true to enable the CodeEditor extension integration"},"AbuseFilterUseCodeMirror":{"value":false,"description":"Set to true to enable the CodeMirror extension integration"}},"composer":"mediawiki\/abuse-filter","repository":"https:\/\/gerrit.wikimedia.org\/r\/mediawiki\/extensions\/AbuseFilter"}}