Exemple #1
0
def get_unprepared_installer(config, plugins):
    """
    Get an unprepared interfaces.IInstaller object.

    :param certbot.interfaces.IConfig config: Configuration
    :param certbot._internal.plugins.disco.PluginsRegistry plugins:
        All plugins registered as entry points.

    :returns: Unprepared installer plugin or None
    :rtype: IPlugin or None
    """

    _, req_inst = cli_plugin_requests(config)
    if not req_inst:
        return None
    installers = plugins.filter(lambda p_ep: p_ep.check_name(req_inst))
    installers.init(config)
    installers = installers.verify((interfaces.IInstaller, ))
    if len(installers) > 1:
        raise errors.PluginSelectionError(
            "Found multiple installers with the name %s, Certbot is unable to "
            "determine which one to use. Skipping." % req_inst)
    if installers:
        inst = list(installers.values())[0]
        logger.debug("Selecting plugin: %s", inst)
        return inst.init(config)
    raise errors.PluginSelectionError(
        "Could not select or initialize the requested installer %s." %
        req_inst)
Exemple #2
0
def diagnose_configurator_problem(cfg_type, requested, plugins):
    """
    Raise the most helpful error message about a plugin being unavailable

    :param str cfg_type: either "installer" or "authenticator"
    :param str requested: the plugin that was requested
    :param .PluginsRegistry plugins: available plugins

    :raises error.PluginSelectionError: if there was a problem
    """

    if requested:
        if requested not in plugins:
            msg = "The requested {0} plugin does not appear to be installed".format(
                requested)
        else:
            msg = ("The {0} plugin is not working; there may be problems with "
                   "your existing configuration.\nThe error was: {1!r}".format(
                       requested, plugins[requested].problem))
    elif cfg_type == "installer":
        from certbot.cli import cli_command
        msg = (
            'Certbot doesn\'t know how to automatically configure the web '
            'server on this system. However, it can still get a certificate for '
            'you. Please run "{0} certonly" to do so. You\'ll need to '
            'manually configure your web server to use the resulting '
            'certificate.').format(cli_command)
    else:
        msg = "{0} could not be determined or is not installed".format(
            cfg_type)
    raise errors.PluginSelectionError(msg)
Exemple #3
0
def diagnose_configurator_problem(cfg_type, requested, plugins):
    """
    Raise the most helpful error message about a plugin being unavailable

    :param str cfg_type: either "installer" or "authenticator"
    :param str requested: the plugin that was requested
    :param .PluginsRegistry plugins: available plugins

    :raises error.PluginSelectionError: if there was a problem
    """

    if requested:
        if requested not in plugins:
            msg = "The requested {0} plugin does not appear to be installed".format(
                requested)
        else:
            msg = ("The {0} plugin is not working; there may be problems with "
                   "your existing configuration.\nThe error was: {1!r}".format(
                       requested, plugins[requested].problem))
    elif cfg_type == "installer":
        msg = (
            'No installer plugins seem to be present and working on your system; '
            'fix that or try running certbot with the "certonly" command to obtain'
            ' a certificate you can install manually')
    else:
        msg = "{0} could not be determined or is not installed".format(
            cfg_type)
    raise errors.PluginSelectionError(msg)
Exemple #4
0
def diagnose_configurator_problem(cfg_type, requested, plugins):
    """
    Raise the most helpful error message about a plugin being unavailable

    :param str cfg_type: either "installer" or "authenticator"
    :param str requested: the plugin that was requested
    :param .PluginsRegistry plugins: available plugins

    :raises error.PluginSelectionError: if there was a problem
    """

    if requested:
        if requested not in plugins:
            msg = "The requested {0} plugin does not appear to be installed".format(
                requested)
        else:
            msg = ("The {0} plugin is not working; there may be problems with "
                   "your existing configuration.\nThe error was: {1!r}".format(
                       requested, plugins[requested].problem))
    elif cfg_type == "installer":
        if os.path.exists("/etc/debian_version"):
            # Debian... installers are at least possible
            msg = (
                'No installers seem to be present and working on your system; '
                'fix that or try running certbot with the "certonly" command')
        else:
            # XXX update this logic as we make progress on #788 and nginx support
            msg = (
                'No installers are available on your OS yet; try running '
                '"letsencrypt-auto certonly" to get a cert you can install manually'
            )
    else:
        msg = "{0} could not be determined or is not installed".format(
            cfg_type)
    raise errors.PluginSelectionError(msg)
Exemple #5
0
def set_configurator(previously, now):
    """
    Setting configurators multiple ways is okay, as long as they all agree
    :param str previously: previously identified request for the installer/authenticator
    :param str requested: the request currently being processed
    """
    if not now:
        # we're not actually setting anything
        return previously
    if previously:
        if previously != now:
            msg = "Too many flags setting configurators/installers/authenticators {0} -> {1}"
            raise errors.PluginSelectionError(msg.format(repr(previously), repr(now)))
    return now