X-Git-Url: https://git.toastfreeware.priv.at/toast/cookiecaptcha.git/blobdiff_plain/4eadac72c8f948bfe06ca604b7649eeebb6eb6af..bd2fd6676b7154f68f11b3bf73127fe0cbfd9bac:/FancyCaptcha.class.php diff --git a/FancyCaptcha.class.php b/FancyCaptcha.class.php index abdb2f8..1d7aa2e 100644 --- a/FancyCaptcha.class.php +++ b/FancyCaptcha.class.php @@ -15,7 +15,7 @@ class FancyCaptcha extends SimpleCaptcha { $digest = $wgCaptchaSecret . $info['salt'] . $answer . $wgCaptchaSecret . $info['salt']; $answerHash = substr( md5( $digest ), 0, 16 ); - if( $answerHash == $info['hash'] ) { + if ( $answerHash == $info['hash'] ) { wfDebug( "FancyCaptcha: answer hash matches expected {$info['hash']}\n" ); return true; } else { @@ -24,12 +24,26 @@ class FancyCaptcha extends SimpleCaptcha { } } + function addCaptchaAPI( &$resultArr ) { + $info = $this->pickImage(); + if ( !$info ) { + $resultArr['captcha']['error'] = 'Out of images'; + return; + } + $index = $this->storeCaptcha( $info ); + $title = Title::makeTitle( NS_SPECIAL, 'Captcha/image' ); + $resultArr['captcha']['type'] = 'image'; + $resultArr['captcha']['mime'] = 'image/png'; + $resultArr['captcha']['id'] = $index; + $resultArr['captcha']['url'] = $title->getLocalUrl( 'wpCaptchaId=' . urlencode( $index ) ); + } + /** * Insert the captcha prompt into the edit form. */ function getForm() { $info = $this->pickImage(); - if( !$info ) { + if ( !$info ) { die( "out of captcha images; this shouldn't happen" ); } @@ -43,19 +57,19 @@ class FancyCaptcha extends SimpleCaptcha { $title = Title::makeTitle( NS_SPECIAL, 'Captcha/image' ); return "
" . - wfElement( 'img', array( + Xml::element( 'img', array( 'src' => $title->getLocalUrl( 'wpCaptchaId=' . urlencode( $index ) ), 'width' => $info['width'], 'height' => $info['height'], 'alt' => '' ) ) . "
\n" . - wfElement( 'input', array( + Xml::element( 'input', array( 'type' => 'hidden', 'name' => 'wpCaptchaId', 'id' => 'wpCaptchaId', 'value' => $index ) ) . "" . - wfElement( 'input', array( + Xml::element( 'input', array( 'name' => 'wpCaptchaWord', 'id' => 'wpCaptchaWord', 'tabindex' => 1 ) ) . // tab in before the edit textarea @@ -73,27 +87,27 @@ class FancyCaptcha extends SimpleCaptcha { $wgCaptchaDirectory, $wgCaptchaDirectoryLevels ); } - + function pickImageDir( $directory, $levels ) { - if( $levels ) { + if ( $levels ) { $dirs = array(); - + // Check which subdirs are actually present... $dir = opendir( $directory ); - while( false !== ($entry = readdir( $dir ) ) ) { - if( ctype_xdigit( $entry ) && strlen( $entry ) == 1 ) { + while ( false !== ( $entry = readdir( $dir ) ) ) { + if ( ctype_xdigit( $entry ) && strlen( $entry ) == 1 ) { $dirs[] = $entry; } } closedir( $dir ); - + $place = mt_rand( 0, count( $dirs ) - 1 ); // In case all dirs are not filled, // cycle through next digits... - for( $j = 0; $j < count( $dirs ); $j++ ) { - $char = $dirs[($place + $j) % count( $dirs )]; + for ( $j = 0; $j < count( $dirs ); $j++ ) { + $char = $dirs[( $place + $j ) % count( $dirs )]; $return = $this->pickImageDir( "$directory/$char", $levels - 1 ); - if( $return ) { + if ( $return ) { return $return; } } @@ -103,9 +117,9 @@ class FancyCaptcha extends SimpleCaptcha { return $this->pickImageFromDir( $directory ); } } - + function pickImageFromDir( $directory ) { - if( !is_dir( $directory ) ) { + if ( !is_dir( $directory ) ) { return false; } $n = mt_rand( 0, $this->countFiles( $directory ) - 1 ); @@ -115,9 +129,9 @@ class FancyCaptcha extends SimpleCaptcha { $entry = readdir( $dir ); $pick = false; - while( false !== $entry ) { + while ( false !== $entry ) { $entry = readdir( $dir ); - if( preg_match( '/^image_([0-9a-f]+)_([0-9a-f]+)\\.png$/', $entry, $matches ) ) { + if ( preg_match( '/^image_([0-9a-f]+)_([0-9a-f]+)\\.png$/', $entry, $matches ) ) { $size = getimagesize( "$directory/$entry" ); $pick = array( 'salt' => $matches[1], @@ -126,7 +140,7 @@ class FancyCaptcha extends SimpleCaptcha { 'height' => $size[1], 'viewed' => false, ); - if( $count++ == $n ) { + if ( $count++ == $n ) { break; } } @@ -142,8 +156,8 @@ class FancyCaptcha extends SimpleCaptcha { function countFiles( $dirname ) { $dir = opendir( $dirname ); $count = 0; - while( false !== ($entry = readdir( $dir ) ) ) { - if( $entry != '.' && $entry != '..' ) { + while ( false !== ( $entry = readdir( $dir ) ) ) { + if ( $entry != '.' && $entry != '..' ) { $count++; } } @@ -157,7 +171,7 @@ class FancyCaptcha extends SimpleCaptcha { $wgOut->disable(); $info = $this->retrieveCaptcha(); - if( $info ) { + if ( $info ) { /* // Be a little less restrictive for now; in at least some circumstances, // Konqueror tries to reload the image even if you haven't navigated @@ -175,7 +189,7 @@ class FancyCaptcha extends SimpleCaptcha { $hash = $info['hash']; $file = $this->imagePath( $salt, $hash ); - if( file_exists( $file ) ) { + if ( file_exists( $file ) ) { global $IP; require_once "$IP/includes/StreamFile.php"; header( "Cache-Control: private, s-maxage=0, max-age=3600" ); @@ -186,13 +200,13 @@ class FancyCaptcha extends SimpleCaptcha { wfHttpError( 500, 'Internal Error', 'Requested bogus captcha image' ); return false; } - + function imagePath( $salt, $hash ) { global $wgCaptchaDirectory, $wgCaptchaDirectoryLevels; $file = $wgCaptchaDirectory; $file .= DIRECTORY_SEPARATOR; - for( $i = 0; $i < $wgCaptchaDirectoryLevels; $i++ ) { - $file .= $hash{$i}; + for ( $i = 0; $i < $wgCaptchaDirectoryLevels; $i++ ) { + $file .= $hash { $i } ; $file .= DIRECTORY_SEPARATOR; } $file .= "image_{$salt}_{$hash}.png"; @@ -213,5 +227,4 @@ class FancyCaptcha extends SimpleCaptcha { # the default for edits return wfEmptyMsg( $name, $text ) ? wfMsg( 'fancycaptcha-edit' ) : $text; } - }