--- authimage.old/pluginauthimage.class.php 2006-07-05 10:19:57.000000000 +0800+++ authimage/pluginauthimage.class.php 2006-10-16 14:20:28.744067612 +0800@@ -8,7 +8,10 @@ define( "AUTHIMAGE_FILE", "/plugins/authimage/authimage.php" ); define( "AUTHIMAGE_BACKGROUND_FOLDER", PLOG_CLASS_PATH."plugins/authimage/backgrounds/" );- +// twu2 20061016 begin+ define( "AUTHIMAGE_FONT_FOLDER", PLOG_CLASS_PATH."plugins/authimage/fonts/" );+// twu2 20061016 end+ /** * Plugin that offers comment authentication image for current blog * Original Author: Gudlyf http://www.gudlyf.com/index.php?p=376@@ -93,8 +96,9 @@ function show() { $authImageUrl = $this->generateImageUrl();+ //return '<img src="'.$authImageUrl.'" style="vertical-align:middle;" width="70px" height="20px" alt="authimage" />'; if ( $authImageUrl )- return '<img src="'.$authImageUrl.'" style="vertical-align:middle;" width="70px" height="20px" alt="authimage" />'; + return '<img src="'.$authImageUrl.'" style="vertical-align:middle;" alt="authimage" />'; else return 'You don\'t have GD support compiled in, we cannot create an authimage. Please activate GD Support.'; }@@ -103,6 +107,16 @@ // Delete those cached authimage files that never used $this->deleteExpiredAuthImage($this->expiredTime); +// twu2 20061016 begin+ $code = $this->generateCode();+ $encrypt = $this->encrypt($code, $this->key);+ if ( function_exists ( 'ImageGIF' ) ) + $image_format = 'gif';+ else+ $image_format = 'png';+ $tempFile = $this->cacheFolder."/".$encrypt.".".$image_format;+ $this->captcha_createimage($code, $image_format, $tempFile);+/* old method for image $code = $this->generateCode(); $encrypt = $this->encrypt($code, $this->key); $background = AUTHIMAGE_BACKGROUND_FOLDER.$this->default;@@ -125,6 +139,8 @@ } else { ImageGIF($image, $tempFile); }+*/+// twu2 20061016 end $temp = fopen($tempFile,"rb"); $buffer = fread($temp,filesize($tempFile)); fclose($temp);@@ -137,7 +153,10 @@ // Now chmod it so it can be deleted later by the user chmod($tempFile, 0666); - header("Content-type: image/gif");+// twu2 20061016 begin+ //header("Content-type: image/gif");+ header("Content-type: image/".$image_format);+// twu2 20061016 end echo $buffer; } @@ -150,7 +169,14 @@ function generateCode() { $code = "";- for($i=0; $i < $this->length; $i++) $code .= rand(0,9);+// twu2 20061016 begin+ //for($i=0; $i < $this->length; $i++) $code .= rand(0,9);+ //$hash = "0123456789";+ //$hash = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";+ $hash = "0123456789ABCDEFGHKMNPQRWXYZ";+ $len = strlen($hash) - 1;+ for($i=0; $i < $this->length; $i++) $code .= $hash[rand(0,$len)];+// twu2 20061016 end return $code; } @@ -168,6 +194,135 @@ closedir($handle); } } ++// twu2 20061016 begin+ function captcha_createimage($code, $image_format, $tempFile)+ {+ $breedte = rand(256, 384);+ $hoogte = rand(64, 96);+ $img = imagecreatetruecolor($breedte,$hoogte);+ $achtergrond = imagecolorallocate($img, $this->captcha_color("bg"), $this->captcha_color("bg"), $this->captcha_color("bg")); ++ imagefilledrectangle($img, 0, 0, $breedte-1, $hoogte-1, $achtergrond); + $hash = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";+ $hash_len = strlen($hash);+ for($g = 0;$g < 30; $g++)+ {+ $t = $hash[rand(0, $hash_len)];+ + $ypos = rand(0,$hoogte);+ $xpos = rand(0,$breedte);+ + $kleur = imagecolorallocate($img, $this->captcha_color("bgtekst"), $this->captcha_color("bgtekst"), $this->captcha_color("bgtekst"));++ if (!($g % 2))+ {+ $scribx = rand(0,($breedte*2));+ $scriby = rand(0,($hoogte*2)); + + $wibblex = rand(0,($breedte*2));+ $wibbley = rand(0,($hoogte*2));+ + imageline($img, rand(0, $scribx-$xpos), rand(0, $scriby+$ypos), rand(0, $wibblex), rand(0, $wibbley), $kleur+$g);+ imageellipse($img, rand(0, $scribx+$xpos), rand(0, $scriby-$ypos), rand(0, $scriby), rand(0, $scribx), $kleur-$g); + }+ + imagettftext($img, $this->captcha_size(), $this->captcha_move(), $xpos, $ypos, $kleur, $this->captcha_font(), $t);+ } + $stukje = $breedte / (strlen($code) + 3);++ for($j = 0;$j < strlen($code); $j++)+ {+ $tek = $code[$j];+ $ypos = rand(32,$hoogte-8);+ $xpos = $stukje * ($j+2);+ + $kleur2 = imagecolorallocate($img, $this->captcha_color("tekst"), $this->captcha_color("tekst"), $this->captcha_color("tekst"));+ + imagettftext($img, $this->captcha_size(), $this->captcha_move(), $xpos, $ypos, $kleur2, $this->captcha_font() , $tek);+ }+ + if ($image_format == 'gif')+ imagegif($img, $tempFile);+ else+ imagepng($img, $tempFile);+ imagedestroy($img); + }++ /**+ * Some functions :)+ * Also orginally written by mastercode.nl+ **/+ /**+ * Function to create a random color+ * @auteur mastercode.nl+ * @param $type string Mode for the color+ * @return int+ **/+ function captcha_color($type)+ {+ switch($type)+ {+ case "bg": + $kleur = rand(224,255); + break;+ case "tekst": + $kleur = rand(0,127); + break;+ case "bgtekst": + $kleur = rand(200,224); + break;+ default: + $kleur = rand(0,255); + break;+ }+ return $kleur;+ }+ /**+ * Function to ranom the size+ * @auteur mastercode.nl+ * @return int+ **/+ function captcha_size()+ {+ $grootte = rand(24,32);+ return $grootte;+ }+ /**+ * Function to random the posistion+ * @auteur mastercode.nl+ * @return int+ **/+ function captcha_move()+ {+ $draai = rand(-25,25);+ return $draai;+ }+ /**+ * Function to return a ttf file from fonts map+ * @auteur mastercode.nl+ * @return string+ **/+ function captcha_font()+ {+ $f = @opendir(AUTHIMAGE_FONT_FOLDER);+ $ar = array();+ while(($file = @readdir($f)) !== false)+ {+ if(!in_array($file,array('.','..')) && eregi('.ttf',$file))+ {+ $ar[] = $file;+ }+ }+ if(count($ar))+ {+ shuffle($ar);+ $i = rand(0,(count($ar) - 1));+ return AUTHIMAGE_FONT_FOLDER . $ar[$i];+ }+ } +// twu2 20061016 end+ } ?>
<?php include_once( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" ); include_once( PLOG_CLASS_PATH."class/plugin/pluginmanager.class.php" ); include_once( PLOG_CLASS_PATH."class/dao/model.class.php" ); include_once( PLOG_CLASS_PATH."class/net/rawrequestgenerator.class.php" ); include_once( PLOG_CLASS_PATH."class/misc/glob.class.php" ); include_once( PLOG_CLASS_PATH."plugins/authimage/class/security/authimagefilter.class.php" ); define( "AUTHIMAGE_FILE", "/plugins/authimage/authimage.php" ); define( "AUTHIMAGE_BACKGROUND_FOLDER", PLOG_CLASS_PATH."plugins/authimage/backgrounds/" ); // twu2 20061016 begin define( "AUTHIMAGE_FONT_FOLDER", PLOG_CLASS_PATH."plugins/authimage/fonts/" ); // twu2 20061016 end /** * Plugin that offers comment authentication image for current blog * Original Author: Gudlyf http://www.gudlyf.com/index.php?p=376 * Modified by: Mark Wu */ class PluginAuthImage extends PluginBase { var $pluginEnabled; var $default; var $cacheFolder; function PluginAuthImage() { $this->PluginBase(); $this->id = "authimage"; $this->author = "Mark Wu"; $this->desc = 'This plugin offers extra comment authentication for pLog. The idea is inspired by <a href="http://www.gudlyf.com/index.php?p=376">WordPress AuthImage Plugin</a> written by Gudlyf.'; $this->locales = Array( "en_UK" , "zh_TW" , "zh_CN", "es_ES" ); $this->init(); } function init() { // register the filter $this->registerFilter( "AuthImageFilter" ); $this->registerAdminAction( "authimage", "PluginAuthImageConfigAction" ); $this->registerAdminAction( "updateAuthImageConfig", "PluginAuthImageUpdateConfigAction" ); $this->registerBlogAction( "AuthImageShow", "PluginAuthImageShowAction" ); $menu =& Menu::getMenu(); if( !$menu->entryExists( "/menu/controlCenter/manageAntiSpamPlugins" )) $this->addMenuEntry( "/menu/controlCenter", "manageAntiSpamPlugins", "", "", true, false ); $this->addMenuEntry( "/menu/controlCenter/manageAntiSpamPlugins", "AuthImage", "?op=authimage", "" ); } function register() { $config =& Config::getConfig(); $this->cacheFolder = $config->getValue('temp_folder'); $this->cacheFolder = $this->cacheFolder.'/authimage/'.$this->blogInfo->getId(); if( !File::exists( $this->cacheFolder )) { File::createDir( $this->cacheFolder ); } $blogSettings = $this->blogInfo->getSettings(); $this->pluginEnabled = $blogSettings->getValue( "plugin_authimage_enabled" ); $this->length = $blogSettings->getValue( "plugin_authimage_length" ); $this->key = $blogSettings->getValue( "plugin_authimage_key" ); $this->default = $blogSettings->getValue( "plugin_authimage_default" ); } function isEnabled() { return $this->pluginEnabled; } function pluginTemplatePage( $template ) { $rg = new RawRequestGenerator($this->blogInfo); $rg->addParameter( "op", "AuthImageShow" ); $rg->addParameter( "blogId", $this->blogInfo->getId()); $templatePage = $rg->getIndexUrl().$rg->getRequest(); return $templatePage; } function show() { $authImageUrl = $this->generateImageUrl(); $authImage = $this->pluginTemplatePage( "authimage" ); if ( $authImageUrl ) return '<img src="'.$authImageUrl.'" style="vertical-align:middle;" alt="authimage" />';else return ' you did not have gd support'; } function showImage() { // twu2 20061016 begin $code = $this->generateCode(); $encrypt = $this->encrypt($code, $this->key); if ( function_exists ( 'ImageGIF' ) ) $image_format = 'gif'; else $image_format = 'png'; $tempFile = $this->cacheFolder."/".$encrypt.".".$image_format; $this->captcha_createimage($code, $image_format, $tempFile); /* $code = $this->generateCode(); $encrypt = $this->encrypt($code, $this->key); $background = AUTHIMAGE_BACKGROUND_FOLDER.$this->default; $tempFile = $this->cacheFolder."/".$encrypt.".gif"; if(function_exists ( 'imagecreatefromgif' )){ $image = @imagecreatefromgif($background) or die("Cannot Initialize new GD image stream"); } else if(function_exists ( 'imagecreatefrompng' )){ $image = @imagecreatefrompng($background) or die("Cannot Initialize new GD image stream"); } else { die("Server doesn't support GIF or PNG creation. Sorry."); } $textColor = imageColorAllocate($image, 0x00, 0x00, 0x00); ImageString($image, 5, 7, 2, $code, $textColor); if ( !function_exists ( 'ImageGIF' ) ) { ImagePNG($image, $tempFile); } else { ImageGIF($image, $tempFile); } */ $temp = fopen($tempFile,"rb"); $buffer = fread($temp,filesize($tempFile)); fclose($temp); // Now zero-length the file. No need for its content anymore. $temp = fopen($tempFile,"w"); fwrite($temp, NULL); fclose($temp); // Now chmod it so it can be deleted later by the user chmod($tempFile, 0666); // twu2 20061016 begin //header("Content-type: image/gif"); header("Content-type: image/".$image_format); // twu2 20061016 end echo $buffer; } // encrypt string function encrypt($string, $key) { $plainText = $string.$key; $encodeText = md5($plainText); return $encodeText; } function generateCode() { $code = ""; // twu2 20061016 begin //for($i=0; $i < $this->length; $i++) $code .= rand(0,9); //$hash = "0123456789"; //$hash = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $hash = "03456789ABCDEFGHKMNPQRWXYZ"; $len = strlen($hash) - 1; for($i=0; $i < $this->length; $i++) $code .= $hash[rand(0,$len)]; // twu2 20061016 end return $code; } function deleteExpiredAuthImage( $expiretime ) { $path = PLOG_CLASS_PATH . $this->cacheFolder; if ( is_dir($path) ) { $handle=opendir($path); while (false!==($file = readdir($handle))) { if ($file != "." && $file != ".." && $file != "index.htm") { $diff = time() - filectime("$path/$file"); if ($diff > $expiretime) unlink("$path/$file"); } } closedir($handle); } } // twu2 20061016 begin function captcha_createimage($code, $image_format, $tempFile) { $breedte = rand(256, 384); $hoogte = rand(64, 96); $img = imagecreatetruecolor($breedte,$hoogte); $achtergrond = imagecolorallocate($img, $this->captcha_color("bg"), $this->captcha_color("bg"), $this->captcha_color("bg")); imagefilledrectangle($img, 0, 0, $breedte-1, $hoogte-1, $achtergrond); $hash = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; $hash_len = strlen($hash); for($g = 0;$g < 30; $g++) { $t = $hash[rand(0, $hash_len)]; $ypos = rand(0,$hoogte); $xpos = rand(0,$breedte); $kleur = imagecolorallocate($img, $this->captcha_color("bgtekst"), $this->captcha_color("bgtekst"), $this->captcha_color("bgtekst")); if (!($g % 2)) { $scribx = rand(0,($breedte*2)); $scriby = rand(0,($hoogte*2)); $wibblex = rand(0,($breedte*2)); $wibbley = rand(0,($hoogte*2)); imageline($img, rand(0, $scribx-$xpos), rand(0, $scriby+$ypos), rand(0, $wibblex), rand(0, $wibbley), $kleur+$g); imageellipse($img, rand(0, $scribx+$xpos), rand(0, $scriby-$ypos), rand(0, $scriby), rand(0, $scribx), $kleur-$g); } imagettftext($img, $this->captcha_size(), $this->captcha_move(), $xpos, $ypos, $kleur, $this->captcha_font(), $t); } $stukje = $breedte / (strlen($code) + 3); for($j = 0;$j < strlen($code); $j++) { $tek = $code[$j]; $ypos = rand(32,$hoogte-8); $xpos = $stukje * ($j+2); $kleur2 = imagecolorallocate($img, $this->captcha_color("tekst"), $this->captcha_color("tekst"), $this->captcha_color("tekst")); imagettftext($img, $this->captcha_size(), $this->captcha_move(), $xpos, $ypos, $kleur2, $this->captcha_font() , $tek); } if ($image_format == 'gif') imagegif($img, $tempFile); else imagepng($img, $tempFile); imagedestroy($img); } /** * Some functions :) * Also orginally written by mastercode.nl **/ /** * Function to create a random color * @auteur mastercode.nl * @param $type string Mode for the color * @return int **/ function captcha_color($type) { switch($type) { case "bg": $kleur = rand(224,255); break; case "tekst": $kleur = rand(0,127); break; case "bgtekst": $kleur = rand(200,224); break; default: $kleur = rand(0,255); break; } return $kleur; } /** * Function to ranom the size * @auteur mastercode.nl * @return int **/ function captcha_size() { $grootte = rand(24,32); return $grootte; } /** * Function to random the posistion * @auteur mastercode.nl * @return int **/ function captcha_move() { $draai = rand(-25,25); return $draai; } function generateImageUrl() { $rg = new RawRequestGenerator($this->blogInfo); $rg->addParameter( "op", "AuthImageShow" ); $rg->addParameter( "blogId", $this->blogInfo->getId()); $imageUrl = $rg->getIndexUrl().$rg->getRequest(); if ( !function_exists ('gd_info') ) { // We don't have gd support compiled in, lets // inform the user about it return false; } return $imageUrl; } /** * Function to return a ttf file from fonts map * @auteur mastercode.nl * @return string **/ function captcha_font() { $f = @opendir(AUTHIMAGE_FONT_FOLDER); $ar = array(); while(($file = @readdir($f)) !== false) { if(!in_array($file,array('.','..')) && eregi('.ttf',$file)) { $ar[] = $file; } } if(count($ar)) { shuffle($ar); $i = rand(0,(count($ar) - 1)); return AUTHIMAGE_FONT_FOLDER . $ar[$i]; } } // twu2 20061016 end } ?>