mediawiki-extensions-Confir.../includes/auth/CaptchaAuthenticationRequest.php
Gergő Tisza 31c59374a4 Add AuthManager support to SimpleCaptcha, QuestyCaptcha, FancyCaptcha, MathCaptcha
Also update MathCaptcha so that it works with recent versions of
Math (and breaks with old ones). Also fix MathCaptcha API output,
which used to send the question in plaintext.

Bug: T110302
Change-Id: I0da671a546700110d789b79a3089460abd9cce3b
Depends-On: I8b52ec8ddf494f23941807638f149f15b5e46b0c
2016-05-16 09:50:25 +00:00

84 lines
2.2 KiB
PHP

<?php
use MediaWiki\Auth\AuthenticationRequest;
use MediaWiki\Auth\AuthManager;
class CaptchaAuthenticationRequest extends AuthenticationRequest {
/** @var string Identifier of the captcha. Used internally to remember which captcha was used. */
public $captchaId;
/** @var array Information about the captcha (e.g. question text; solution). Exact semantics
* differ between types. */
public $captchaData;
/** @var string Captcha solution submitted by the user. */
public $captchaWord;
public function __construct( $id, $data ) {
$this->captchaId = $id;
$this->captchaData = $data;
}
public function loadFromSubmission( array $data ) {
$success = parent::loadFromSubmission( $data );
if ( $success ) {
// captchaId and captchaWord was set from the submission but captchaData was not.
$captcha = ConfirmEditHooks::getInstance();
$this->captchaData = $captcha->retrieveCaptcha( $this->captchaId );
if ( !$this->captchaData ) {
return false;
}
}
return $success;
}
public function getFieldInfo() {
$captcha = ConfirmEditHooks::getInstance();
$action = 'generic'; // doesn't actually exist but *Captcha::getMessage will handle that
switch ( $this->action ) {
case AuthManager::ACTION_LOGIN:
$action = 'badlogin';
break;
case AuthManager::ACTION_CREATE:
$action = 'createaccount';
break;
}
$fields = [
'captchaId' => [
'type' => 'hidden',
'value' => $this->captchaId,
'label' => wfMessage( 'captcha-id-label' ),
'help' => wfMessage( 'captcha-id-help' ),
],
'captchaInfo' => [
'type' => 'null',
'label' => $captcha->getMessage( $action ),
'value' => $captcha->getCaptchaInfo( $this->captchaData, $this->captchaId ),
'help' => wfMessage( 'captcha-info-help' ),
],
'captchaWord' => [
'type' => 'string',
'label' => wfMessage( 'captcha-label' ),
'help' => wfMessage( 'captcha-help' ),
],
];
return $fields;
}
public function getMetadata() {
$captcha = ConfirmEditHooks::getInstance();
return $captcha->describeCaptchaType();
}
public static function __set_state( $data ) {
$ret = new static( null, null );
foreach ( $data as $k => $v ) {
$ret->$k = $v;
}
return $ret;
}
}