Left: | ||
Right: |
OLD | NEW |
---|---|
(Empty) | |
1 # coding: utf-8 | |
2 | |
3 # This Source Code is subject to the terms of the Mozilla Public License | |
4 # version 2.0 (the "License"). You can obtain a copy of the License at | |
5 # http://mozilla.org/MPL/2.0/. | |
6 | |
7 import re, os, sys | |
8 from urlparse import parse_qs | |
9 from tempfile import mkstemp | |
10 from sitescripts.utils import get_config, setupStderr | |
11 from sitescripts.web import url_handler | |
12 | |
13 @url_handler('/submitCrash') | |
14 def handleRequest(environ, start_response): | |
15 setupStderr(environ['wsgi.errors']) | |
16 | |
17 if not environ.get('HTTP_X_ADBLOCK_PLUS'): | |
18 return showError('Please use Adblock Plus to submit crashes', start_response ) | |
19 | |
20 if environ['REQUEST_METHOD'].upper() != 'POST' or not environ.get('CONTENT_TYP E', '').startswith('text/xml'): | |
21 return showError('Unsupported request method', start_response) | |
22 | |
23 params = parse_qs(environ.get('QUERY_STRING', '')) | |
24 | |
25 requestVersion = params.get('version', ['0'])[0] | |
26 if requestVersion != '1': | |
27 return showError('Unsupported request version', start_response) | |
28 | |
29 try: | |
30 request_body_size = int(environ.get('CONTENT_LENGTH', 0)) | |
31 except (ValueError): | |
32 return showError('No content', start_response) | |
33 | |
34 dir = get_config().get('crashes', 'dataPath') | |
35 if not os.path.exists(dir): | |
36 os.makedirs(dir) | |
37 | |
38 filename = None | |
39 try: | |
40 fd, filename = mkstemp('.xml.tmp', 'crash_', dir) | |
41 file = os.fdopen(fd, 'w') | |
Wladimir Palant
2012/09/17 15:15:16
'wb' please, we don't want the data to be changed.
Andrey Novikov
2012/09/17 15:33:24
Done.
| |
42 file.write(environ['wsgi.input'].read(request_body_size)) | |
43 file.close() | |
44 os.rename(filename, filename[:-4]); | |
Wladimir Palant
2012/09/17 15:15:16
Please use os.path.splitext(), this will make the
Andrey Novikov
2012/09/17 15:33:24
Done.
| |
45 except Exception, e: | |
46 if filename != None and os.path.isfile(filename): | |
47 os.remove(filename) | |
48 raise e | |
49 | |
50 start_response('200 Ok', [('Content-Type', 'text/plain; charset=utf-8')]) | |
51 return ['saved'.encode('utf-8')] | |
52 | |
53 def showError(message, start_response): | |
54 start_response('400 Processing Error', [('Content-Type', 'text/plain; charset= utf-8')]) | |
55 return [message.encode('utf-8')] | |
OLD | NEW |