mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
copied from recaptcha-client-1.0.5
This commit is contained in:
parent
f7009a0602
commit
be6d143399
99
direct/src/http/recaptcha.py
Executable file
99
direct/src/http/recaptcha.py
Executable file
@ -0,0 +1,99 @@
|
||||
# copied from recaptcha-client-1.0.5
|
||||
# http://pypi.python.org/pypi/recaptcha-client
|
||||
# http://recaptcha.net/resources.html
|
||||
|
||||
import urllib2, urllib
|
||||
|
||||
API_SSL_SERVER="https://api-secure.recaptcha.net"
|
||||
API_SERVER="http://api.recaptcha.net"
|
||||
VERIFY_SERVER="api-verify.recaptcha.net"
|
||||
|
||||
class RecaptchaResponse(object):
|
||||
def __init__(self, is_valid, error_code=None):
|
||||
self.is_valid = is_valid
|
||||
self.error_code = error_code
|
||||
|
||||
def displayhtml (public_key,
|
||||
use_ssl = False,
|
||||
error = None):
|
||||
"""Gets the HTML to display for reCAPTCHA
|
||||
|
||||
public_key -- The public api key
|
||||
use_ssl -- Should the request be sent over ssl?
|
||||
error -- An error message to display (from RecaptchaResponse.error_code)"""
|
||||
|
||||
error_param = ''
|
||||
if error:
|
||||
error_param = '&error=%s' % error
|
||||
|
||||
if use_ssl:
|
||||
server = API_SSL_SERVER
|
||||
else:
|
||||
server = API_SERVER
|
||||
|
||||
# DCR: added comment to force ElementTree to emit </script> tag closer
|
||||
return """<script type="text/javascript" src="%(ApiServer)s/challenge?k=%(PublicKey)s%(ErrorParam)s"><!-- --></script>
|
||||
|
||||
<noscript>
|
||||
<iframe src="%(ApiServer)s/noscript?k=%(PublicKey)s%(ErrorParam)s" height="300" width="500" frameborder="0"></iframe><br />
|
||||
<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
|
||||
<input type='hidden' name='recaptcha_response_field' value='manual_challenge' />
|
||||
</noscript>
|
||||
""" % {
|
||||
'ApiServer' : server,
|
||||
'PublicKey' : public_key,
|
||||
'ErrorParam' : error_param,
|
||||
}
|
||||
|
||||
|
||||
def submit (recaptcha_challenge_field,
|
||||
recaptcha_response_field,
|
||||
private_key,
|
||||
remoteip):
|
||||
"""
|
||||
Submits a reCAPTCHA request for verification. Returns RecaptchaResponse
|
||||
for the request
|
||||
|
||||
recaptcha_challenge_field -- The value of recaptcha_challenge_field from the form
|
||||
recaptcha_response_field -- The value of recaptcha_response_field from the form
|
||||
private_key -- your reCAPTCHA private key
|
||||
remoteip -- the user's ip address
|
||||
"""
|
||||
|
||||
if not (recaptcha_response_field and recaptcha_challenge_field and
|
||||
len (recaptcha_response_field) and len (recaptcha_challenge_field)):
|
||||
return RecaptchaResponse (is_valid = False, error_code = 'incorrect-captcha-sol')
|
||||
|
||||
|
||||
def encode_if_necessary(s):
|
||||
if isinstance(s, unicode):
|
||||
return s.encode('utf-8')
|
||||
return s
|
||||
|
||||
params = urllib.urlencode ({
|
||||
'privatekey': encode_if_necessary(private_key),
|
||||
'remoteip' : encode_if_necessary(remoteip),
|
||||
'challenge': encode_if_necessary(recaptcha_challenge_field),
|
||||
'response' : encode_if_necessary(recaptcha_response_field),
|
||||
})
|
||||
|
||||
request = urllib2.Request (
|
||||
url = "http://%s/verify" % VERIFY_SERVER,
|
||||
data = params,
|
||||
headers = {
|
||||
"Content-type": "application/x-www-form-urlencoded",
|
||||
"User-agent": "reCAPTCHA Python"
|
||||
}
|
||||
)
|
||||
|
||||
httpresp = urllib2.urlopen (request)
|
||||
|
||||
return_values = httpresp.read ().splitlines ();
|
||||
httpresp.close();
|
||||
|
||||
return_code = return_values [0]
|
||||
|
||||
if (return_code == "true"):
|
||||
return RecaptchaResponse (is_valid=True)
|
||||
else:
|
||||
return RecaptchaResponse (is_valid=False, error_code = return_values [1])
|
Loading…
x
Reference in New Issue
Block a user