Re-committing Asirra module after cleanup.
authorNiklas Laxström <nikerabbit@users.mediawiki.org>
Fri, 9 Dec 2011 16:10:27 +0000 (16:10 +0000)
committerNiklas Laxström <nikerabbit@users.mediawiki.org>
Fri, 9 Dec 2011 16:10:27 +0000 (16:10 +0000)
Ping r91976

Asirra.class.php [new file with mode: 0644]
Asirra.i18n.php [new file with mode: 0644]
Asirra.php [new file with mode: 0644]
ext.confirmedit.asirra.js [new file with mode: 0644]

diff --git a/Asirra.class.php b/Asirra.class.php
new file mode 100644 (file)
index 0000000..0a09287
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * @author Bachsau
+ * @author Niklas Laxström
+ */
+
+class Asirra extends SimpleCaptcha {
+       public $asirra_clientscript = 'http://challenge.asirra.com/js/AsirraClientSide.js';
+
+       // As we don't have to store anything but some other things to do,
+       // we're going to replace that constructor completely.
+       function __construct() {
+               global $wgExtensionAssetsPath, $wgAsirraScriptPath;
+               $this->asirra_localpath = "$wgExtensionAssetsPath/ConfirmEdit";
+       }
+
+       function getForm() {
+               global $wgAsirraEnlargedPosition, $wgAsirraCellsPerRow, $wgOut, $wgLang;
+
+               $wgOut->addModules( 'ext.confirmedit.asirra' );
+               $js = Html::linkedScript( $this->asirra_clientscript );
+
+               $message = Xml::encodeJsVar( wfMessage( 'asirra-createaccount-fail' )->plain() );
+               $js .= Html::inlineScript( <<<JAVASCRIPT
+var asirra_js_failed = '$message';
+JAVASCRIPT
+               );
+               $js .=  '<noscript>' . wfMessage( 'asirra-nojs' )->parse() . '</noscript>';
+               return $js;
+       }
+
+       function passCaptcha() {
+               global $wgRequest;
+
+               $ticket = $wgRequest->getVal( 'Asirra_Ticket' );
+               $api = 'http://challenge.asirra.com/cgi/Asirra?';
+               $params = array( 
+                       'action' => 'ValidateTicket',
+                       'ticket' => $ticket,
+               );
+
+               $response = Http::get( $api . wfArrayToCgi( $params ) );
+               $xml = simplexml_load_string( $response );
+               $result = $xml->xpath( '/AsirraValidation/Result' );
+               return strval( $result[0] ) === 'Pass';
+       }
+}
diff --git a/Asirra.i18n.php b/Asirra.i18n.php
new file mode 100644 (file)
index 0000000..b95f8aa
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Internationalisation file for the Asirra module of the ConfirmEdit
+ * extension.
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$messages = array();
+
+/* English */
+$messages['en'] = array(
+       'asirra-desc' => 'Asirra module for ConfirmEdit',
+       'asirra-edit' => 'To help protect against automated edit spam, please select just the cat photos in the box below:', 
+       'asirra-addurl' => 'Your edit includes new external links. To help protect against automated spam, please select just the cat photos in the box below:',
+       'asirra-badpass' => 'To help protect against automated password cracking, please select just the cat photos in the box below:',
+       'asirra-createaccount' => 'To help protect against automated account creation, please select just the cat photos in the box below:',
+       'asirra-createaccount-fail' => "Please correctly identify the cats.",
+       'asirra-create' => 'To help protect against automated page creation, please select just the cat photos in the box below:', 
+       'asirra-nojs' => '\'\'\'Please enable JavaScript and resubmit the page.\'\'\'',
+       'asirra-failed' => 'Please identify all cat images',
+);
+
+
+/** German (Deutsch) */
+$messages['de'] = array(
+       'asirra-desc' => 'Asirra-Modul für ConfirmEdit',
+       'asirra-edit' => 'Zum Schutz vor automatisiertem Spam, wähle bitte nur die Katzen im untenstehenden Feld aus:',
+       'asirra-addurl' => 'Deine Bearbeitung enthält neue externe Links. Zum Schutz vor automatisiertem Spam wähle bitte nur die Katzen im untenstehenden Feld aus:',
+       'asirra-badpass' => 'Zum Schutz gegen automatisiertes Knacken von Passwörtern, wähle bitte nur die Katzen im untenstehenden Feld aus:',
+       'asirra-createaccount' => 'Zum Schutz gegen automatisierte Erstellung von Benutzerkonten wähle bitte nur die Katzen im untenstehenden Feld aus:',
+       'asirra-createaccount-fail' => 'Bitte wähle nur Katzen aus.',
+       'asirra-create' => 'Zum Schutz gegen automatisierte Erstellung von Seiten, wähle bitte nur die Katzen im untenstehenden Feld aus:',
+       'asirra-nojs' => '\'\'\'Bitte aktiviere JavaScript und sende die Seite noch einmal ab.\'\'\''
+);
diff --git a/Asirra.php b/Asirra.php
new file mode 100644 (file)
index 0000000..21dd37a
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Asirra CAPTCHA module for the ConfirmEdit MediaWiki extension.
+ * @author Bachsau
+ * @author Niklas Laxström
+ *
+ * Makes use of the Asirra (Animal Species Image Recognition for
+ * Restricting Access) CAPTCHA service, developed by John Douceur, Jeremy
+ * Elson and Jon Howell at Microsoft Research.
+ *
+ * Asirra uses a large set of images from http://petfinder.com.
+ *
+ * For more information about Asirra, see:
+ * http://research.microsoft.com/en-us/um/redmond/projects/asirra/
+ *
+ * This MediaWiki code is released into the public domain, without any
+ * warranty. YOU CAN DO WITH IT WHATEVER YOU LIKE!
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+       exit;
+}
+
+$dir = dirname( __FILE__ ) . '/';
+require_once( "$dir/ConfirmEdit.php" );
+$dir = dirname( __FILE__ ) . '/';
+
+$wgCaptchaClass = 'Asirra';
+$wgExtensionMessagesFiles['Asirra'] = "$dir/Asirra.i18n.php";
+$wgAutoloadClasses['Asirra'] = "$dir/Asirra.class.php";
+
+$wgResourceModules['ext.confirmedit.asirra'] = array(
+       'localBasePath' => $dir,
+       'remoteExtPath' => 'ConfirmEdit',
+       'scripts' => 'ext.confirmedit.asirra.js',
+       'messages' => array(
+               'asirra-failed',
+       ),
+);
+
diff --git a/ext.confirmedit.asirra.js b/ext.confirmedit.asirra.js
new file mode 100644 (file)
index 0000000..6294b4f
--- /dev/null
@@ -0,0 +1,55 @@
+/*======================================================================*\
+|| #################################################################### ||
+|| # Asirra module for ConfirmEdit by Bachsau                         # ||
+|| # ---------------------------------------------------------------- # ||
+|| # This code is released into public domain, in the hope that it    # ||
+|| # will be useful, but without any warranty.                        # ||
+|| # ------------ YOU CAN DO WITH IT WHATEVER YOU LIKE! ------------- # ||
+|| #################################################################### ||
+\*======================================================================*/
+
+jQuery( function( $ ) {
+       var asirraform = $( "form#userlogin2" )
+       var submitButtonClicked = document.createElement("input");
+       var passThroughFormSubmit = false;
+
+       function PrepareSubmit() {
+               console.log( 'daa' );
+               submitButtonClicked.type = "hidden";
+               var inputFields = asirraform.find( "input" );
+               for (var i=0; i<inputFields.length; i++) {
+                       if (inputFields[i].type === "submit") {
+                               inputFields[i].onclick = function(event) {
+                                       console.log( this );
+                                       submitButtonClicked.name = this.name;
+                                       submitButtonClicked.value = this.value;
+                               }
+                       }
+               }
+
+               asirraform.submit( function() {
+                       return MySubmitForm();
+               } );
+       }
+
+       function MySubmitForm() {
+               if (passThroughFormSubmit) {
+                       return true;
+               }
+               Asirra_CheckIfHuman(HumanCheckComplete);
+               return false;
+       }
+
+       function HumanCheckComplete(isHuman) {
+               if (!isHuman) {
+                       alert( mw.msg( 'asirra-failed' ) );
+               } else {
+                       asirraform.append(submitButtonClicked);
+                       passThroughFormSubmit = true;
+                       asirraform.submit();
+               }
+       }
+       
+       PrepareSubmit();
+       
+} );