"description":"Set to one of SimpleCaptcha, FancyCaptcha, QuestyCaptcha, ReCaptchaNoCaptcha, hCaptcha, Turnstile, or to a custom PHP subclass of SimpleCaptcha. Defaults to the SimpleCaptcha demo captcha. For example, to use FancyCaptcha: `$wgCaptchaClass = 'FancyCaptcha';`",
"value":"SimpleCaptcha"
},
"CaptchaWhitelistIP":{
"description":"DEPRECATED! Use CaptchaBypassIPs",
"value":false
},
"CaptchaBypassIPs":{
"description":"A list of IP addresses that can skip the captcha",
"value":false
},
"CaptchaTriggers":{
"description":"Actions which can trigger a captcha",
"value":{
"edit":false,
"create":false,
"sendemail":false,
"addurl":true,
"createaccount":true,
"badlogin":true,
"badloginperuser":true
},
"merge_strategy":"array_plus"
},
"CaptchaTriggersOnNamespace":{
"description":"Allows forcing/turning off Captcha in specific namespaces.",
"value":{},
"merge_strategy":"array_plus_2d"
},
"CaptchaStorageClass":{
"description":"PHP class used for storing Captcha related session data.",
"description":"Number of seconds a captcha session should last in the data cache before expiring when managing through CaptchaCacheStore class.",
"value":1800
},
"CaptchaBadLoginExpiration":{
"description":"Number of seconds after a bad login (from a specific IP address) that a captcha will be shown to that client on the login form to slow down password-guessing bots. A longer expiration time of $wgCaptchaBadLoginExpiration * 300 will also be applied against a login attempt count of $wgCaptchaBadLoginAttempts * 30.",
"value":300
},
"CaptchaBadLoginPerUserExpiration":{
"description":"Number of seconds after a bad login (for a specific user account) that a captcha will be shown to that client on the login form to slow down password-guessing bots. A longer expiration time of $wgCaptchaBadLoginExpiration * 300 will be applied against a login attempt count of $wgCaptchaBadLoginAttempts * 30.",
"value":600
},
"AllowConfirmedEmail":{
"description":"Allow users who have confirmed their email addresses to post URL links without being shown a captcha.",
"value":false
},
"CaptchaBadLoginAttempts":{
"description":"Number of bad login attempts (from a specific IP address) before triggering the captcha. 0 means the captcha is presented on the first login. A captcha will also be triggered if the number of failed logins exceeds $wgCaptchaBadLoginAttempts * 30 in a period of $wgCaptchaBadLoginExpiration * 300.",
"value":3
},
"CaptchaBadLoginPerUserAttempts":{
"description":"Number of bad login attempts (for a specific user account) before triggering the captcha. 0 means the captcha is presented on the first login. A captcha will also be triggered if the number of failed logins exceeds $wgCaptchaBadLoginPerUserAttempts * 30 in a period of $wgCaptchaBadLoginPerUserExpiration * 300.",
"value":20
},
"CaptchaWhitelist":{
"description":"DEPRECATED: Use CaptchaIgnoredUrls.",
"value":false
},
"CaptchaIgnoredUrls":{
"description":"Urls that won't trigger a captcha.",
"value":false
},
"CaptchaRegexes":{
"description":"Additional regexes to check for. Use full regexes; can match things other than URLs such as junk edits. If the new version matches one and the old version doesn't, show the captcha screen.",
"value":[]
},
"ConfirmEditEnabledAbuseFilterCustomActions":{
"description":"Feature flag to toggle list of available custom actions to enable in AbuseFilter. See AbuseFilterHooks::onAbuseFilterCustomActions.",