38define(
"RECAPTCHA_API_SERVER",
"http://www.google.com/recaptcha/api" );
39define(
"RECAPTCHA_API_SECURE_SERVER",
"https://www.google.com/recaptcha/api" );
40define(
"RECAPTCHA_VERIFY_SERVER",
"www.google.com" );
49 foreach ( $data as $key =>
$value )
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"/>
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 ) {
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] );
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;
203 return "https://www.google.com/recaptcha/admin/create?" .
_recaptcha_qsencode (
array (
'domains' => $domain,
'app' => $appname ) );
208 $numpad = $block_size - ( strlen ( $val ) % $block_size );
209 return str_pad( $val, strlen ( $val ) + $numpad, chr( $numpad ) );
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;
221 return mcrypt_encrypt( $enc, $ky, $val, $mode,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" );
226 return strtr( base64_encode ( $x ),
'+/',
'-_' );
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 );
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 );
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] );
A ReCaptchaResponse is returned from recaptcha_check_answer()
this hook is for auditing only $req
this hook is for auditing only $response
The wiki should then use memcached to cache various data To use multiple just add more items to the array To increase the weight of a make its entry a array("192.168.0.1:11211", 2))
const RECAPTCHA_VERIFY_SERVER
const RECAPTCHA_API_SECURE_SERVER
_recaptcha_mailhide_urlbase64( $x)
recaptcha_get_signup_url( $domain=null, $appname=null)
gets a URL where the user can sign up for reCAPTCHA.
_recaptcha_aes_pad( $val)
recaptcha_mailhide_html( $pubkey, $privkey, $email)
Gets html to display an email address given a public an private key.
const RECAPTCHA_API_SERVER
This is a PHP library that handles calling reCAPTCHA.
_recaptcha_mailhide_email_parts( $email)
_recaptcha_http_post( $host, $path, $data, $port=80)
Submits an HTTP POST to a reCAPTCHA server.
recaptcha_mailhide_url( $pubkey, $privkey, $email)
_recaptcha_qsencode( $data)
Encodes the given data into a query string format.
recaptcha_get_html( $pubkey, $error=null, $use_ssl=false)
Gets the challenge HTML (javascript and non-javascript version).
_recaptcha_aes_encrypt( $val, $ky)
recaptcha_check_answer( $privkey, $remoteip, $challenge, $response, $extra_params=array())
Calls an HTTP POST function to verify if the user's guess was correct.