def handleRequest(environ, start_response): if not environ.get('HTTP_X_ADBLOCK_PLUS'): return showError('Please use Adblock Plus to submit reports', start_response) if environ['REQUEST_METHOD'].upper() != 'POST' or not environ.get( 'CONTENT_TYPE', '').startswith('text/xml'): return showError('Unsupported request method', start_response) params = parse_qs(environ.get('QUERY_STRING', '')) requestVersion = params.get('version', ['0'])[0] if requestVersion != '1': return showError('Unsupported request version', start_response) guid = params.get('guid', [''])[0].lower() if not re.match( r'^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$', guid): return showError('Invalid or missing GUID', start_response) path = os.path.join(get_config().get('reports', 'dataPath'), guid + '.xml') if os.path.exists(path) or os.path.exists(path + '.tmp'): return showError('Duplicate GUID', start_response) try: request_size = int(environ['CONTENT_LENGTH']) except (KeyError, ValueError): return showError('Invalid or missing Content-Length header', start_response, '411 Length Required') dir = os.path.dirname(path) if not os.path.exists(dir): os.makedirs(dir) try: file = open(path + '.tmp', 'wb') data = environ['wsgi.input'].read(request_size) file.write(data) file.close() knownIssues = knownIssuesParser.findMatches( data.splitlines(), params.get('lang', ['en-US'])[0]) os.rename(path + '.tmp', path) except Exception as e: if os.path.isfile(path + '.tmp'): os.remove(path + '.tmp') raise e template = get_template(get_config().get('reports', 'submitResponseTemplate')) start_response('200 OK', [('Content-Type', 'application/xhtml+xml; charset=utf-8')]) return [ template.render({ 'url': get_config().get('reports', 'urlRoot') + guid, 'knownIssues': knownIssues }).encode('utf-8') ]
def processReport(xmlFile): global reportData, tagStack guid = os.path.splitext(os.path.basename(xmlFile))[0] cursor = get_db().cursor() executeQuery(cursor, 'SELECT guid FROM #PFX#reports WHERE guid = %s', guid) report = cursor.fetchone() if report != None: os.remove(xmlFile) return source = open(xmlFile, 'rb') reportData = { 'status': '', 'usefulness': 0, 'warnings': {}, 'requests': [], 'filters': [], 'subscriptions': [], 'extensions': [], 'errors': [], 'time': time() } tagStack = [] parser = ParserCreate() parser.StartElementHandler = processElementStart parser.EndElementHandler = processElementEnd parser.CharacterDataHandler = processText try: parser.ParseFile(source) except ExpatError as error: reportData['warnings'][ '!parsing'] = 'Parsing error in the report: %s at line %i column %i' % ( ErrorString(error.code), error.lineno, error.offset) source.seek(0) reportData['knownIssues'] = knownIssuesParser.findMatches(source, 'en-US') source.close() if 'screenshot' in reportData and not reportData['screenshot'].startswith( 'data:image/'): del reportData['screenshot'] if 'email' in reportData and reportData['email'].find( ' at ') < 0 and reportData['email'].find('@') < 0: del reportData['email'] validateData(reportData) saveReport(guid, reportData, True) os.remove(xmlFile)
def handleRequest(environ, start_response): if not environ.get('HTTP_X_ADBLOCK_PLUS'): return showError('Please use Adblock Plus to submit reports', start_response) if environ['REQUEST_METHOD'].upper() != 'POST' or not environ.get('CONTENT_TYPE', '').startswith('text/xml'): return showError('Unsupported request method', start_response) params = parse_qs(environ.get('QUERY_STRING', '')) requestVersion = params.get('version', ['0'])[0] if requestVersion != '1': return showError('Unsupported request version', start_response) guid = params.get('guid', [''])[0].lower() if not re.match(r'^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$', guid): return showError('Invalid or missing GUID', start_response) path = os.path.join(get_config().get('reports', 'dataPath'), guid + '.xml') if os.path.exists(path) or os.path.exists(path + '.tmp'): return showError('Duplicate GUID', start_response) try: request_size = int(environ['CONTENT_LENGTH']) except (KeyError, ValueError): return showError('Invalid or missing Content-Length header', start_response, '411 Length Required') dir = os.path.dirname(path) if not os.path.exists(dir): os.makedirs(dir) try: file = open(path + '.tmp', 'wb') data = environ['wsgi.input'].read(request_size) file.write(data) file.close() knownIssues = knownIssuesParser.findMatches(data.splitlines(), params.get('lang', ['en-US'])[0]) os.rename(path + '.tmp', path) except Exception as e: if os.path.isfile(path + '.tmp'): os.remove(path + '.tmp') raise e template = get_template(get_config().get('reports', 'submitResponseTemplate')) start_response('200 OK', [('Content-Type', 'application/xhtml+xml; charset=utf-8')]) return [template.render({'url': get_config().get('reports', 'urlRoot') + guid, 'knownIssues': knownIssues}).encode('utf-8')]
def handleRequest(environ, start_response): setupStderr(environ['wsgi.errors']) if not environ.get('HTTP_X_ADBLOCK_PLUS'): return showError('Please use Adblock Plus to submit reports', start_response) if environ['REQUEST_METHOD'].upper() != 'POST' or not environ.get( 'CONTENT_TYPE', '').startswith('text/xml'): return showError('Unsupported request method', start_response) params = parse_qs(environ.get('QUERY_STRING', '')) requestVersion = params.get('version', ['0'])[0] if requestVersion != '1': return showError('Unsupported request version', start_response) guid = params.get('guid', [''])[0].lower() if not re.match( r'^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$', guid): return showError('Invalid or missing GUID', start_response) path = os.path.join(get_config().get('reports', 'dataPath'), guid + '.xml') if os.path.exists(path) or os.path.exists(path + '.tmp'): return showError('Duplicate GUID', start_response) dir = os.path.dirname(path) if not os.path.exists(dir): os.makedirs(dir) try: file = open(path + '.tmp', 'wb') iter = dataIterator(environ['wsgi.input'], file) knownIssues = knownIssuesParser.findMatches( iter, params.get('lang', ['en-US'])[0]) file.close() os.rename(path + '.tmp', path) except Exception, e: if os.path.isfile(path + '.tmp'): os.remove(path + '.tmp') raise e
def processReport(xmlFile): global reportData, tagStack guid = os.path.splitext(os.path.basename(xmlFile))[0] cursor = get_db().cursor() executeQuery(cursor, 'SELECT guid FROM #PFX#reports WHERE guid = %s', guid) report = cursor.fetchone() if report != None: os.remove(xmlFile) return source = open(xmlFile, 'rb') reportData = {'status': '', 'usefulness': 0, 'warnings': {}, 'requests': [], 'filters': [], 'subscriptions': [], 'extensions': [], 'errors': [], 'time': time()} tagStack = [] parser = ParserCreate() parser.StartElementHandler = processElementStart parser.EndElementHandler = processElementEnd parser.CharacterDataHandler = processText try: parser.ParseFile(source) except ExpatError as error: reportData['warnings']['!parsing'] = 'Parsing error in the report: %s at line %i column %i' % (ErrorString(error.code), error.lineno, error.offset) source.seek(0) reportData['knownIssues'] = knownIssuesParser.findMatches(source, 'en-US') source.close() if 'screenshot' in reportData and not reportData['screenshot'].startswith('data:image/'): del reportData['screenshot'] if 'email' in reportData and reportData['email'].find(' at ') < 0 and reportData['email'].find('@') < 0: del reportData['email'] validateData(reportData) saveReport(guid, reportData, True) os.remove(xmlFile)
def handleRequest(environ, start_response): setupStderr(environ['wsgi.errors']) if not environ.get('HTTP_X_ADBLOCK_PLUS'): return showError('Please use Adblock Plus to submit reports', start_response) if environ['REQUEST_METHOD'].upper() != 'POST' or not environ.get('CONTENT_TYPE', '').startswith('text/xml'): return showError('Unsupported request method', start_response) params = parse_qs(environ.get('QUERY_STRING', '')) requestVersion = params.get('version', ['0'])[0] if requestVersion != '1': return showError('Unsupported request version', start_response) guid = params.get('guid', [''])[0].lower() if not re.match(r'^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$', guid): return showError('Invalid or missing GUID', start_response) path = os.path.join(get_config().get('reports', 'dataPath'), guid + '.xml') if os.path.exists(path) or os.path.exists(path + '.tmp'): return showError('Duplicate GUID', start_response) dir = os.path.dirname(path) if not os.path.exists(dir): os.makedirs(dir) try: file = open(path + '.tmp', 'wb') iter = dataIterator(environ['wsgi.input'], file) knownIssues = knownIssuesParser.findMatches(iter, params.get('lang', ['en-US'])[0]) file.close() os.rename(path + '.tmp', path); except Exception, e: if os.path.isfile(path + '.tmp'): os.remove(path + '.tmp') raise e
} tagStack = [] parser = ParserCreate() parser.StartElementHandler = processElementStart parser.EndElementHandler = processElementEnd parser.CharacterDataHandler = processText try: parser.ParseFile(source) except ExpatError, error: reportData['warnings'][ '!parsing'] = 'Parsing error in the report: %s at line %i column %i' % ( ErrorString(error.code), error.lineno, error.offset) source.seek(0) reportData['knownIssues'] = knownIssuesParser.findMatches(source, 'en-US') source.close() if 'screenshot' in reportData and not reportData['screenshot'].startswith( 'data:image/'): del reportData['screenshot'] if 'email' in reportData and reportData['email'].find( ' at ') < 0 and reportData['email'].find('@') < 0: del reportData['email'] validateData(reportData) saveReport(guid, reportData, True) os.remove(xmlFile) def processElementStart(name, attributes):
source = open(xmlFile, 'rb') reportData = {'status': '', 'usefulness': 0, 'warnings': {}, 'requests': [], 'filters': [], 'subscriptions': [], 'extensions': [], 'errors': [], 'time': time()} tagStack = [] parser = ParserCreate() parser.StartElementHandler = processElementStart parser.EndElementHandler = processElementEnd parser.CharacterDataHandler = processText try: parser.ParseFile(source) except ExpatError, error: reportData['warnings']['!parsing'] = 'Parsing error in the report: %s at line %i column %i' % (ErrorString(error.code), error.lineno, error.offset) source.seek(0) reportData['knownIssues'] = knownIssuesParser.findMatches(source, 'en-US') source.close() if 'screenshot' in reportData and not reportData['screenshot'].startswith('data:image/'): del reportData['screenshot'] if 'email' in reportData and reportData['email'].find(' at ') < 0 and reportData['email'].find('@') < 0: del reportData['email'] validateData(reportData) saveReport(guid, reportData, True) os.remove(xmlFile) def processElementStart(name, attributes): global reportData, tagStack if name == 'report':