summaryrefslogtreecommitdiff
path: root/extensions/ConfirmEdit/Asirra.class.php
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/ConfirmEdit/Asirra.class.php')
-rw-r--r--extensions/ConfirmEdit/Asirra.class.php55
1 files changed, 55 insertions, 0 deletions
diff --git a/extensions/ConfirmEdit/Asirra.class.php b/extensions/ConfirmEdit/Asirra.class.php
new file mode 100644
index 00000000..ae1178a1
--- /dev/null
+++ b/extensions/ConfirmEdit/Asirra.class.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * @author Bachsau
+ * @author Niklas Laxström
+ */
+
+class Asirra extends SimpleCaptcha {
+ public $asirra_clientscript = '//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;
+ $this->asirra_localpath = "$wgExtensionAssetsPath/ConfirmEdit";
+ }
+
+ function getForm() {
+ global $wgOut;
+
+ $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 getMessage( $action ) {
+ $name = 'asirra-' . $action;
+ $text = wfMessage( $name )->text();
+ # Obtain a more tailored message, if possible, otherwise, fall
+ # back to the default for edits
+ return wfMessage( $name, $text )->isDisabled() ? wfMessage( 'asirra-edit' )->text() : $text;
+ }
+
+ 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';
+ }
+}