Esempio n. 1
0
    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)
Esempio n. 2
0
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']))
Esempio n. 3
0
    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)
Esempio n. 4
0
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']))
Esempio n. 5
0
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
Esempio n. 6
0
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