MediaWiki  1.34.0
QuestyCaptcha.php
Go to the documentation of this file.
1 <?php
2 
12 
14  // used for questycaptcha-edit, questycaptcha-addurl, questycaptcha-badlogin,
15  // questycaptcha-createaccount, questycaptcha-create, questycaptcha-sendemail via getMessage()
16  protected static $messagePrefix = 'questycaptcha-';
17 
24  protected function keyMatch( $answer, $info ) {
25  if ( is_array( $info['answer'] ) ) {
26  return in_array( strtolower( $answer ), array_map( 'strtolower', $info['answer'] ) );
27  } else {
28  return strtolower( $answer ) == strtolower( $info['answer'] );
29  }
30  }
31 
35  protected function addCaptchaAPI( &$resultArr ) {
36  $captcha = $this->getCaptcha();
37  $index = $this->storeCaptcha( $captcha );
38  $resultArr['captcha'] = $this->describeCaptchaType();
39  $resultArr['captcha']['id'] = $index;
40  $resultArr['captcha']['question'] = $captcha['question'];
41  }
42 
46  public function describeCaptchaType() {
47  return [
48  'type' => 'question',
49  'mime' => 'text/html',
50  ];
51  }
52 
56  public function getCaptcha() {
57  global $wgCaptchaQuestions;
58 
59  // Backwards compatibility
60  if ( $wgCaptchaQuestions === array_values( $wgCaptchaQuestions ) ) {
61  return $wgCaptchaQuestions[ mt_rand( 0, count( $wgCaptchaQuestions ) - 1 ) ];
62  }
63 
64  $question = array_rand( $wgCaptchaQuestions, 1 );
65  $answer = $wgCaptchaQuestions[ $question ];
66  return [ 'question' => $question, 'answer' => $answer ];
67  }
68 
73  public function getFormInformation( $tabIndex = 1 ) {
74  $captcha = $this->getCaptcha();
75  if ( !$captcha ) {
76  die(
77  "No questions found; set some in LocalSettings.php using the format from QuestyCaptcha.php."
78  );
79  }
80  $index = $this->storeCaptcha( $captcha );
81  return [
82  'html' => "<p><label for=\"wpCaptchaWord\">{$captcha['question']}</label> " .
83  Html::element( 'input', [
84  'name' => 'wpCaptchaWord',
85  'id' => 'wpCaptchaWord',
86  'class' => 'mw-ui-input',
87  'required',
88  'autocomplete' => 'off',
89  // tab in before the edit textarea
90  'tabindex' => $tabIndex ] ) .
91  "</p>\n" .
92  Xml::element( 'input', [
93  'type' => 'hidden',
94  'name' => 'wpCaptchaId',
95  'id' => 'wpCaptchaId',
96  'value' => $index ] )
97  ];
98  }
99 
100  public function showHelp() {
101  global $wgOut;
102  $wgOut->setPageTitle( wfMessage( 'captchahelp-title' )->text() );
103  $wgOut->addWikiMsg( 'questycaptchahelp-text' );
104  if ( CaptchaStore::get()->cookiesNeeded() ) {
105  $wgOut->addWikiMsg( 'captchahelp-cookies-needed' );
106  }
107  }
108 
114  public function getCaptchaInfo( $captchaData, $id ) {
115  return $captchaData['question'];
116  }
117 
124  public function onAuthChangeFormFields( array $requests, array $fieldInfo,
125  array &$formDescriptor, $action ) {
127  $req =
128  AuthenticationRequest::getRequestByClass( $requests,
129  CaptchaAuthenticationRequest::class, true );
130  if ( !$req ) {
131  return;
132  }
133 
134  // declare RAW HTML output.
135  $formDescriptor['captchaInfo']['raw'] = true;
136  $formDescriptor['captchaWord']['label-message'] = null;
137  }
138 }
QuestyCaptcha\getFormInformation
getFormInformation( $tabIndex=1)
Definition: QuestyCaptcha.php:73
CaptchaStore\get
static get()
Get somewhere to store captcha data that will persist between requests.
Definition: CaptchaStore.php:42
QuestyCaptcha
Definition: QuestyCaptcha.php:13
QuestyCaptcha\$messagePrefix
static $messagePrefix
Definition: QuestyCaptcha.php:16
QuestyCaptcha\describeCaptchaType
describeCaptchaType()
Definition: QuestyCaptcha.php:46
wfMessage
wfMessage( $key,... $params)
This is the function for getting translated interface messages.
Definition: GlobalFunctions.php:1264
SimpleCaptcha\$action
string $action
Used to select the right message.
Definition: SimpleCaptcha.php:20
QuestyCaptcha\getCaptcha
getCaptcha()
Definition: QuestyCaptcha.php:56
Xml\element
static element( $element, $attribs=null, $contents='', $allowShortTag=true)
Format an XML element with given attributes and, optionally, text content.
Definition: Xml.php:41
QuestyCaptcha\getCaptchaInfo
getCaptchaInfo( $captchaData, $id)
Definition: QuestyCaptcha.php:114
SimpleCaptcha
Demo CAPTCHA (not for production usage) and base class for real CAPTCHAs.
Definition: SimpleCaptcha.php:9
SimpleCaptcha\storeCaptcha
storeCaptcha( $info)
Generate a captcha session ID and save the info in PHP's session storage.
Definition: SimpleCaptcha.php:1054
QuestyCaptcha\keyMatch
keyMatch( $answer, $info)
Validate a captcha response.
Definition: QuestyCaptcha.php:24
QuestyCaptcha\onAuthChangeFormFields
onAuthChangeFormFields(array $requests, array $fieldInfo, array &$formDescriptor, $action)
Definition: QuestyCaptcha.php:124
QuestyCaptcha\addCaptchaAPI
addCaptchaAPI(&$resultArr)
Definition: QuestyCaptcha.php:35
QuestyCaptcha\showHelp
showHelp()
Show a page explaining what this wacky thing is.
Definition: QuestyCaptcha.php:100
$wgOut
$wgOut
Definition: Setup.php:886
MediaWiki\Auth\AuthenticationRequest
This is a value object for authentication requests.
Definition: AuthenticationRequest.php:37