def api_nettest_start(self, request, test_name): try: _ = self.director.netTests[test_name] except KeyError: raise WebUIError(500, 'Could not find the specified test') try: test_options = json.load(request.content) except ValueError: raise WebUIError(500, 'Invalid JSON message recevied') test_options["test_name"] = test_name deck_data = {"tasks": [{"ooni": test_options}]} try: deck = NGDeck() deck.load(deck_data) self.run_deck(deck) except errors.MissingRequiredOption as option_name: raise WebUIError( 400, 'Missing required option: "{}"'.format(option_name)) except usage.UsageError as ue: raise WebUIError(400, 'Error in parsing options') except errors.InsufficientPrivileges: raise WebUIError(400, 'Insufficient privileges') except Exception as exc: log.exception(exc) raise WebUIError(500, 'Failed to start nettest') return self.render_json({"status": "started"}, request)
def generate_deck(options): deck_data = { "name": "Default ooniprobe deck", "description": "Default ooniprobe deck generated on {0}".format( prettyDateNowUTC()), "schedule": "@daily", "tasks": [ { "ooni": { "test_name": "http_invalid_request_line" }, }, { "ooni": { "test_name": "http_header_field_manipulation" }, }, { "ooni": { "test_name": "web_connectivity", "file": "$citizenlab_${probe_cc}_urls" }, }, { "ooni": { "test_name": "web_connectivity", "file": "$citizenlab_global_urls" } } ] } if options["collector"] is not None: deck_data["collector"] = options['collector'] if options["bouncer"] is not None: deck_data["bouncer"] = options['bouncer'] deck = NGDeck(deck_data=deck_data) with open(options['output'], 'w+') as fw: deck.write(fw) print("Deck written to {0}".format(options['output'])) print("Run ooniprobe like so:") print("ooniprobe -i {0}".format(options['output']))
def api_nettest_start(self, request, test_name): try: _ = self.director.netTests[test_name] except KeyError: raise WebUIError(500, 'Could not find the specified test') try: test_options = json.load(request.content) except ValueError: raise WebUIError(500, 'Invalid JSON message recevied') test_options["test_name"] = test_name deck_data = { "tasks": [ {"ooni": test_options} ] } try: deck = NGDeck() deck.load(deck_data) self.run_deck(deck) except errors.MissingRequiredOption as option_name: raise WebUIError( 400, 'Missing required option: "{}"'.format(option_name) ) except usage.UsageError as ue: raise WebUIError( 400, 'Error in parsing options' ) except errors.InsufficientPrivileges: raise WebUIError( 400, 'Insufficient privileges' ) except Exception as exc: log.exception(exc) raise WebUIError( 500, 'Failed to start nettest' ) return self.render_json({"status": "started"}, request)
def generate_deck(options): deck_data = { "name": "Default ooniprobe deck", "description": "Default ooniprobe deck generated on {0}".format(prettyDateNowUTC()), "schedule": "@daily", "tasks": [{ "ooni": { "test_name": "http_invalid_request_line" }, }, { "ooni": { "test_name": "http_header_field_manipulation" }, }, { "ooni": { "test_name": "web_connectivity", "file": "$citizenlab_${probe_cc}_urls" }, }, { "ooni": { "test_name": "web_connectivity", "file": "$citizenlab_global_urls" } }] } if options["collector"] is not None: deck_data["collector"] = options['collector'] if options["bouncer"] is not None: deck_data["bouncer"] = options['bouncer'] deck = NGDeck(deck_data=deck_data) with open(options['output'], 'w+') as fw: deck.write(fw) print("Deck written to {0}".format(options['output'])) print("Run ooniprobe like so:") print("ooniprobe -i {0}".format(options['output']))
def createDeck(global_options, url=None): from ooni.deck import NGDeck from ooni.deck.legacy import subargs_to_options if url: log.msg("Creating deck for: %s" % (url)) test_deck_path = global_options.pop('testdeck', None) test_name = global_options.pop('test_file', None) no_collector = global_options.pop('no-collector', False) try: if test_deck_path is not None: deck = NGDeck( global_options=global_options, no_collector=no_collector ) deck.open(test_deck_path) else: deck = NGDeck( global_options=global_options, no_collector=no_collector, arbitrary_paths=True ) log.debug("No test deck detected") if url is not None: args = ('-u', url) else: args = tuple() if any(global_options['subargs']): args = global_options['subargs'] + args test_options = subargs_to_options(args) test_options['test_name'] = test_name deck.load({ "tasks": [ {"ooni": test_options} ] }) except errors.MissingRequiredOption as option_name: log.err('Missing required option: "%s"' % option_name) incomplete_net_test_loader = option_name.net_test_loader map(log.msg, incomplete_net_test_loader.usageOptions().getUsage().split("\n")) raise SystemExit(2) except errors.NetTestNotFound as path: log.err('Requested NetTest file not found (%s)' % path) raise SystemExit(3) except errors.OONIUsageError as e: log.exception(e) map(log.msg, e.net_test_loader.usageOptions().getUsage().split("\n")) raise SystemExit(4) except errors.HTTPSCollectorUnsupported: log.err("HTTPS collectors require a twisted version of at least 14.0.2.") raise SystemExit(6) except errors.InsecureBackend: log.err("Attempting to report to an insecure collector.") log.err("To enable reporting to insecure collector set the " "advanced->insecure_backend option to true in " "your ooniprobe.conf file.") raise SystemExit(7) except Exception as e: if config.advanced.debug: log.exception(e) log.err(e) raise SystemExit(5) return deck
def createDeck(global_options, url=None): from ooni.deck import NGDeck from ooni.deck.legacy import subargs_to_options if url: log.msg("Creating deck for: %s" % (url)) test_deck_path = global_options.pop('testdeck', None) test_name = global_options.pop('test_file', None) no_collector = global_options.pop('no-collector', False) try: if test_deck_path is not None: deck = NGDeck(global_options=global_options, no_collector=no_collector) deck.open(test_deck_path) else: deck = NGDeck(global_options=global_options, no_collector=no_collector, arbitrary_paths=True) log.debug("No test deck detected") if url is not None: args = ('-u', url) else: args = tuple() if any(global_options['subargs']): args = global_options['subargs'] + args test_options = subargs_to_options(args) test_options['test_name'] = test_name deck.load({"tasks": [{"ooni": test_options}]}) except errors.MissingRequiredOption as option_name: log.err('Missing required option: "%s"' % option_name) incomplete_net_test_loader = option_name.net_test_loader map(log.msg, incomplete_net_test_loader.usageOptions().getUsage().split("\n")) raise SystemExit(2) except errors.NetTestNotFound as path: log.err('Requested NetTest file not found (%s)' % path) raise SystemExit(3) except errors.OONIUsageError as e: log.exception(e) map(log.msg, e.net_test_loader.usageOptions().getUsage().split("\n")) raise SystemExit(4) except errors.HTTPSCollectorUnsupported: log.err( "HTTPS collectors require a twisted version of at least 14.0.2.") raise SystemExit(6) except errors.InsecureBackend: log.err("Attempting to report to an insecure collector.") log.err("To enable reporting to insecure collector set the " "advanced->insecure_backend option to true in " "your ooniprobe.conf file.") raise SystemExit(7) except Exception as e: if config.advanced.debug: log.exception(e) log.err(e) raise SystemExit(5) return deck