##// END OF EJS Templates
py3: trivial renaming of unicode to str
py3: trivial renaming of unicode to str

File last commit:

r8081:620c13a3 default
r8081:620c13a3 default
Show More
recaptcha.py
59 lines | 2.1 KiB | text/x-python | PythonLexer
# -*- coding: utf-8 -*-
import json
import urllib.parse
import urllib.request
class RecaptchaResponse(object):
def __init__(self, is_valid, error_code=None):
self.is_valid = is_valid
self.error_code = error_code
def __repr__(self):
return '<RecaptchaResponse:%s>' % (self.is_valid)
def submit(g_recaptcha_response, private_key, remoteip):
"""
Submits a reCAPTCHA request for verification. Returns RecaptchaResponse for the request
g_recaptcha_response -- The value of g_recaptcha_response from the form
private_key -- your reCAPTCHA private key
remoteip -- the user's IP address
"""
if not (g_recaptcha_response and len(g_recaptcha_response)):
return RecaptchaResponse(is_valid=False, error_code='incorrect-captcha-sol')
def encode_if_necessary(s):
if isinstance(s, str):
return s.encode('utf-8')
return s
params = urllib.parse.urlencode({
'secret': encode_if_necessary(private_key),
'remoteip': encode_if_necessary(remoteip),
'response': encode_if_necessary(g_recaptcha_response),
}).encode('ascii')
req = urllib.request.Request(
url="https://www.google.com/recaptcha/api/siteverify",
data=params,
headers={
"Content-type": "application/x-www-form-urlencoded",
"User-agent": "reCAPTCHA Python"
}
)
httpresp = urllib.request.urlopen(req)
return_values = json.loads(httpresp.read())
httpresp.close()
if not (isinstance(return_values, dict)):
return RecaptchaResponse(is_valid=False, error_code='incorrect-captcha-sol')
elif (("success" in return_values) and ((return_values["success"] is True) or (return_values["success"] == "true"))):
return RecaptchaResponse(is_valid=True)
elif (("error-codes" in return_values) and isinstance(return_values["error-codes"], list) and (len(return_values["error-codes"]) > 0)):
return RecaptchaResponse(is_valid=False, error_code=return_values["error-codes"][0])
else:
return RecaptchaResponse(is_valid=False, error_code='incorrect-captcha-sol')