]> git.openstreetmap.org Git - osqa.git/blob - forum_modules/recaptcha/lib/captcha.py
don't focus recaptcha field
[osqa.git] / forum_modules / recaptcha / lib / captcha.py
1 # -*- coding: utf-8 -*-
2
3 import urllib2, urllib
4
5 API_SSL_SERVER="https://www.google.com/recaptcha/api"
6 API_SERVER="http://www.google.com/recaptcha/api"
7 VERIFY_SERVER="www.google.com"
8
9 class RecaptchaResponse(object):
10     def __init__(self, is_valid, error_code=None):
11         self.is_valid = is_valid
12         self.error_code = error_code
13
14 def displayhtml (public_key):
15
16     return """
17     <div id="recaptcha_field"></div>
18     <script type="text/javascript" src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>
19
20     <script type="text/javascript">
21          $(function(){
22              Recaptcha.create("%(PublicKey)s", 'recaptcha_field', {
23              theme: "red"});
24          });
25     </script>
26
27 """ % {
28         'PublicKey' : public_key,
29         }
30
31
32 def submit (recaptcha_challenge_field,
33             recaptcha_response_field,
34             private_key,
35             remoteip):
36
37     if not (recaptcha_response_field and recaptcha_challenge_field and
38             len (recaptcha_response_field) and len (recaptcha_challenge_field)):
39         return RecaptchaResponse (is_valid = False, error_code = 'incorrect-captcha-sol')
40
41
42     def encode_if_necessary(s):
43         if isinstance(s, unicode):
44             return s.encode('utf-8')
45         return s
46
47     params = urllib.urlencode ({
48         'privatekey': encode_if_necessary(private_key),
49         'remoteip' :  encode_if_necessary(remoteip),
50         'challenge':  encode_if_necessary(recaptcha_challenge_field),
51         'response' :  encode_if_necessary(recaptcha_response_field),
52         })
53
54     request = urllib2.Request (
55         url = "http://%s/recaptcha/api/verify" % VERIFY_SERVER,
56         data = params,
57         headers = {
58             "Content-type": "application/x-www-form-urlencoded",
59             "User-agent": "reCAPTCHA Python"
60         }
61     )
62
63     httpresp = urllib2.urlopen(request)
64
65     return_values = httpresp.read().splitlines()
66     httpresp.close()
67
68     return_code = return_values[0]
69
70     if return_code == "true":
71         return RecaptchaResponse(is_valid = True)
72     else:
73         return RecaptchaResponse(is_valid = False, error_code = return_values[1])