p_kc_session_id . (($use_visitor_ip) ? ($this->p_kc_visitor_ip) :("")) . $this->p_kc_private_key);
}
function __construct($a_private_key='')
{
if ( $a_private_key != '' ) {
$set = explode("0",trim($a_private_key),2);
if (sizeof($set)>1){
$this->p_kc_private_key = trim($set[0]);
$this->p_kc_userID = (int)$set[1];
$this->p_kc_js_code =
"
";
}
}
$this->p_kc_session_id = uniqid() . '-1.0.0.033';
$this->p_kc_visitor_ip = $_SERVER["REMOTE_ADDR"];
}
function http_get($path)
{
$arr = parse_url($path);
$host = $arr['host'];
$page = $arr['path'];
if ( $page=='' ) {
$page='/';
}
if ( isset( $arr['query'] ) ) {
$page.='?'.$arr['query'];
}
$errno = 0;
$errstr = '';
$fp = fsockopen ($host, 80, $errno, $errstr, 30);
if (!$fp){ return ""; }
$request = "GET $page HTTP/1.0\r\n";
$request .= "Host: $host\r\n";
$request .= "Connection: close\r\n";
$request .= "Cache-Control: no-store, no-cache\r\n";
$request .= "Pragma: no-cache\r\n";
$request .= "User-Agent: KeyCAPTCHA\r\n";
$request .= "\r\n";
fwrite ($fp,$request);
$out = '';
while (!feof($fp)) $out .= fgets($fp, 250);
fclose($fp);
$ov = explode("close\r\n\r\n", $out);
return $ov[1];
}
public function check_result($response)
{
$kc_vars = explode("|", $response);
if ( count( $kc_vars ) < 4 )
{
return false;
}
if ($kc_vars[0] == md5($this->c_kc_keyword . $kc_vars[1] . $this->p_kc_private_key . $kc_vars[2]))
{
if (stripos($kc_vars[2], "http://") !== 0)
{
$kc_current_time = time();
$kc_var_time = split('[/ :]', $kc_vars[2]);
$kc_submit_time = gmmktime($kc_var_time[3], $kc_var_time[4], $kc_var_time[5], $kc_var_time[1], $kc_var_time[2], $kc_var_time[0]);
if (($kc_current_time - $kc_submit_time) < 15)
{
return true;
}
}
else
{
if ($this->http_get($kc_vars[2]) == "1")
{
return true;
}
}
}
return false;
}
public function render_js ()
{
if ( isset($_SERVER['HTTPS']) && ( $_SERVER['HTTPS'] == 'on' ) )
{
$this->p_kc_js_code = str_replace ("http://","https://", $this->p_kc_js_code);
}
$this->p_kc_js_code = str_replace ("#KC_SESSION_ID#", $this->p_kc_session_id, $this->p_kc_js_code);
$this->p_kc_js_code = str_replace ("#KC_WSIGN#", $this->get_web_server_sign(1), $this->p_kc_js_code);
$this->p_kc_js_code = str_replace ("#KC_WSIGN2#", $this->get_web_server_sign(), $this->p_kc_js_code);
return $this->p_kc_js_code;
}
}
}
class captchaPlugin
{
/**
* Registry object
*
* @access protected
* @var object
*/
public $registry;
/**
* Database object
*
* @access protected
* @var object
*/
public $DB;
/**
* Settings object
*
* @access protected
* @var object
*/
public $settings;
/**
* Request object
*
* @access protected
* @var object
*/
public $request;
/**
* Language object
*
* @access protected
* @var object
*/
public $lang;
/**
* Member object
*
* @access protected
* @var object
*/
public $member;
/**
* Member data object
*
* @access protected
* @var object
*/
public $memberData;
/**
* Error code from KeyCAPTCHA
*
* @access protected
* @var string
*/
public $error;
/**
* Constructor
*
* @access public
* @param object Registry Object
* @return void
*/
public function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->lang = $this->registry->getClass('class_localization');
$this->member = $this->registry->member();
$this->memberData =& $this->registry->member()->fetchMemberData();
}
/**
* Gets the challenge HTML (javascript and non-javascript version).
* This is called from the browser, and the resulting KeyCAPTCHA HTML widget
* is embedded within the HTML form it was called from.
*
* @access public
* @return string Form HTML to display
*/
public function getTemplate()
{
$private_key = $this->settings['keycaptcha_privatekey'];
if ( ! $private_key )
{
return '';
}
$kc_o = new KeyCAPTCHA_CLASS($private_key );
return $this->registry->output->getTemplate('global_other')->captchaKeycaptcha( ''.$kc_o->render_js() );
}
/**
* Validate the input code
*
* @access public
* @return boolean Validation successful
* @since 1.0
*/
public function validate()
{
$private_key = $this->settings['keycaptcha_privatekey'];
if ( ! $private_key )
{
return '';
}
$capcode = $_REQUEST['capcode'];
$kc_o = new KeyCAPTCHA_CLASS( $private_key );
if (! $kc_o->check_result($capcode) ) {
return false;
}
return true;
}
}