Smarita has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/383048 )

Change subject: [WIP]Outreachy microtask: write a CAPTCHA plugin that can fall 
back to another algorithm
......................................................................

[WIP]Outreachy microtask: write a CAPTCHA plugin that can fall back to
another algorithm

This captcha plugin, presents the user with a simple button asking him
whether he is a robot. If he clicks on "Yes" then the page reloads and
the captcha changes to SimpleCaptcha.
Kindly note that this is a WIP and hence DO NOT MERGE

BUG: T177034
Change-Id: I8233bdc114e980824d012bb889eb17bb709282d8
---
M FancyCaptcha/ApiFancyCaptchaReload.php
M FancyCaptcha/FancyCaptcha.class.php
M FancyCaptcha/HTMLFancyCaptchaField.php
M FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.js
M includes/ConfirmEditHooks.php
5 files changed, 30 insertions(+), 68 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/ConfirmEdit 
refs/changes/48/383048/1

diff --git a/FancyCaptcha/ApiFancyCaptchaReload.php 
b/FancyCaptcha/ApiFancyCaptchaReload.php
index f3e0d11..45717db 100644
--- a/FancyCaptcha/ApiFancyCaptchaReload.php
+++ b/FancyCaptcha/ApiFancyCaptchaReload.php
@@ -7,13 +7,11 @@
  */
 class ApiFancyCaptchaReload extends ApiBase {
        public function execute() {
-               # Get a new FancyCaptcha form data
-               $captcha = new FancyCaptcha();
-               $info = $captcha->getCaptcha();
-               $captchaIndex = $captcha->storeCaptcha( $info );
-
-               $result = $this->getResult();
-               $result->addValue( null, $this->getModuleName(), [ 'index' => 
$captchaIndex ] );
+        global $wgSessionStarted;
+        if (! $wgSessionStarted) {
+            wfSetupSession();
+        }
+        $_SESSION["botdetected"]="detected";   
                return true;
        }
 
diff --git a/FancyCaptcha/FancyCaptcha.class.php 
b/FancyCaptcha/FancyCaptcha.class.php
index c2477bf..7dcf4cb 100644
--- a/FancyCaptcha/FancyCaptcha.class.php
+++ b/FancyCaptcha/FancyCaptcha.class.php
@@ -459,7 +459,6 @@
 
                $formDescriptor['captchaWord'] = [
                        'class' => HTMLFancyCaptchaField::class,
-                       'imageUrl' => $this->getCaptchaInfo( $req->captchaData, 
$req->captchaId ),
                        'label-message' => $this->getMessage( $this->action ),
                        'showCreateHelp' => in_array( $action, [
                                AuthManager::ACTION_CREATE,
diff --git a/FancyCaptcha/HTMLFancyCaptchaField.php 
b/FancyCaptcha/HTMLFancyCaptchaField.php
index fe8e7da..dcb886c 100644
--- a/FancyCaptcha/HTMLFancyCaptchaField.php
+++ b/FancyCaptcha/HTMLFancyCaptchaField.php
@@ -5,9 +5,6 @@
  * Does not include the captcha ID; that must be included in the form as a 
separate hidden field.
  */
 class HTMLFancyCaptchaField extends HTMLFormField {
-       /** @var string */
-       protected $imageUrl;
-
        /** @var bool */
        protected $showCreateHelp;
 
@@ -21,7 +18,6 @@
         */
        public function __construct( array $params ) {
                parent::__construct( $params );
-               $this->imageUrl = $params['imageUrl'];
                $this->showCreateHelp = !empty( $params['showCreateHelp'] );
        }
 
@@ -46,36 +42,23 @@
                        $captchaReload = '';
                }
 
-               $attribs = [
-                       'type' => 'text',
-                       'id'   => $this->mID,
-                       'name' => $this->mName,
-                       'class' => 'mw-ui-input',
-                       'size' => '12',  // max_length in captcha.py plus fudge 
factor
-                       'dir' => $this->mDir,
-                       'autocomplete' => 'off',
-                       'autocorrect' => 'off',
-                       'autocapitalize' => 'off',
-                       'placeholder' => $this->mParent->msg( 
'fancycaptcha-imgcaptcha-ph' )->text()
-               ];
-               $attribs += $this->getAttributes( [ 'tabindex', 'required', 
'autofocus' ] );
-
                $html = Html::openElement( 'div', [ 'class' => 
'fancycaptcha-captcha-container' ] )
                        . Html::openElement( 'div', [ 'class' => 
'fancycaptcha-captcha-and-reload' ] )
-                       . Html::openElement( 'div', [ 'class' => 
'fancycaptcha-image-container' ] )
-                       . Html::element( 'img', [
-                               'class'  => 'fancycaptcha-image',
-                               'src'    => $this->imageUrl,
-                               'alt'    => ''
-                       ] ) . $captchaReload . Html::closeElement( 'div' ) . 
Html::closeElement( 'div' ) . "\n"
-                       . Html::element( 'input', $attribs );
-
-               if ( $this->showCreateHelp ) {
-                       // use raw element, the message will contain a link
-                       $html .= Html::rawElement( 'small', [
-                               'class' => 'mw-createacct-captcha-assisted'
-                       ], $this->mParent->msg( 'createacct-imgcaptcha-help' 
)->parse() );
-               }
+                       . Html::linkButton(
+                  "Yes, I am a bot!",
+                  [ 'id' => 'bot']
+            ).
+            Html::check(
+                  "Nope, not a bot!",
+                                 $checked = false,
+                                 ['id'=>'baba']
+            ).
+            Html::label(
+                  "Nope, not a bot!",
+                                 'radiodesc',
+                                 []
+            ). "\n"
+                       ;
 
                $html .= Html::closeElement( 'div' );
 
diff --git a/FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.js 
b/FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.js
index d047b19..9511882 100644
--- a/FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.js
+++ b/FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.js
@@ -1,33 +1,9 @@
 ( function ( $, mw ) {
-       $( document ).on( 'click', '.fancycaptcha-reload', function () {
-               var $this = $( this ),
-                       $root = $this.closest( 
'.fancycaptcha-captcha-container' ),
-                       $captchaImage = $root.find( '.fancycaptcha-image' );
-
-               $this.addClass( 'fancycaptcha-reload-loading' );
-
-               // AJAX request to get captcha index key
+       $( document ).on( 'click', '#bot', function () {
                new mw.Api().post( { action: 'fancycaptchareload' } ).done( 
function ( data ) {
-                       var captchaIndex = data.fancycaptchareload.index,
-                               imgSrc;
-                       if ( typeof captchaIndex === 'string' ) {
-                               // replace index key with a new one for captcha 
image
-                               imgSrc = $captchaImage.attr( 'src' ).replace( 
/(wpCaptchaId=)\w+/, '$1' + captchaIndex );
-                               $captchaImage.attr( 'src', imgSrc );
-
-                               // replace index key with a new one for hidden 
tag
-                               $( '#mw-input-captchaId' ).val( captchaIndex );
-                               $( '#mw-input-captchaWord' ).val( '' ).focus();
-
-                               // now do the same with a selector that works 
for pre-1.27 login forms
-                               $root.find( '[name="wpCaptchaId"]' ).val( 
captchaIndex );
-                               $root.find( '[name="wpCaptchaWord"]' ).val( '' 
).focus();
-                       }
-               } )
-               .always( function () {
-                       $this.removeClass( 'fancycaptcha-reload-loading' );
+            window.location.href= 
"/core/index.php?title=Special:CreateAccount";
                } );
 
                return false;
        } );
-}( jQuery, mediaWiki ) );
+}( jQuery, mediaWiki ) );
\ No newline at end of file
diff --git a/includes/ConfirmEditHooks.php b/includes/ConfirmEditHooks.php
index d2dcc55..d403be8 100644
--- a/includes/ConfirmEditHooks.php
+++ b/includes/ConfirmEditHooks.php
@@ -13,7 +13,13 @@
 
                if ( !static::$instanceCreated ) {
                        static::$instanceCreated = true;
-                       $wgCaptcha = new $wgCaptchaClass;
+            if (isset($_SESSION['botdetected'])){
+                $captchatype = 'SimpleCaptcha';
+            }
+            else{
+                $captchatype = $wgCaptchaClass;
+            }
+                       $wgCaptcha = new $captchatype;
                }
 
                return $wgCaptcha;

-- 
To view, visit https://gerrit.wikimedia.org/r/383048
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8233bdc114e980824d012bb889eb17bb709282d8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ConfirmEdit
Gerrit-Branch: master
Gerrit-Owner: Smarita <smarita.sharma2...@vit.ac.in>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to