[oonib/master] Perform some changes to the API and fix some bugs.

commit 8c17eb22d34ccefca1679e2942c8ec150509e6be Author: Arturo Filastò <art@fuffa.org> Date: Fri Aug 23 16:46:53 2013 +0200 Perform some changes to the API and fix some bugs. --- oonib/bouncer/handlers.py | 33 +++++++++++++++++++++++++-------- oonib/errors.py | 3 ++- oonib/input/handlers.py | 1 + oonib/report/handlers.py | 5 +++-- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/oonib/bouncer/handlers.py b/oonib/bouncer/handlers.py index 44f1c63..e669e8e 100644 --- a/oonib/bouncer/handlers.py +++ b/oonib/bouncer/handlers.py @@ -1,6 +1,7 @@ import json import random import yaml +from oonib import errors as e from oonib.handlers import OONIBHandler from oonib import config @@ -51,13 +52,18 @@ class Bouncer(object): requested_helpers = ['a', 'b', 'c'] will return: { - 'httpo://thirteenchars1.onion': { - 'a': '127.0.0.1', - 'b': 'http://127.0.0.1', - 'c': '127.0.0.1:590', - } + 'a': '127.0.0.1', + 'b': 'http://127.0.0.1', + 'c': '127.0.0.1:590', + 'collector': 'httpo://thirteenchars1.onion' } + or + + {} + + if no valid helper was found + """ result = {} for helper_name in requested_helpers: @@ -65,7 +71,19 @@ class Bouncer(object): if collector not in result.keys(): result[collector] = {} result[collector][helper_name] = helper_address - return result + + helper_list = [] + for collector, helpers in result.items(): + if len(helpers) == len(requested_helpers): + valid_helpers = helpers + valid_helpers['collector'] = collector + helper_list.append(valid_helpers) + else: + continue + if len(helper_list) == 0: + return {} + else: + return random.choice(helper_list) class BouncerQueryHandler(OONIBHandler): def initialize(self): @@ -95,6 +113,5 @@ class BouncerQueryHandler(OONIBHandler): except KeyError: raise e.TestHelpersKeyMissing - response = {} - response['collector'] = self.bouncer.filterHelperAddresses(requested_helpers) + response = self.bouncer.filterHelperAddresses(requested_helpers) self.write(response) diff --git a/oonib/errors.py b/oonib/errors.py index 1dc8539..12295aa 100644 --- a/oonib/errors.py +++ b/oonib/errors.py @@ -1,7 +1,8 @@ from cyclone.web import HTTPError class OONIBError(HTTPError): - pass + def __init__(self): + pass class InvalidRequest(OONIBError): pass diff --git a/oonib/input/handlers.py b/oonib/input/handlers.py index bba0af9..d467854 100644 --- a/oonib/input/handlers.py +++ b/oonib/input/handlers.py @@ -23,6 +23,7 @@ class InputDescHandler(OONIBHandler): self.write({'error': 'missing-input'}) except Exception, e: + log.exception(e) log.err("Invalid Input Descriptor found for id %s" % inputID) self.set_status(500) self.write({'error': 'invalid-input-descriptor'}) diff --git a/oonib/report/handlers.py b/oonib/report/handlers.py index 2441ddf..32f653d 100644 --- a/oonib/report/handlers.py +++ b/oonib/report/handlers.py @@ -132,7 +132,8 @@ class NewReportHandlerFile(OONIBHandler): def checkPolicy(self): policy = Policy() - policy.validateInputHash(self.inputHash) + for input_hash in self.inputHashes: + policy.validateInputHash(input_hash) policy.validateNettest(self.testName) def post(self): @@ -194,7 +195,7 @@ class NewReportHandlerFile(OONIBHandler): if config.main.policy_file: try: - self.inputHash = report_data['input_hash'] + self.inputHashes = report_data['input_hashes'] except KeyError: raise e.InputHashNotProvided self.checkPolicy()
participants (1)
-
art@torproject.org