Пример #1
0
    def test_parse_webroot(self):
        plugins = disco.PluginsRegistry.find_all()
        webroot_args = [
            "--webroot",
            "-w",
            "/var/www/example",
            "-d",
            "example.com,www.example.com",
            "-w",
            "/var/www/superfluous",
            "-d",
            "superfluo.us",
            "-d",
            "www.superfluo.us",
        ]
        namespace = cli.prepare_and_parse_args(plugins, webroot_args)
        self.assertEqual(
            namespace.webroot_map,
            {
                "example.com": "/var/www/example",
                "www.example.com": "/var/www/example",
                "www.superfluo.us": "/var/www/superfluous",
                "superfluo.us": "/var/www/superfluous",
            },
        )

        webroot_args = ["-d", "stray.example.com"] + webroot_args
        self.assertRaises(errors.Error, cli.prepare_and_parse_args, plugins, webroot_args)

        webroot_map_args = ["--webroot-map", '{"eg.com" : "/tmp"}']
        namespace = cli.prepare_and_parse_args(plugins, webroot_map_args)
        self.assertEqual(namespace.webroot_map, {u"eg.com": u"/tmp"})
Пример #2
0
    def test_parse_server(self):
        plugins = disco.PluginsRegistry.find_all()
        short_args = ['--server', 'example.com']
        namespace = cli.prepare_and_parse_args(plugins, short_args)
        self.assertEqual(namespace.server, 'example.com')

        short_args = ['--staging']
        namespace = cli.prepare_and_parse_args(plugins, short_args)
        self.assertEqual(namespace.server, constants.STAGING_URI)

        short_args = ['--staging', '--server', 'example.com']
        self.assertRaises(errors.Error, cli.prepare_and_parse_args, plugins, short_args)
Пример #3
0
    def test_parse_server(self):
        plugins = disco.PluginsRegistry.find_all()
        short_args = ['--server', 'example.com']
        namespace = cli.prepare_and_parse_args(plugins, short_args)
        self.assertEqual(namespace.server, 'example.com')

        short_args = ['--staging']
        namespace = cli.prepare_and_parse_args(plugins, short_args)
        self.assertEqual(namespace.server, constants.STAGING_URI)

        short_args = ['--staging', '--server', 'example.com']
        self.assertRaises(errors.Error, cli.prepare_and_parse_args, plugins, short_args)
Пример #4
0
    def test_parse_domains(self):
        plugins = disco.PluginsRegistry.find_all()

        short_args = ["-d", "example.com"]
        namespace = cli.prepare_and_parse_args(plugins, short_args)
        self.assertEqual(namespace.domains, ["example.com"])

        short_args = ["-d", "example.com,another.net,third.org,example.com"]
        namespace = cli.prepare_and_parse_args(plugins, short_args)
        self.assertEqual(namespace.domains, ["example.com", "another.net", "third.org"])

        long_args = ["--domains", "example.com"]
        namespace = cli.prepare_and_parse_args(plugins, long_args)
        self.assertEqual(namespace.domains, ["example.com"])

        long_args = ["--domains", "example.com,another.net,example.com"]
        namespace = cli.prepare_and_parse_args(plugins, long_args)
        self.assertEqual(namespace.domains, ["example.com", "another.net"])
Пример #5
0
    def test_parse_webroot(self):
        plugins = disco.PluginsRegistry.find_all()
        webroot_args = ['--webroot', '-w', '/var/www/example',
            '-d', 'example.com,www.example.com', '-w', '/var/www/superfluous',
            '-d', 'superfluo.us', '-d', 'www.superfluo.us']
        namespace = cli.prepare_and_parse_args(plugins, webroot_args)
        self.assertEqual(namespace.webroot_map, {
            'example.com': '/var/www/example',
            'www.example.com': '/var/www/example',
            'www.superfluo.us': '/var/www/superfluous',
            'superfluo.us': '/var/www/superfluous'})

        webroot_args = ['-d', 'stray.example.com'] + webroot_args
        self.assertRaises(errors.Error, cli.prepare_and_parse_args, plugins, webroot_args)

        webroot_map_args = ['--webroot-map', '{"eg.com" : "/tmp"}']
        namespace = cli.prepare_and_parse_args(plugins, webroot_map_args)
        self.assertEqual(namespace.webroot_map, {u"eg.com": u"/tmp"})
Пример #6
0
    def test_parse_webroot(self):
        plugins = disco.PluginsRegistry.find_all()
        webroot_args = ['--webroot', '-w', '/var/www/example',
            '-d', 'example.com,www.example.com', '-w', '/var/www/superfluous',
            '-d', 'superfluo.us', '-d', 'www.superfluo.us']
        namespace = cli.prepare_and_parse_args(plugins, webroot_args)
        self.assertEqual(namespace.webroot_map, {
            'example.com': '/var/www/example',
            'www.example.com': '/var/www/example',
            'www.superfluo.us': '/var/www/superfluous',
            'superfluo.us': '/var/www/superfluous'})

        webroot_args = ['-d', 'stray.example.com'] + webroot_args
        self.assertRaises(errors.Error, cli.prepare_and_parse_args, plugins, webroot_args)

        webroot_map_args = ['--webroot-map', '{"eg.com" : "/tmp"}']
        namespace = cli.prepare_and_parse_args(plugins, webroot_map_args)
        self.assertEqual(namespace.webroot_map, {u"eg.com": u"/tmp"})
Пример #7
0
    def test_parse_domains(self):
        plugins = disco.PluginsRegistry.find_all()

        short_args = ['-d', 'example.com']
        namespace = cli.prepare_and_parse_args(plugins, short_args)
        self.assertEqual(namespace.domains, ['example.com'])

        short_args = ['-d', 'example.com,another.net,third.org,example.com']
        namespace = cli.prepare_and_parse_args(plugins, short_args)
        self.assertEqual(namespace.domains,
                         ['example.com', 'another.net', 'third.org'])

        long_args = ['--domains', 'example.com']
        namespace = cli.prepare_and_parse_args(plugins, long_args)
        self.assertEqual(namespace.domains, ['example.com'])

        long_args = ['--domains', 'example.com,another.net,example.com']
        namespace = cli.prepare_and_parse_args(plugins, long_args)
        self.assertEqual(namespace.domains, ['example.com', 'another.net'])
Пример #8
0
    def test_parse_domains(self):
        plugins = disco.PluginsRegistry.find_all()

        short_args = ['-d', 'example.com']
        namespace = cli.prepare_and_parse_args(plugins, short_args)
        self.assertEqual(namespace.domains, ['example.com'])

        short_args = ['-d', 'example.com,another.net,third.org,example.com']
        namespace = cli.prepare_and_parse_args(plugins, short_args)
        self.assertEqual(namespace.domains, ['example.com', 'another.net',
                                             'third.org'])

        long_args = ['--domains', 'example.com']
        namespace = cli.prepare_and_parse_args(plugins, long_args)
        self.assertEqual(namespace.domains, ['example.com'])

        long_args = ['--domains', 'example.com,another.net,example.com']
        namespace = cli.prepare_and_parse_args(plugins, long_args)
        self.assertEqual(namespace.domains, ['example.com', 'another.net'])
Пример #9
0
    def test_parse_webroot(self):
        plugins = disco.PluginsRegistry.find_all()
        webroot_args = ['--webroot', '-w', '/var/www/example',
            '-d', 'example.com,www.example.com', '-w', '/var/www/superfluous',
            '-d', 'superfluo.us', '-d', 'www.superfluo.us.']
        namespace = cli.prepare_and_parse_args(plugins, webroot_args)
        self.assertEqual(namespace.webroot_map, {
            'example.com': '/var/www/example',
            'www.example.com': '/var/www/example',
            'www.superfluo.us': '/var/www/superfluous',
            'superfluo.us': '/var/www/superfluous'})

        webroot_args = ['-d', 'stray.example.com'] + webroot_args
        self.assertRaises(errors.Error, cli.prepare_and_parse_args, plugins, webroot_args)

        simple_map = '{"eg.com" : "/tmp"}'
        expected_map = {"eg.com": "/tmp"}
        self._webroot_map_test(simple_map, None, None, expected_map, ["eg.com"])

        # test merging webroot maps from the cli and a webroot map
        expected_map["eg2.com"] = "/tmp2"
        domains = ["eg.com", "eg2.com"]
        self._webroot_map_test(simple_map, "/tmp2", "eg2.com,eg.com", expected_map, domains)

        # test inclusion of interactively specified domains in the webroot map
        with mock.patch('letsencrypt.cli.display_ops.choose_names') as mock_choose:
            mock_choose.return_value = domains
            expected_map["eg2.com"] = "/tmp"
            self._webroot_map_test(None, "/tmp", None, expected_map, domains)

        extra_args = ['-c', test_util.vector_path('webrootconftest.ini')]
        self._webroot_map_test(None, None, None, expected_map, domains, extra_args)

        webroot_map_args = ['--webroot-map',
                            '{"eg.com.,www.eg.com": "/tmp", "eg.is.": "/tmp2"}']
        namespace = cli.prepare_and_parse_args(plugins, webroot_map_args)
        self.assertEqual(namespace.webroot_map,
                         {"eg.com": "/tmp", "www.eg.com": "/tmp", "eg.is": "/tmp2"})
Пример #10
0
def main(cli_args=sys.argv[1:]):
    """Command line argument parsing and main script execution."""
    sys.excepthook = functools.partial(_handle_exception, config=None)
    plugins = plugins_disco.PluginsRegistry.find_all()

    # note: arg parser internally handles --help (and exits afterwards)
    args = cli.prepare_and_parse_args(plugins, cli_args)
    config = configuration.NamespaceConfig(args)
    zope.component.provideUtility(config)

    # Setup logging ASAP, otherwise "No handlers could be found for
    # logger ..." TODO: this should be done before plugins discovery
    for directory in config.config_dir, config.work_dir:
        le_util.make_or_verify_dir(directory, constants.CONFIG_DIRS_MODE,
                                   os.geteuid(), "--strict-permissions"
                                   in cli_args)
    # TODO: logs might contain sensitive data such as contents of the
    # private key! #525
    le_util.make_or_verify_dir(config.logs_dir, 0o700, os.geteuid(),
                               "--strict-permissions" in cli_args)
    setup_logging(config, _cli_log_handler, logfile='letsencrypt.log')

    logger.debug("letsencrypt version: %s", letsencrypt.__version__)
    # do not log `config`, as it contains sensitive data (e.g. revoke --key)!
    logger.debug("Arguments: %r", cli_args)
    logger.debug("Discovered plugins: %r", plugins)

    sys.excepthook = functools.partial(_handle_exception, config=config)

    # Displayer
    if config.quiet:
        config.noninteractive_mode = True
        displayer = display_util.NoninteractiveDisplay(open(os.devnull, "w"))
    elif config.noninteractive_mode:
        displayer = display_util.NoninteractiveDisplay(sys.stdout)
    elif config.text_mode:
        displayer = display_util.FileDisplay(sys.stdout)
    elif config.verb == "renew":
        config.noninteractive_mode = True
        displayer = display_util.NoninteractiveDisplay(sys.stdout)
    else:
        displayer = display_util.NcursesDisplay()
    zope.component.provideUtility(displayer)

    # Reporter
    report = reporter.Reporter(config)
    zope.component.provideUtility(report)
    atexit.register(report.atexit_print_messages)

    return config.func(config, plugins)
Пример #11
0
def main(cli_args=sys.argv[1:]):
    """Command line argument parsing and main script execution."""
    sys.excepthook = functools.partial(_handle_exception, config=None)
    plugins = plugins_disco.PluginsRegistry.find_all()

    # note: arg parser internally handles --help (and exits afterwards)
    args = cli.prepare_and_parse_args(plugins, cli_args)
    config = configuration.NamespaceConfig(args)
    zope.component.provideUtility(config)

    # Setup logging ASAP, otherwise "No handlers could be found for
    # logger ..." TODO: this should be done before plugins discovery
    for directory in config.config_dir, config.work_dir:
        le_util.make_or_verify_dir(
            directory, constants.CONFIG_DIRS_MODE, os.geteuid(),
            "--strict-permissions" in cli_args)
    # TODO: logs might contain sensitive data such as contents of the
    # private key! #525
    le_util.make_or_verify_dir(
        config.logs_dir, 0o700, os.geteuid(), "--strict-permissions" in cli_args)
    setup_logging(config, _cli_log_handler, logfile='letsencrypt.log')

    logger.debug("letsencrypt version: %s", letsencrypt.__version__)
    # do not log `config`, as it contains sensitive data (e.g. revoke --key)!
    logger.debug("Arguments: %r", cli_args)
    logger.debug("Discovered plugins: %r", plugins)

    sys.excepthook = functools.partial(_handle_exception, config=config)

    # Displayer
    if config.quiet:
        config.noninteractive_mode = True
        displayer = display_util.NoninteractiveDisplay(open(os.devnull, "w"))
    elif config.noninteractive_mode:
        displayer = display_util.NoninteractiveDisplay(sys.stdout)
    elif config.text_mode:
        displayer = display_util.FileDisplay(sys.stdout)
    elif config.verb == "renew":
        config.noninteractive_mode = True
        displayer = display_util.NoninteractiveDisplay(sys.stdout)
    else:
        displayer = display_util.NcursesDisplay()
    zope.component.provideUtility(displayer)

    # Reporter
    report = reporter.Reporter(config)
    zope.component.provideUtility(report)
    atexit.register(report.atexit_print_messages)

    return config.func(config, plugins)
Пример #12
0
 def _webroot_map_test(self, map_arg, path_arg, domains_arg, # pylint: disable=too-many-arguments
                       expected_map, expectect_domains, extra_args=None):
     plugins = disco.PluginsRegistry.find_all()
     webroot_map_args = extra_args if extra_args else []
     if map_arg:
         webroot_map_args.extend(["--webroot-map", map_arg])
     if path_arg:
         webroot_map_args.extend(["-w", path_arg])
     if domains_arg:
         webroot_map_args.extend(["-d", domains_arg])
     namespace = cli.prepare_and_parse_args(plugins, webroot_map_args)
     domains = cli._find_domains(namespace, mock.MagicMock()) # pylint: disable=protected-access
     self.assertEqual(namespace.webroot_map, expected_map)
     self.assertEqual(set(domains), set(expectect_domains))