38 define(
"RECAPTCHA_API_SERVER",
"http://www.google.com/recaptcha/api" );
39 define(
"RECAPTCHA_API_SECURE_SERVER",
"https://www.google.com/recaptcha/api" );
40 define(
"RECAPTCHA_VERIFY_SERVER",
"www.google.com" );
50 $req .= $key .
'=' . urlencode( stripslashes(
$value ) ) .
'&';
71 $http_request =
"POST $path HTTP/1.0\r\n";
72 $http_request .=
"Host: $host\r\n";
73 $http_request .=
"Content-Type: application/x-www-form-urlencoded;\r\n";
74 $http_request .=
"Content-Length: " . strlen(
$req ) .
"\r\n";
75 $http_request .=
"User-Agent: reCAPTCHA/PHP\r\n";
76 $http_request .=
"\r\n";
77 $http_request .=
$req;
80 if (
false == ( $fs = @fsockopen( $host, $port, $errno, $errstr, 10 ) ) ) {
81 die (
'Could not open socket' );
84 fwrite( $fs, $http_request );
86 while ( !feof( $fs ) )
108 if ( $pubkey ==
null || $pubkey ==
'' ) {
109 die (
"To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>" );
120 $errorpart =
"&error=" . $error;
122 return '<script type="text/javascript" src="' . $server .
'/challenge?k=' . $pubkey . $errorpart .
'"></script>
125 <iframe src="' . $server .
'/noscript?k=' . $pubkey . $errorpart .
'" height="300" width="500" frameborder="0"></iframe><br/>
126 <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
127 <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
137 class ReCaptchaResponse {
152 function recaptcha_check_answer ( $privkey, $remoteip, $challenge,
$response, $extra_params =
array() )
154 if ( $privkey ==
null || $privkey ==
'' ) {
155 die (
"To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>" );
158 if ( $remoteip ==
null || $remoteip ==
'' ) {
159 die (
"For security reasons, you must pass the remote ip to reCAPTCHA" );
165 if ( $challenge ==
null || strlen( $challenge ) == 0 ||
$response ==
null || strlen(
$response ) == 0 ) {
166 $recaptcha_response =
new ReCaptchaResponse();
167 $recaptcha_response->is_valid =
false;
168 $recaptcha_response->error =
'incorrect-captcha-sol';
169 return $recaptcha_response;
174 'privatekey' => $privkey,
175 'remoteip' => $remoteip,
176 'challenge' => $challenge,
181 $answers = explode (
"\n",
$response [1] );
182 $recaptcha_response =
new ReCaptchaResponse();
184 if ( trim ( $answers [0] ) ==
'true' ) {
185 $recaptcha_response->is_valid =
true;
188 $recaptcha_response->is_valid =
false;
189 $recaptcha_response->error = $answers [1];
191 return $recaptcha_response;
202 function recaptcha_get_signup_url ( $domain =
null, $appname =
null ) {
203 return "https://www.google.com/recaptcha/admin/create?" .
_recaptcha_qsencode (
array (
'domains' => $domain,
'app' => $appname ) );
206 function _recaptcha_aes_pad( $val ) {
208 $numpad = $block_size - ( strlen ( $val ) % $block_size );
209 return str_pad( $val, strlen ( $val ) + $numpad, chr( $numpad ) );
214 function _recaptcha_aes_encrypt( $val, $ky ) {
215 if ( ! function_exists (
"mcrypt_encrypt" ) ) {
216 die (
"To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed." );
218 $mode = MCRYPT_MODE_CBC;
219 $enc = MCRYPT_RIJNDAEL_128;
220 $val = _recaptcha_aes_pad( $val );
221 return mcrypt_encrypt( $enc, $ky, $val, $mode,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" );
225 function _recaptcha_mailhide_urlbase64 ( $x ) {
226 return strtr( base64_encode ( $x ),
'+/',
'-_' );
230 function recaptcha_mailhide_url( $pubkey, $privkey, $email ) {
231 if ( $pubkey ==
'' || $pubkey ==
null || $privkey ==
"" || $privkey ==
null ) {
232 die (
"To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " .
233 "you can do so at <a href='http://www.google.com/recaptcha/mailhide/apikey'>http://www.google.com/recaptcha/mailhide/apikey</a>" );
237 $ky = pack(
'H*', $privkey );
238 $cryptmail = _recaptcha_aes_encrypt ( $email, $ky );
240 return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey .
"&c=" . _recaptcha_mailhide_urlbase64 ( $cryptmail );
248 function _recaptcha_mailhide_email_parts ( $email ) {
249 $arr = preg_split(
"/@/", $email );
251 if ( strlen ( $arr[0] ) <= 4 ) {
252 $arr[0] = substr ( $arr[0], 0, 1 );
253 } elseif ( strlen ( $arr[0] ) <= 6 ) {
254 $arr[0] = substr ( $arr[0], 0, 3 );
256 $arr[0] = substr ( $arr[0], 0, 4 );
267 function recaptcha_mailhide_html( $pubkey, $privkey, $email ) {
268 $emailparts = _recaptcha_mailhide_email_parts ( $email );
269 $url = recaptcha_mailhide_url ( $pubkey, $privkey, $email );
271 return htmlentities( $emailparts[0] ) .
"<a href='" . htmlentities ( $url ) .
272 "' onclick=\"window.open('" . htmlentities ( $url ) .
"', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ( $emailparts [1] );