OLD | NEW |
1 # This file is part of the Adblock Plus web scripts, | 1 # This file is part of the Adblock Plus web scripts, |
2 # Copyright (C) 2006-present eyeo GmbH | 2 # Copyright (C) 2006-present eyeo GmbH |
3 # | 3 # |
4 # Adblock Plus is free software: you can redistribute it and/or modify | 4 # Adblock Plus is free software: you can redistribute it and/or modify |
5 # it under the terms of the GNU General Public License version 3 as | 5 # it under the terms of the GNU General Public License version 3 as |
6 # published by the Free Software Foundation. | 6 # published by the Free Software Foundation. |
7 # | 7 # |
8 # Adblock Plus is distributed in the hope that it will be useful, | 8 # Adblock Plus is distributed in the hope that it will be useful, |
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 template = config.get('submit_email', product + '_verification_email_tem
plate') | 42 template = config.get('submit_email', product + '_verification_email_tem
plate') |
43 except (KeyError, ConfigParser.NoOptionError): | 43 except (KeyError, ConfigParser.NoOptionError): |
44 return send_simple_response(start_response, 400, 'Unknown product') | 44 return send_simple_response(start_response, 400, 'Unknown product') |
45 | 45 |
46 email = data.get('email', '').strip() | 46 email = data.get('email', '').strip() |
47 try: | 47 try: |
48 email = encode_email_address(email) | 48 email = encode_email_address(email) |
49 except ValueError: | 49 except ValueError: |
50 return send_simple_response( | 50 return send_simple_response( |
51 start_response, 400, | 51 start_response, 400, |
52 'Please enter a valid email address.' | 52 'Please enter a valid email address.', |
53 ) | 53 ) |
54 | 54 |
55 params = [('email', email), ('signature', sign(config, email)), ('product',
product)] | 55 params = [('email', email), ('signature', sign(config, email)), ('product',
product)] |
56 lang = data.get('lang') | 56 lang = data.get('lang') |
57 if lang: | 57 if lang: |
58 params.append(('lang', lang)) | 58 params.append(('lang', lang)) |
59 | 59 |
60 sendMail( | 60 sendMail( |
61 template, | 61 template, |
62 { | 62 { |
63 'recipient': email, | 63 'recipient': email, |
64 'verification_url': '%s?%s' % ( | 64 'verification_url': '%s?%s' % ( |
65 urljoin(wsgiref.util.application_uri(environ), VERIFICATION_PATH
), | 65 urljoin(wsgiref.util.application_uri(environ), VERIFICATION_PATH
), |
66 urlencode(params) | 66 urlencode(params), |
67 ) | 67 ), |
68 } | 68 }, |
69 ) | 69 ) |
70 | 70 |
71 return send_simple_response( | 71 return send_simple_response( |
72 start_response, 200, | 72 start_response, 200, |
73 'A confirmation email has been sent. Please check ' | 73 'A confirmation email has been sent. Please check ' |
74 'your email and click the confirmation link.' | 74 'your email and click the confirmation link.', |
75 ) | 75 ) |
76 | 76 |
77 | 77 |
78 @url_handler(VERIFICATION_PATH) | 78 @url_handler(VERIFICATION_PATH) |
79 def verify_email(environ, start_response): | 79 def verify_email(environ, start_response): |
80 config = get_config() | 80 config = get_config() |
81 params = dict(parse_qsl(environ.get('QUERY_STRING', ''))) | 81 params = dict(parse_qsl(environ.get('QUERY_STRING', ''))) |
82 | 82 |
83 try: | 83 try: |
84 filename = config.get('submit_email', params['product'] + '_filename') | 84 filename = config.get('submit_email', params['product'] + '_filename') |
85 except (KeyError, ConfigParser.NoOptionError): | 85 except (KeyError, ConfigParser.NoOptionError): |
86 return send_simple_response(start_response, 400, 'Unknown product') | 86 return send_simple_response(start_response, 400, 'Unknown product') |
87 | 87 |
88 email = params.get('email', '') | 88 email = params.get('email', '') |
89 signature = params.get('signature', '') | 89 signature = params.get('signature', '') |
90 if sign(config, email) != signature: | 90 if sign(config, email) != signature: |
91 return send_simple_response( | 91 return send_simple_response( |
92 start_response, 403, | 92 start_response, 403, |
93 'Invalid signature in verification request.' | 93 'Invalid signature in verification request.', |
94 ) | 94 ) |
95 | 95 |
96 with open(filename, 'ab', 0) as file: | 96 with open(filename, 'ab', 0) as file: |
97 fcntl.lockf(file, fcntl.LOCK_EX) | 97 fcntl.lockf(file, fcntl.LOCK_EX) |
98 try: | 98 try: |
99 print >>file, email | 99 print >>file, email |
100 finally: | 100 finally: |
101 fcntl.lockf(file, fcntl.LOCK_UN) | 101 fcntl.lockf(file, fcntl.LOCK_UN) |
102 | 102 |
103 location = config.get('submit_email', 'successful_verification_redirect_loca
tion') | 103 location = config.get('submit_email', 'successful_verification_redirect_loca
tion') |
104 location = location.format(lang=quote(params.get('lang') or 'en', '')) | 104 location = location.format(lang=quote(params.get('lang') or 'en', '')) |
105 start_response('303 See Other', [('Location', location)]) | 105 start_response('303 See Other', [('Location', location)]) |
106 return [] | 106 return [] |
OLD | NEW |