{
	"name": "Abuse Filter",
	"author": [
		"Andrew Garrett",
		"River Tarnell",
		"Victor Vasiliev",
		"Marius Hoch"
	],
	"url": "https://www.mediawiki.org/wiki/Extension:AbuseFilter",
	"descriptionmsg": "abusefilter-desc",
	"license-name": "GPL-2.0+",
	"type": "antispam",
	"requires": {
		"MediaWiki": ">= 1.25.0"
	},
	"AvailableRights": [
		"abusefilter-modify",
		"abusefilter-log-detail",
		"abusefilter-view",
		"abusefilter-log",
		"abusefilter-private",
		"abusefilter-modify-restricted",
		"abusefilter-revert",
		"abusefilter-view-private",
		"abusefilter-log-private",
		"abusefilter-hidden-log",
		"abusefilter-hide-log",
		"abusefilter-modify-global"
	],
	"SpecialPages": {
		"AbuseLog": "SpecialAbuseLog",
		"AbuseFilter": "SpecialAbuseFilter"
	},
	"LogTypes": [
		"abusefilter"
	],
	"LogNames": {
		"abusefilter": "abusefilter-log-name"
	},
	"LogHeaders": {
		"abusefilter": "abusefilter-log-header"
	},
	"LogActions": {
		"suppress/hide-afl": "abusefilter-logentry-suppress",
		"suppress/unhide-afl": "abusefilter-logentry-unsuppress"
	},
	"LogActionsHandlers": {
		"abusefilter/modify": [
			"AbuseFilter",
			"modifyActionText"
		],
		"abusefilter/hit": "AbuseLogHitFormatter"
	},
	"APIModules": {
		"abusefilterchecksyntax": "ApiAbuseFilterCheckSyntax",
		"abusefilterevalexpression": "ApiAbuseFilterEvalExpression",
		"abusefilterunblockautopromote": "ApiAbuseFilterUnblockAutopromote",
		"abusefiltercheckmatch": "ApiAbuseFilterCheckMatch"
	},
	"APIListModules": {
		"abuselog": "ApiQueryAbuseLog",
		"abusefilters": "ApiQueryAbuseFilters"
	},
	"MessagesDirs": {
		"AbuseFilter": [
			"i18n"
		]
	},
	"ExtensionMessagesFiles": {
		"AbuseFilterAliases": "AbuseFilter.alias.php"
	},
	"AutoloadClasses": {
		"AbuseFilter": "includes/AbuseFilter.class.php",
		"AbuseFilterCachingParser" : "includes/parser/AbuseFilterCachingParser.php",
		"AbuseFilterParser": "includes/parser/AbuseFilterParser.php",
		"AbuseFilterTokenizer": "includes/parser/AbuseFilterTokenizer.php",
		"AbuseFilterHooks": "AbuseFilter.hooks.php",
		"AbuseFilterPreAuthenticationProvider": "includes/AbuseFilterPreAuthenticationProvider.php",
		"SpecialAbuseLog": "special/SpecialAbuseLog.php",
		"AbuseLogPager": "special/SpecialAbuseLog.php",
		"SpecialAbuseFilter": "special/SpecialAbuseFilter.php",
		"AbuseLogHitFormatter": "includes/AbuseLogHitFormatter.php",
		"AbuseFilterViewList": "Views/AbuseFilterViewList.php",
		"AbuseFilterPager": "Views/AbuseFilterViewList.php",
		"GlobalAbuseFilterPager": "Views/AbuseFilterViewList.php",
		"AbuseFilterView": "Views/AbuseFilterView.php",
		"AbuseFilterViewEdit": "Views/AbuseFilterViewEdit.php",
		"AbuseFilterViewTools": "Views/AbuseFilterViewTools.php",
		"AbuseFilterViewHistory": "Views/AbuseFilterViewHistory.php",
		"AbuseFilterHistoryPager": "Views/AbuseFilterViewHistory.php",
		"AbuseFilterViewRevert": "Views/AbuseFilterViewRevert.php",
		"AbuseFilterViewTestBatch": "Views/AbuseFilterViewTestBatch.php",
		"AbuseFilterViewExamine": "Views/AbuseFilterViewExamine.php",
		"AbuseFilterExaminePager": "Views/AbuseFilterViewExamine.php",
		"AbuseFilterChangesList": "Views/AbuseFilterView.php",
		"AbuseFilterViewDiff": "Views/AbuseFilterViewDiff.php",
		"TableDiffFormatterFullContext": "Views/AbuseFilterViewDiff.php",
		"AbuseFilterViewImport": "Views/AbuseFilterViewImport.php",
		"AbuseFilterVariableHolder": "includes/AbuseFilterVariableHolder.php",
		"AFComputedVariable": "includes/AFComputedVariable.php",
		"AFPData": "includes/parser/AFPData.php",
		"AFPException": "includes/parser/AFPException.php",
		"AFPParserState": "includes/parser/AFPParserState.php",
		"AFPToken": "includes/parser/AFPToken.php",
		"AFPTreeNode": "includes/parser/AFPTreeNode.php",
		"AFPTreeParser": "includes/parser/AFPTreeParser.php",
		"AFPUserVisibleException": "includes/parser/AFPUserVisibleException.php",
		"ApiQueryAbuseLog": "api/ApiQueryAbuseLog.php",
		"ApiQueryAbuseFilters": "api/ApiQueryAbuseFilters.php",
		"ApiAbuseFilterCheckSyntax": "api/ApiAbuseFilterCheckSyntax.php",
		"ApiAbuseFilterEvalExpression": "api/ApiAbuseFilterEvalExpression.php",
		"ApiAbuseFilterUnblockAutopromote": "api/ApiAbuseFilterUnblockAutopromote.php",
		"ApiAbuseFilterCheckMatch": "api/ApiAbuseFilterCheckMatch.php"
	},
	"ResourceModules": {
		"ext.abuseFilter": {
			"position": "top",
			"styles": "ext.abuseFilter.css"
		},
		"ext.abuseFilter.edit": {
			"scripts": "ext.abuseFilter.edit.js",
			"messages": [
				"abusefilter-edit-syntaxok",
				"abusefilter-edit-syntaxerr",
				"abusefilter-http-error",
				"unknown-error"
			],
			"dependencies": [
				"mediawiki.util",
				"mediawiki.api",
				"jquery.textSelection",
				"jquery.spinner"
			]
		},
		"ext.abuseFilter.tools": {
			"scripts": "ext.abuseFilter.tools.js",
			"messages": [
				"abusefilter-reautoconfirm-notallowed",
				"abusefilter-reautoconfirm-none",
				"abusefilter-reautoconfirm-done",
				"abusefilter-http-error",
				"unknown-error"
			],
			"dependencies": [
				"mediawiki.api",
				"mediawiki.notify",
				"user.tokens",
				"jquery.spinner"
			]
		},
		"ext.abuseFilter.examine": {
			"scripts": "ext.abuseFilter.examine.js",
			"messages": [
				"abusefilter-examine-match",
				"abusefilter-examine-nomatch",
				"abusefilter-examine-syntaxerror",
				"abusefilter-examine-notfound",
				"abusefilter-mustbeeditor",
				"abusefilter-http-error",
				"unknown-error"
			],
			"dependencies": [
				"jquery.spinner",
				"mediawiki.api"
			]
		}
	},
	"ResourceFileModulePaths": {
		"localBasePath": "modules",
		"remoteExtPath": "AbuseFilter/modules"
	},
	"callback": "AbuseFilterHooks::onRegistration",
	"GrantPermissions": {
		"basic": {
			"abusefilter-view": true,
			"abusefilter-log-detail": true,
			"abusefilter-log": true
		}
	},
	"Hooks": {
		"EditFilterMergedContent": "AbuseFilterHooks::onEditFilterMergedContent",
		"GetAutoPromoteGroups": "AbuseFilterHooks::onGetAutoPromoteGroups",
		"AbortMove": "AbuseFilterHooks::onAbortMove",
		"MovePageCheckPermissions": "AbuseFilterHooks::onMovePageCheckPermissions",
		"ArticleDelete": "AbuseFilterHooks::onArticleDelete",
		"RecentChange_save": "AbuseFilterHooks::onRecentChangeSave",
		"ListDefinedTags": "AbuseFilterHooks::onListDefinedTags",
		"ChangeTagsListActive": "AbuseFilterHooks::onChangeTagsListActive",
		"LoadExtensionSchemaUpdates": "AbuseFilterHooks::onLoadExtensionSchemaUpdates",
		"ContributionsToolLinks": "AbuseFilterHooks::onContributionsToolLinks",
		"UploadVerifyFile": "AbuseFilterHooks::onUploadVerifyFile",
		"UploadVerifyUpload": "AbuseFilterHooks::onUploadVerifyUpload",
		"UploadStashFile": "AbuseFilterHooks::onUploadStashFile",
		"MakeGlobalVariablesScript": "AbuseFilterHooks::onMakeGlobalVariablesScript",
		"PageContentSaveComplete": "AbuseFilterHooks::onPageContentSaveComplete",
		"UserMergeAccountFields": "AbuseFilterHooks::onUserMergeAccountFields",
		"ParserOutputStashForEdit": "AbuseFilterHooks::onParserOutputStashForEdit"
	},
	"config": {
		"@doc": "see AbuseFilter.php",
		"AbuseFilterActions": {
			"throttle": true,
			"warn": true,
			"disallow": true,
			"blockautopromote": true,
			"block": true,
			"rangeblock": false,
			"degroup": true,
			"tag": true,
			"_merge_strategy": "array_plus"
		},
		"AbuseFilterConditionLimit": 1000,
		"AbuseFilterParserClass": "AbuseFilterParser",
		"AbuseFilterEmergencyDisableThreshold": {
			"default": 0.05,
			"_merge_strategy": "array_plus"
		},
		"AbuseFilterEmergencyDisableCount": {
			"default": 2,
			"_merge_strategy": "array_plus"
		},
		"AbuseFilterEmergencyDisableAge": {
			"default": 86400,
			"_merge_strategy": "array_plus"
		},
		"AbuseFilterRestrictions": {
			"flag": false,
			"throttle": false,
			"warn": false,
			"disallow": false,
			"blockautopromote": true,
			"block": true,
			"rangeblock": true,
			"degroup": true,
			"tag": false,
			"_merge_strategy": "array_plus"
		},
		"AbuseFilterNotifications": false,
		"AbuseFilterNotificationsPrivate": false,
		"AbuseFilterCentralDB": null,
		"AbuseFilterIsCentral": false,
		"AbuseFilterDisallowGlobalLocalBlocks": false,
		"AbuseFilterBlockDuration": "indefinite",
		"AbuseFilterAnonBlockDuration": null,
		"AbuseFilterCustomActionsHandlers": [],
		"AbuseFilterValidGroups": [
			"default"
		],
		"AbuseFilterDefaultWarningMessage": {
			"default": "abusefilter-warning",
			"_merge_strategy": "array_plus"
		},
		"AbuseFilterLogIPMaxAge": 7776000,
		"AbuseFilterProfile": false
	},
	"load_composer_autoloader": true,
	"manifest_version": 1
}
