mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/ConfirmEdit
synced 2024-11-23 15:56:50 +00:00
hCaptcha: Extra logging for captcha solve
Bug: T377341 Change-Id: I53934a3a0756878e18de336fd644b54f542ee9e5
This commit is contained in:
parent
a1c4dccbf2
commit
cd607319c2
|
@ -443,12 +443,12 @@ class FancyCaptcha extends SimpleCaptcha {
|
|||
* Delete a solved captcha image, if $wgCaptchaDeleteOnSolve is true.
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected function passCaptcha( $index, $word ) {
|
||||
protected function passCaptcha( $index, $word, $user ) {
|
||||
global $wgCaptchaDeleteOnSolve;
|
||||
|
||||
// get the captcha info before it gets deleted
|
||||
$info = $this->retrieveCaptcha( $index );
|
||||
$pass = parent::passCaptcha( $index, $word );
|
||||
$pass = parent::passCaptcha( $index, $word, $user );
|
||||
|
||||
if ( $pass && $wgCaptchaDeleteOnSolve ) {
|
||||
$this->getBackend()->quickDelete( [
|
||||
|
|
|
@ -14,6 +14,7 @@ use MediaWiki\MediaWikiServices;
|
|||
use MediaWiki\Message\Message;
|
||||
use MediaWiki\Request\WebRequest;
|
||||
use MediaWiki\Status\Status;
|
||||
use MediaWiki\User\UserIdentity;
|
||||
|
||||
class ReCaptchaNoCaptcha extends SimpleCaptcha {
|
||||
/**
|
||||
|
@ -122,9 +123,10 @@ HTML;
|
|||
*
|
||||
* @param mixed $_ Not used (ReCaptcha v2 puts index and solution in a single string)
|
||||
* @param string $word captcha solution
|
||||
* @param UserIdentity $user
|
||||
* @return bool
|
||||
*/
|
||||
protected function passCaptcha( $_, $word ) {
|
||||
protected function passCaptcha( $_, $word, $user ) {
|
||||
global $wgRequest, $wgReCaptchaSecretKey, $wgReCaptchaSendRemoteIP;
|
||||
|
||||
$url = 'https://www.recaptcha.net/recaptcha/api/siteverify';
|
||||
|
|
|
@ -1026,7 +1026,7 @@ class SimpleCaptcha {
|
|||
return false;
|
||||
}
|
||||
|
||||
if ( $this->passCaptcha( $index, $word ) ) {
|
||||
if ( $this->passCaptcha( $index, $word, $user ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1044,17 +1044,18 @@ class SimpleCaptcha {
|
|||
*/
|
||||
public function passCaptchaFromRequest( WebRequest $request, User $user ) {
|
||||
[ $index, $word ] = $this->getCaptchaParamsFromRequest( $request );
|
||||
return $this->passCaptcha( $index, $word );
|
||||
return $this->passCaptcha( $index, $word, $user );
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a required captcha run, test form input for correct
|
||||
* input on the open session.
|
||||
* @param string $index Captcha idenitifier
|
||||
* @param string $index Captcha identifier
|
||||
* @param string $word Captcha solution
|
||||
* @param User $user
|
||||
* @return bool if passed, false if failed or new session
|
||||
*/
|
||||
protected function passCaptcha( $index, $word ) {
|
||||
protected function passCaptcha( $index, $word, $user ) {
|
||||
// Don't check the same CAPTCHA twice in one session,
|
||||
// if the CAPTCHA was already checked - Bug T94276
|
||||
if ( $this->isCaptchaSolved() !== null ) {
|
||||
|
|
|
@ -14,6 +14,7 @@ use MediaWiki\MediaWikiServices;
|
|||
use MediaWiki\Message\Message;
|
||||
use MediaWiki\Request\WebRequest;
|
||||
use MediaWiki\Status\Status;
|
||||
use MediaWiki\User\UserIdentity;
|
||||
|
||||
class Turnstile extends SimpleCaptcha {
|
||||
/**
|
||||
|
@ -98,9 +99,10 @@ class Turnstile extends SimpleCaptcha {
|
|||
*
|
||||
* @param mixed $_ Not used
|
||||
* @param string $word captcha solution
|
||||
* @param UserIdentity $user
|
||||
* @return bool
|
||||
*/
|
||||
protected function passCaptcha( $_, $word ) {
|
||||
protected function passCaptcha( $_, $word, $user ) {
|
||||
global $wgRequest, $wgTurnstileSecretKey, $wgTurnstileSendRemoteIP;
|
||||
|
||||
$url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify';
|
||||
|
|
|
@ -12,11 +12,13 @@ use MediaWiki\Extension\ConfirmEdit\SimpleCaptcha\SimpleCaptcha;
|
|||
use MediaWiki\Html\Html;
|
||||
use MediaWiki\Json\FormatJson;
|
||||
use MediaWiki\Language\RawMessage;
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use MediaWiki\Message\Message;
|
||||
use MediaWiki\Request\ContentSecurityPolicy;
|
||||
use MediaWiki\Request\WebRequest;
|
||||
use MediaWiki\Status\Status;
|
||||
use MediaWiki\User\UserIdentity;
|
||||
|
||||
class HCaptcha extends SimpleCaptcha {
|
||||
/**
|
||||
|
@ -119,9 +121,10 @@ class HCaptcha extends SimpleCaptcha {
|
|||
*
|
||||
* @param mixed $_ Not used
|
||||
* @param string $token token from the POST data
|
||||
* @param UserIdentity $user
|
||||
* @return bool
|
||||
*/
|
||||
protected function passCaptcha( $_, $token ) {
|
||||
protected function passCaptcha( $_, $token, $user ) {
|
||||
$webRequest = RequestContext::getMain()->getRequest();
|
||||
|
||||
$secretKey = $this->hCaptchaConfig->get( 'HCaptchaSecretKey' );
|
||||
|
@ -155,7 +158,8 @@ class HCaptcha extends SimpleCaptcha {
|
|||
$this->logCheckError( $status );
|
||||
return false;
|
||||
}
|
||||
$response = FormatJson::decode( $request->getContent(), true );
|
||||
$json = $request->getContent();
|
||||
$response = FormatJson::decode( $json, true );
|
||||
if ( !$response ) {
|
||||
$this->error = 'json';
|
||||
$this->logCheckError( $this->error );
|
||||
|
@ -167,6 +171,14 @@ class HCaptcha extends SimpleCaptcha {
|
|||
return false;
|
||||
}
|
||||
|
||||
LoggerFactory::getInstance( 'captcha' )
|
||||
->debug( 'Captcha solution attempt for {user}', [
|
||||
'event' => 'captcha.solve',
|
||||
'user' => $user->getName(),
|
||||
'success' => $response['success'],
|
||||
'blob' => $json,
|
||||
] );
|
||||
|
||||
return $response['success'];
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue