commit a4f09650c55aec62b0de0e319b3336547b5f2a90 Author: Arturo Filastò art@fuffa.org Date: Fri Aug 16 19:17:14 2013 +0200
Do some refactoring and cleaning up of the various handlers.
@aagbsn you should take a look at this. --- oonib.conf.example | 5 ++++- oonib/bouncer/api.py | 6 ++---- oonib/bouncer/handlers.py | 10 ---------- oonib/deck/handlers.py | 2 ++ oonib/input/api.py | 10 ---------- oonib/input/handlers.py | 35 ----------------------------------- oonib/inputs/api.py | 10 ++++++++++ oonib/inputs/handlers.py | 35 +++++++++++++++++++++++++++++++++++ oonib/policy/api.py | 2 -- oonib/report/api.py | 11 +---------- oonib/runner.py | 22 ++++++++++++++++++---- oonib/testhelpers/dns_helpers.py | 1 - 12 files changed, 72 insertions(+), 77 deletions(-)
diff --git a/oonib.conf.example b/oonib.conf.example index 1b51621..60e177f 100644 --- a/oonib.conf.example +++ b/oonib.conf.example @@ -1,8 +1,11 @@ main: report_dir: Null archive_dir: Null - input_dir: Null + inputs_dir: Null deck_dir: Null + policy_file: Null + bouncer_file: Null + logfile: Null tor_datadir: Null database_uri: 'sqlite://oonib_test_db.db' diff --git a/oonib/bouncer/api.py b/oonib/bouncer/api.py index 21f2be4..42f53e1 100644 --- a/oonib/bouncer/api.py +++ b/oonib/bouncer/api.py @@ -1,8 +1,6 @@ -from oonib.bouncer.handlers import * +from oonib.bouncer import handlers #XXX: if bouncer is configured bouncerAPI = [ #return a collector and helper of the requested type - (r"/bouncer", BouncerQueryHandler), - #XXX: register a collector or helper - (r"/register", CollectorRegisterHandler), + (r"/bouncer", handlers.BouncerQueryHandler), ] diff --git a/oonib/bouncer/handlers.py b/oonib/bouncer/handlers.py index 74d828a..f2249dd 100644 --- a/oonib/bouncer/handlers.py +++ b/oonib/bouncer/handlers.py @@ -7,13 +7,3 @@ class BouncerQueryHandler(web.RequestHandler): pass # request.get? #'collector': {'foo.onion': {'helper-name': 'helper-address'}, 'bar.onion': {'helper-name': 'helper-address'}} - -class CollectorRegisterHandler(self): - def post(self): - #XXX: update the list of collectors to query - pass - - def get(self): - pass - #XXX unused - diff --git a/oonib/deck/handlers.py b/oonib/deck/handlers.py index f37609a..511b6b1 100644 --- a/oonib/deck/handlers.py +++ b/oonib/deck/handlers.py @@ -1,3 +1,5 @@ +from cyclone import web + class DeckDescHandler(web.RequestHandler): def get(self, deckID): bn = os.path.basename(deckID) diff --git a/oonib/input/api.py b/oonib/input/api.py deleted file mode 100644 index 4c397ab..0000000 --- a/oonib/input/api.py +++ /dev/null @@ -1,10 +0,0 @@ -from cyclone import web -from oonib.input import handlers -from oonib import config - -inputAPI = [ - (r"/input", handlers.InputListHandler), - (r"/input/([a-z0-9]{40})", handlers.InputDescHandler), - (r"/input/([a-z0-9]{40})/file$", web.StaticFileHandler, {"path": - config.main.input_dir}), -] diff --git a/oonib/input/handlers.py b/oonib/input/handlers.py deleted file mode 100644 index ed8008e..0000000 --- a/oonib/input/handlers.py +++ /dev/null @@ -1,35 +0,0 @@ -from oonib import config -from cyclone import web -import json -import os -import yaml - -class InputDescHandler(web.RequestHandler): - def get(self, inputID): - #XXX return the input descriptor - # see oonib.md in ooni-spec - bn = os.path.basename(inputID) + ".desc" - try: - f = open(os.path.join(config.main.input_dir, bn)) - a = {} - inputDesc = yaml.safe_load(f) - a['id'] = inputID - a['name'] = inputDesc['name'] - a['description'] = inputDesc['description'] - self.write(json.dumps(a)) - except Exception: - log.err("No Input Descriptor found for id %s" % inputID) - -class InputListHandler(web.RequestHandler): - def get(self): - if not config.main.input_dir: return - path = os.path.abspath(config.main.input_dir) + "/*" - inputnames = map(os.path.basename, glob.iglob(path)) - inputList = [] - for inputname in inputnames: - f = open(os.path.join(config.main.input_dir, deckname)) - d = yaml.safe_load(f) - inputList.append({'id': inputname,'name': d['name'], - 'description': d['description']}) - f.close() - self.write(json.dumps(inputList)) diff --git a/oonib/inputs/api.py b/oonib/inputs/api.py new file mode 100644 index 0000000..53342ae --- /dev/null +++ b/oonib/inputs/api.py @@ -0,0 +1,10 @@ +from cyclone import web +from oonib.input import handlers +from oonib import config + +inputsAPI = [ + (r"/inputs", handlers.InputsListHandler), + (r"/inputs/([a-z0-9]{40})", handlers.InputsDescHandler), + (r"/inputs/([a-z0-9]{40})/file$", web.StaticFileHandler, {"path": + config.main.inputs_dir}), +] diff --git a/oonib/inputs/handlers.py b/oonib/inputs/handlers.py new file mode 100644 index 0000000..722a757 --- /dev/null +++ b/oonib/inputs/handlers.py @@ -0,0 +1,35 @@ +from oonib import config +from cyclone import web +import json +import os +import yaml + +class InputsDescHandler(web.RequestHandler): + def get(self, inputID): + #XXX return the input descriptor + # see oonib.md in ooni-spec + bn = os.path.basename(inputID) + ".desc" + try: + f = open(os.path.join(config.main.input_dir, bn)) + a = {} + inputDesc = yaml.safe_load(f) + a['id'] = inputID + a['name'] = inputDesc['name'] + a['description'] = inputDesc['description'] + self.write(json.dumps(a)) + except Exception: + log.err("No Input Descriptor found for id %s" % inputID) + +class InputsListHandler(web.RequestHandler): + def get(self): + if not config.main.input_dir: return + path = os.path.abspath(config.main.input_dir) + "/*" + inputnames = map(os.path.basename, glob.iglob(path)) + inputList = [] + for inputname in inputnames: + f = open(os.path.join(config.main.input_dir, deckname)) + d = yaml.safe_load(f) + inputList.append({'id': inputname, 'name': d['name'], + 'description': d['description']}) + f.close() + self.write(json.dumps(inputList)) diff --git a/oonib/policy/api.py b/oonib/policy/api.py index 0f6f023..4cacea2 100644 --- a/oonib/policy/api.py +++ b/oonib/policy/api.py @@ -1,6 +1,4 @@ -from cyclone import web from oonib.policy import handlers -from oonib import config
#XXX: if policy is configured policyAPI = [ diff --git a/oonib/report/api.py b/oonib/report/api.py index c707291..e8a4c0c 100644 --- a/oonib/report/api.py +++ b/oonib/report/api.py @@ -1,16 +1,7 @@ -""" -/report - -/pcap - -This is the async pcap reporting system. It requires the client to have created -a report already, but can work independently from test progress. - -""" from oonib.report import handlers
reportAPI = [ (r"/report/([a-zA-Z0-9_-]+)/close", handlers.CloseReportHandlerFile), (r"/report", handlers.NewReportHandlerFile), - (r"/pcap", file_collector.PCAPReportHandler), + (r"/pcap", handlers.PCAPReportHandler), ] diff --git a/oonib/runner.py b/oonib/runner.py index cfc0563..8e89f32 100644 --- a/oonib/runner.py +++ b/oonib/runner.py @@ -22,8 +22,9 @@ from txtorcon import launch_tor
from oonib.report.api import reportAPI from oonib.deck.api import deckAPI -from oonib.input.api import inputAPI +from oonib.inputs.api import inputsAPI from oonib.policy.api import policyAPI +from oonib.bouncer.api import bouncerAPI
from oonib import oonibackend from oonib import config @@ -60,9 +61,22 @@ def setupCollector(tor_process_protocol): #XXX: also set up a separate keyed hidden service for collectors to push their status to, if the bouncer is enabled hs_endpoint = TCPHiddenServiceEndpoint(reactor, torconfig, public_port, data_dir=datadir) - EnabledAPIs = [] - EnabledAPIs.append(reportAPI) - hidden_service = hs_endpoint.listen(EnabledAPIs) + enabledAPIs = [] + enabledAPIs += reportAPI + + if config.inputs_dir: + enabledAPIs += inputsAPI + + if config.deck_dir: + enabledAPIs += deckAPI + + if config.policy_file: + enabledAPIs += policyAPI + + if config.bouncer_file: + enabledAPIs += bouncerAPI + + hidden_service = hs_endpoint.listen(enabledAPIs) hidden_service.addCallback(setup_complete) hidden_service.addErrback(txSetupFailed)
diff --git a/oonib/testhelpers/dns_helpers.py b/oonib/testhelpers/dns_helpers.py index cb4ff9f..dc9c772 100644 --- a/oonib/testhelpers/dns_helpers.py +++ b/oonib/testhelpers/dns_helpers.py @@ -12,5 +12,4 @@ class DNSTestHelper(server.DNSServerFactory): caches = caches, clients = [resolver], verbose = verbose) def handleQuery(self, message, protocol, address): - print message, protocol, address server.DNSServerFactory.handleQuery(self, message, protocol, address)