[tor-commits] [oonib/master] Add Handlers and API for policy
art at torproject.org
art at torproject.org
Wed Sep 11 09:13:51 UTC 2013
commit 5a349ee10d01b5cdb7c9eb256b58e78b310559ad
Author: aagbsn <aagbsn at extc.org>
Date: Sun Jul 7 19:47:40 2013 +0200
Add Handlers and API for policy
---
oonib/policy/api.py | 40 ++++++++++++++++++++++++
oonib/policy/handlers.py | 78 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 118 insertions(+)
diff --git a/oonib/policy/api.py b/oonib/policy/api.py
new file mode 100644
index 0000000..577d988
--- /dev/null
+++ b/oonib/policy/api.py
@@ -0,0 +1,40 @@
+"""
+/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.
+
+"""
+import random
+import string
+import json
+import re
+import os
+
+from twisted.internet import reactor, defer
+
+from cyclone import web
+
+from oonib import otime
+from oonib import randomStr
+
+from oonib import config
+from oonib.policy import DeckListHandler, InputListHandler, NetTestListHandler
+
+#XXX: if policy is configured
+policyAPI = [
+ (r"/deck", DeckListHandler),
+ (r"/input", InputListHandler),
+ (r"/deck/([a-z0-9]{40})$", DeckDescHandler),
+ (r"/deck/([a-z0-9]{40})/file$", web.StaticFileHandler, {"path":
+ config.main.deck_dir}),
+ (r"/input/([a-z0-9]{40})/file$", web.StaticFileHandler, {"path":
+ config.main.input_dir}),
+ (r"/input([a-z0-9]{40}$", InputDescHandler),
+ (r"/policy/nettest", NetTestListHandler),
+ (r"/policy/nettest/([a-z0-9]+/py$", web.StaticFileHandler, {"path":
+ config.main.nettest_dir}),
+ (r"/policy/input", InputListHandler
+]
diff --git a/oonib/policy/handlers.py b/oonib/policy/handlers.py
new file mode 100644
index 0000000..567da2c
--- /dev/null
+++ b/oonib/policy/handlers.py
@@ -0,0 +1,78 @@
+from cyclone import web
+from oonib import config
+import json
+import os
+import yaml
+
+class DeckDescHandler(web.RequestHandler):
+ def get(self, deckID):
+ bn = os.path.basename(deckID)
+ try:
+ f = open(os.path.join(config.main.deck_dir, bn))
+ a = {}
+ deckDesc = yaml.safe_load(f)
+ a['id'] = deckID
+ a['name'] = deckDesc['name']
+ a['description'] = deckDesc['description']
+ self.write(json.dumps(a))
+ except IOError:
+ log.err("Deck %s missing" % deckID)
+ except KeyError:
+ log.err("Deck %s missing required keys!" % deckID)
+
+class DeckListHandler(web.RequestHandler):
+ def get(self):
+ if not config.main.deck_dir: return
+ path = os.path.abspath(config.main.deck_dir) + "/*"
+ decknames = map(os.path.basename, glob.iglob(path))
+ deckList = []
+ for deckname in decknames:
+ f = open(os.path.join(config.main.deck_dir, deckname))
+ d = yaml.safe_load(f)
+ deckList.append({'id': deckname,'name': d['name'],
+ 'description': d['description']})
+ f.close()
+ self.write(json.dumps(deckList))
+
+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))
+
+class NetTestListHandler(web.RequestHandler):
+ def get(self):
+ #XXX: returns a list of accepted NetTests
+ pass
+
+class HelperListHandler(web.RequestHandler):
+ def get(self):
+ #XXX: get the list of the running handlers
+ #'id'
+ #'description'
+ #'address'
+ pass
More information about the tor-commits
mailing list