| 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 | 
|---|