The following issues were found

certbot/tests/auth_handler_test.py
53 issues
Unable to import 'acme'
Error

Line: 11 Column: 1

              except ImportError:  # pragma: no cover
    from unittest import mock

from acme import challenges
from acme import client as acme_client
from acme import errors as acme_errors
from acme import messages
from certbot import achallenges
from certbot import errors

            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 12 Column: 1

                  from unittest import mock

from acme import challenges
from acme import client as acme_client
from acme import errors as acme_errors
from acme import messages
from certbot import achallenges
from certbot import errors
from certbot import util

            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 13 Column: 1

              
from acme import challenges
from acme import client as acme_client
from acme import errors as acme_errors
from acme import messages
from certbot import achallenges
from certbot import errors
from certbot import util
from certbot._internal.display import obj as display_obj

            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 14 Column: 1

              from acme import challenges
from acme import client as acme_client
from acme import errors as acme_errors
from acme import messages
from certbot import achallenges
from certbot import errors
from certbot import util
from certbot._internal.display import obj as display_obj
from certbot.plugins import common as plugin_common

            

Reported by Pylint.

Unable to import 'certbot'
Error

Line: 15 Column: 1

              from acme import client as acme_client
from acme import errors as acme_errors
from acme import messages
from certbot import achallenges
from certbot import errors
from certbot import util
from certbot._internal.display import obj as display_obj
from certbot.plugins import common as plugin_common
from certbot.tests import acme_util

            

Reported by Pylint.

Unable to import 'certbot'
Error

Line: 16 Column: 1

              from acme import errors as acme_errors
from acme import messages
from certbot import achallenges
from certbot import errors
from certbot import util
from certbot._internal.display import obj as display_obj
from certbot.plugins import common as plugin_common
from certbot.tests import acme_util
from certbot.tests import util as test_util

            

Reported by Pylint.

Unable to import 'certbot'
Error

Line: 17 Column: 1

              from acme import messages
from certbot import achallenges
from certbot import errors
from certbot import util
from certbot._internal.display import obj as display_obj
from certbot.plugins import common as plugin_common
from certbot.tests import acme_util
from certbot.tests import util as test_util


            

Reported by Pylint.

Unable to import 'certbot._internal.display'
Error

Line: 18 Column: 1

              from certbot import achallenges
from certbot import errors
from certbot import util
from certbot._internal.display import obj as display_obj
from certbot.plugins import common as plugin_common
from certbot.tests import acme_util
from certbot.tests import util as test_util



            

Reported by Pylint.

Unable to import 'certbot.plugins'
Error

Line: 19 Column: 1

              from certbot import errors
from certbot import util
from certbot._internal.display import obj as display_obj
from certbot.plugins import common as plugin_common
from certbot.tests import acme_util
from certbot.tests import util as test_util


class ChallengeFactoryTest(unittest.TestCase):

            

Reported by Pylint.

Unable to import 'certbot.tests'
Error

Line: 20 Column: 1

              from certbot import util
from certbot._internal.display import obj as display_obj
from certbot.plugins import common as plugin_common
from certbot.tests import acme_util
from certbot.tests import util as test_util


class ChallengeFactoryTest(unittest.TestCase):
    # pylint: disable=protected-access

            

Reported by Pylint.

certbot/tests/cli_test.py
52 issues
Unable to import 'acme'
Error

Line: 9 Column: 1

              import tempfile
import unittest

from acme import challenges
from certbot import errors
from certbot._internal import cli
from certbot._internal import constants
from certbot._internal.plugins import disco
from certbot.compat import filesystem

            

Reported by Pylint.

Unable to import 'certbot'
Error

Line: 10 Column: 1

              import unittest

from acme import challenges
from certbot import errors
from certbot._internal import cli
from certbot._internal import constants
from certbot._internal.plugins import disco
from certbot.compat import filesystem
from certbot.compat import os

            

Reported by Pylint.

Unable to import 'certbot._internal'
Error

Line: 11 Column: 1

              
from acme import challenges
from certbot import errors
from certbot._internal import cli
from certbot._internal import constants
from certbot._internal.plugins import disco
from certbot.compat import filesystem
from certbot.compat import os
import certbot.tests.util as test_util

            

Reported by Pylint.

Unable to import 'certbot._internal'
Error

Line: 12 Column: 1

              from acme import challenges
from certbot import errors
from certbot._internal import cli
from certbot._internal import constants
from certbot._internal.plugins import disco
from certbot.compat import filesystem
from certbot.compat import os
import certbot.tests.util as test_util
from certbot.tests.util import TempDirTestCase

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins'
Error

Line: 13 Column: 1

              from certbot import errors
from certbot._internal import cli
from certbot._internal import constants
from certbot._internal.plugins import disco
from certbot.compat import filesystem
from certbot.compat import os
import certbot.tests.util as test_util
from certbot.tests.util import TempDirTestCase


            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 14 Column: 1

              from certbot._internal import cli
from certbot._internal import constants
from certbot._internal.plugins import disco
from certbot.compat import filesystem
from certbot.compat import os
import certbot.tests.util as test_util
from certbot.tests.util import TempDirTestCase

try:

            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 15 Column: 1

              from certbot._internal import constants
from certbot._internal.plugins import disco
from certbot.compat import filesystem
from certbot.compat import os
import certbot.tests.util as test_util
from certbot.tests.util import TempDirTestCase

try:
    import mock

            

Reported by Pylint.

Unable to import 'certbot.tests.util'
Error

Line: 16 Column: 1

              from certbot._internal.plugins import disco
from certbot.compat import filesystem
from certbot.compat import os
import certbot.tests.util as test_util
from certbot.tests.util import TempDirTestCase

try:
    import mock
except ImportError: # pragma: no cover

            

Reported by Pylint.

Unable to import 'certbot.tests.util'
Error

Line: 17 Column: 1

              from certbot.compat import filesystem
from certbot.compat import os
import certbot.tests.util as test_util
from certbot.tests.util import TempDirTestCase

try:
    import mock
except ImportError: # pragma: no cover
    from unittest import mock

            

Reported by Pylint.

Too few public methods (1/2)
Error

Line: 28 Column: 1

              PLUGINS = disco.PluginsRegistry.find_all()


class TestReadFile(TempDirTestCase):
    """Test cli.read_file"""
    def test_read_file(self):
        curr_dir = os.getcwd()
        try:
            # On Windows current directory may be on a different drive than self.tempdir.

            

Reported by Pylint.

certbot-apache/tests/augeasnode_test.py
48 issues
Unable to import 'certbot'
Error

Line: 12 Column: 1

              import os
import util

from certbot import errors

from certbot_apache._internal import assertions
from certbot_apache._internal import augeasparser



            

Reported by Pylint.

Unable to import 'certbot_apache._internal'
Error

Line: 14 Column: 1

              
from certbot import errors

from certbot_apache._internal import assertions
from certbot_apache._internal import augeasparser


def _get_augeasnode_mock(filepath):
    """ Helper function for mocking out DualNode instance with an AugeasNode """

            

Reported by Pylint.

Unable to import 'certbot_apache._internal'
Error

Line: 15 Column: 1

              from certbot import errors

from certbot_apache._internal import assertions
from certbot_apache._internal import augeasparser


def _get_augeasnode_mock(filepath):
    """ Helper function for mocking out DualNode instance with an AugeasNode """
    def augeasnode_mock(metadata):

            

Reported by Pylint.

Unable to import 'certbot_apache._internal.augeasparser'
Error

Line: 55 Column: 9

                      self.assertEqual(files, ["first", "second"])

    def test_get_block_node_name(self):
        from certbot_apache._internal.augeasparser import AugeasBlockNode
        block = AugeasBlockNode(
            name=assertions.PASS,
            ancestor=None,
            filepath=assertions.PASS,
            metadata={"augeasparser": mock.Mock(), "augeaspath": "/files/anything"}

            

Reported by Pylint.

Unable to import 'certbot_apache._internal.augeasparser'
Error

Line: 124 Column: 9

                      self.assertTrue("going_to_set_this" in names)

    def test_set_parameters_atinit(self):
        from certbot_apache._internal.augeasparser import AugeasDirectiveNode
        servernames = self.config.parser_root.find_directives("servername")
        setparam = "certbot_apache._internal.augeasparser.AugeasDirectiveNode.set_parameters"
        with mock.patch(setparam) as mock_set:
            AugeasDirectiveNode(
                name=servernames[0].name,

            

Reported by Pylint.

Unable to import 'certbot_apache._internal.augeasparser'
Error

Line: 263 Column: 9

                      self.assertTrue(vh.metadata["augeaspath"].endswith("VirtualHost[2]"))

    def test_node_init_error_bad_augeaspath(self):
        from certbot_apache._internal.augeasparser import AugeasBlockNode
        parameters = {
            "name": assertions.PASS,
            "ancestor": None,
            "filepath": assertions.PASS,
            "metadata": {

            

Reported by Pylint.

Unable to import 'certbot_apache._internal.augeasparser'
Error

Line: 280 Column: 9

                      )

    def test_node_init_error_missing_augeaspath(self):
        from certbot_apache._internal.augeasparser import AugeasBlockNode
        parameters = {
            "name": assertions.PASS,
            "ancestor": None,
            "filepath": assertions.PASS,
            "metadata": {

            

Reported by Pylint.

third party import "from certbot import errors" should be placed before "import util"
Error

Line: 12 Column: 1

              import os
import util

from certbot import errors

from certbot_apache._internal import assertions
from certbot_apache._internal import augeasparser



            

Reported by Pylint.

third party import "from certbot_apache._internal import assertions" should be placed before "import util"
Error

Line: 14 Column: 1

              
from certbot import errors

from certbot_apache._internal import assertions
from certbot_apache._internal import augeasparser


def _get_augeasnode_mock(filepath):
    """ Helper function for mocking out DualNode instance with an AugeasNode """

            

Reported by Pylint.

third party import "from certbot_apache._internal import augeasparser" should be placed before "import util"
Error

Line: 15 Column: 1

              from certbot import errors

from certbot_apache._internal import assertions
from certbot_apache._internal import augeasparser


def _get_augeasnode_mock(filepath):
    """ Helper function for mocking out DualNode instance with an AugeasNode """
    def augeasnode_mock(metadata):

            

Reported by Pylint.

certbot-apache/tests/parser_test.py
48 issues
Unable to import 'certbot'
Error

Line: 10 Column: 1

              except ImportError: # pragma: no cover
    from unittest import mock # type: ignore

from certbot import errors
from certbot.compat import os
import util


class BasicParserTest(util.ParserTest):

            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 11 Column: 1

                  from unittest import mock # type: ignore

from certbot import errors
from certbot.compat import os
import util


class BasicParserTest(util.ParserTest):
    """Apache Parser Test."""

            

Reported by Pylint.

Unable to import 'certbot_apache._internal.parser'
Error

Line: 123 Column: 9

                      Path must be valid before attempting to add to augeas

        """
        from certbot_apache._internal.parser import get_aug_path
        # This makes sure that find_dir will work
        self.parser.modules["mod_ssl.c"] = "/fake/path"

        self.parser.add_dir_to_ifmodssl(
            get_aug_path(self.parser.loc["default"]),

            

Reported by Pylint.

Unable to import 'certbot_apache._internal.parser'
Error

Line: 137 Column: 9

                      self.assertTrue("IfModule" in matches[0])

    def test_add_dir_to_ifmodssl_multiple(self):
        from certbot_apache._internal.parser import get_aug_path
        # This makes sure that find_dir will work
        self.parser.modules["mod_ssl.c"] = "/fake/path"

        self.parser.add_dir_to_ifmodssl(
            get_aug_path(self.parser.loc["default"]),

            

Reported by Pylint.

Unable to import 'certbot_apache._internal.parser'
Error

Line: 151 Column: 9

                      self.assertTrue("IfModule" in matches[0])

    def test_get_aug_path(self):
        from certbot_apache._internal.parser import get_aug_path
        self.assertEqual("/files/etc/apache", get_aug_path("/etc/apache"))

    def test_set_locations(self):
        with mock.patch("certbot_apache._internal.parser.os.path") as mock_path:


            

Reported by Pylint.

Unable to import 'certbot_apache._internal.parser'
Error

Line: 327 Column: 9

                          self.parser.update_runtime_variables)

    def test_add_comment(self):
        from certbot_apache._internal.parser import get_aug_path
        self.parser.add_comment(get_aug_path(self.parser.loc["name"]), "123456")
        comm = self.parser.find_comments("123456")
        self.assertEqual(len(comm), 1)
        self.assertTrue(self.parser.loc["name"] in comm[0])


            

Reported by Pylint.

Unable to import 'certbot_apache._internal.parser'
Error

Line: 345 Column: 9

              
    @mock.patch("certbot_apache._internal.parser.init_augeas")
    def test_prepare_no_augeas(self, mock_init_augeas):
        from certbot_apache._internal.parser import ApacheParser
        mock_init_augeas.side_effect = errors.NoInstallationError
        self.config.config_test = mock.Mock()
        self.assertRaises(
            errors.NoInstallationError, ApacheParser,
            os.path.relpath(self.config_path), "/dummy/vhostpath",

            

Reported by Pylint.

Unable to import 'certbot_apache._internal.parser'
Error

Line: 354 Column: 9

                          version=(2, 4, 22), configurator=self.config)

    def test_init_old_aug(self):
        from certbot_apache._internal.parser import ApacheParser
        with mock.patch("certbot_apache._internal.parser.ApacheParser.check_aug_version") as mock_c:
            mock_c.return_value = False
            self.assertRaises(
                errors.NotSupportedError,
                ApacheParser, os.path.relpath(self.config_path),

            

Reported by Pylint.

Unable to import 'certbot_apache._internal.parser'
Error

Line: 364 Column: 9

              
    @mock.patch("certbot_apache._internal.apache_util._get_runtime_cfg")
    def test_unparseable(self, mock_cfg):
        from certbot_apache._internal.parser import ApacheParser
        mock_cfg.return_value = ('Define: TEST')
        self.assertRaises(
            errors.PluginError,
            ApacheParser, os.path.relpath(self.config_path),
            "/dummy/vhostpath", version=(2, 2, 22), configurator=self.config)

            

Reported by Pylint.

Unable to import 'certbot_apache._internal.parser'
Error

Line: 372 Column: 9

                          "/dummy/vhostpath", version=(2, 2, 22), configurator=self.config)

    def test_root_normalized(self):
        from certbot_apache._internal.parser import ApacheParser

        with mock.patch("certbot_apache._internal.parser.ApacheParser."
                        "update_runtime_variables"):
            path = os.path.join(
                self.temp_dir,

            

Reported by Pylint.

acme/tests/standalone_test.py
48 issues
Requests call with verify=False disabling SSL certificate checks, security issue.
Security criptography

Line: 60
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b501_request_with_no_cert_validation.html

              
    def test_index(self):
        response = requests.get(
            'http://localhost:{0}'.format(self.port), verify=False)
        self.assertEqual(
            response.text, 'ACME client standalone challenge solver')
        self.assertTrue(response.ok)

    def test_404(self):

            

Reported by Bandit.

Requests call with verify=False disabling SSL certificate checks, security issue.
Security criptography

Line: 67
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b501_request_with_no_cert_validation.html

              
    def test_404(self):
        response = requests.get(
            'http://localhost:{0}/foo'.format(self.port), verify=False)
        self.assertEqual(response.status_code, http_client.NOT_FOUND)

    def _test_http01(self, add):
        chall = challenges.HTTP01(token=(b'x' * 16))
        response, validation = chall.response_and_validation(self.account_key)

            

Reported by Bandit.

Requests call with verify=False disabling SSL certificate checks, security issue.
Security criptography

Line: 241
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b501_request_with_no_cert_validation.html

              
    def test_index(self):
        response = requests.get(
            'http://localhost:{0}'.format(self.port), verify=False)
        self.assertEqual(
            response.text, 'ACME client standalone challenge solver')
        self.assertTrue(response.ok)

    def test_404(self):

            

Reported by Bandit.

Requests call with verify=False disabling SSL certificate checks, security issue.
Security criptography

Line: 248
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b501_request_with_no_cert_validation.html

              
    def test_404(self):
        response = requests.get(
            'http://localhost:{0}/foo'.format(self.port), verify=False)
        self.assertEqual(response.status_code, http_client.NOT_FOUND)

    def _test_http01(self, add):
        chall = challenges.HTTP01(token=(b'x' * 16))
        response, validation = chall.response_and_validation(self.account_key)

            

Reported by Bandit.

Unable to import 'josepy'
Error

Line: 10 Column: 1

              from typing import Set
from unittest import mock

import josepy as jose
import requests

from acme import challenges
from acme import crypto_util
from acme import errors

            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 13 Column: 1

              import josepy as jose
import requests

from acme import challenges
from acme import crypto_util
from acme import errors

import test_util


            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 14 Column: 1

              import requests

from acme import challenges
from acme import crypto_util
from acme import errors

import test_util



            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 15 Column: 1

              
from acme import challenges
from acme import crypto_util
from acme import errors

import test_util


class TLSServerTest(unittest.TestCase):

            

Reported by Pylint.

Unable to import 'acme.standalone'
Error

Line: 25 Column: 9

              

    def test_bind(self):  # pylint: disable=no-self-use
        from acme.standalone import TLSServer
        server = TLSServer(
            ('', 0), socketserver.BaseRequestHandler, bind_and_activate=True)
        server.server_close()

    def test_ipv6(self):

            

Reported by Pylint.

Unable to import 'acme.standalone'
Error

Line: 32 Column: 13

              
    def test_ipv6(self):
        if socket.has_ipv6:
            from acme.standalone import TLSServer
            server = TLSServer(
                ('', 0), socketserver.BaseRequestHandler, bind_and_activate=True, ipv6=True)
            server.server_close()



            

Reported by Pylint.

certbot/tests/plugins/disco_test.py
47 issues
Unable to import 'certbot'
Error

Line: 10 Column: 1

              import pkg_resources
import zope.interface

from certbot import errors
from certbot import interfaces
from certbot._internal.plugins import null
from certbot._internal.plugins import standalone
from certbot._internal.plugins import webroot


            

Reported by Pylint.

Unable to import 'certbot'
Error

Line: 11 Column: 1

              import zope.interface

from certbot import errors
from certbot import interfaces
from certbot._internal.plugins import null
from certbot._internal.plugins import standalone
from certbot._internal.plugins import webroot

try:

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins'
Error

Line: 12 Column: 1

              
from certbot import errors
from certbot import interfaces
from certbot._internal.plugins import null
from certbot._internal.plugins import standalone
from certbot._internal.plugins import webroot

try:
    import mock

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins'
Error

Line: 13 Column: 1

              from certbot import errors
from certbot import interfaces
from certbot._internal.plugins import null
from certbot._internal.plugins import standalone
from certbot._internal.plugins import webroot

try:
    import mock
except ImportError:  # pragma: no cover

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins'
Error

Line: 14 Column: 1

              from certbot import interfaces
from certbot._internal.plugins import null
from certbot._internal.plugins import standalone
from certbot._internal.plugins import webroot

try:
    import mock
except ImportError:  # pragma: no cover
    from unittest import mock

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.disco'
Error

Line: 47 Column: 9

                      self.ep3 = pkg_resources.EntryPoint(
            "ep3", "a.ep3", dist=mock.MagicMock(key="p3"))

        from certbot._internal.plugins.disco import PluginEntryPoint
        self.plugin_ep = PluginEntryPoint(EP_SA)

    def test_entry_point_to_plugin_name_not_prefixed(self):
        from certbot._internal.plugins.disco import PluginEntryPoint


            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.disco'
Error

Line: 51 Column: 9

                      self.plugin_ep = PluginEntryPoint(EP_SA)

    def test_entry_point_to_plugin_name_not_prefixed(self):
        from certbot._internal.plugins.disco import PluginEntryPoint

        names = {
            self.ep1: "ep1",
            self.ep1prim: "ep1",
            self.ep2: "ep2",

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.disco'
Error

Line: 66 Column: 9

                              name, PluginEntryPoint.entry_point_to_plugin_name(entry_point, with_prefix=False))

    def test_entry_point_to_plugin_name_prefixed(self):
        from certbot._internal.plugins.disco import PluginEntryPoint

        names = {
            self.ep1: "p1:ep1",
            self.ep1prim: "p2:ep1",
            self.ep2: "p2:ep2",

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.disco'
Error

Line: 206 Column: 9

              
    @classmethod
    def _create_new_registry(cls, plugins):
        from certbot._internal.plugins.disco import PluginsRegistry
        return PluginsRegistry(plugins)

    def setUp(self):
        self.plugin_ep = mock.MagicMock()
        self.plugin_ep.name = "mock"

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.disco'
Error

Line: 219 Column: 9

                          "ep1", "p1.ep1", dist=mock.MagicMock(key="p1"))

    def test_find_all(self):
        from certbot._internal.plugins.disco import PluginsRegistry
        with mock.patch("certbot._internal.plugins.disco.pkg_resources") as mock_pkg:
            mock_pkg.iter_entry_points.side_effect = [
                iter([EP_SA]), iter([EP_WR, self.ep1])
            ]
            with mock.patch.object(pkg_resources.EntryPoint, 'load') as mock_load:

            

Reported by Pylint.

certbot-ci/certbot_integration_tests/certbot_tests/test_main.py
45 issues
Unable to import 'pytest'
Error

Line: 15 Column: 1

              from cryptography.hazmat.primitives.asymmetric.ec import SECP384R1
from cryptography.hazmat.primitives.asymmetric.ec import SECP521R1
from cryptography.x509 import NameOID
import pytest

from certbot_integration_tests.certbot_tests import context as certbot_context
from certbot_integration_tests.certbot_tests.assertions import assert_cert_count_for_lineage
from certbot_integration_tests.certbot_tests.assertions import assert_elliptic_key
from certbot_integration_tests.certbot_tests.assertions import assert_equals_group_owner

            

Reported by Pylint.

Consider possible security implications associated with subprocess module.
Security blacklist

Line: 8
Suggestion: https://bandit.readthedocs.io/en/latest/blacklists/blacklist_imports.html#b404-import-subprocess

              from os.path import join
import re
import shutil
import subprocess
import time

from cryptography.hazmat.primitives.asymmetric.ec import SECP256R1
from cryptography.hazmat.primitives.asymmetric.ec import SECP384R1
from cryptography.hazmat.primitives.asymmetric.ec import SECP521R1

            

Reported by Bandit.

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
Security

Line: 58
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b101_assert_used.html

                      context.certbot(['--csr'])

    new_count_tmpfiles = len(os.listdir(context.workspace))
    assert initial_count_tmpfiles == new_count_tmpfiles


def test_hook_dirs_creation(context):
    """Test all hooks directory are created during Certbot startup."""
    context.certbot(['register'])

            

Reported by Bandit.

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
Security

Line: 66
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b101_assert_used.html

                  context.certbot(['register'])

    for hook_dir in misc.list_renewal_hooks_dirs(context.config_dir):
        assert os.path.isdir(hook_dir)


def test_registration_override(context):
    """Test correct register/unregister, and registration override."""
    context.certbot(['register'])

            

Reported by Bandit.

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
Security

Line: 83
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b101_assert_used.html

                  """Test that plugins are correctly instantiated and displayed."""
    stdout, _ = context.certbot(['plugins', '--init', '--prepare'])

    assert 'webroot' in stdout


def test_http_01(context):
    """Test the HTTP-01 challenge using standalone plugin."""
    # We start a server listening on the port for the

            

Reported by Bandit.

Import outside toplevel (win32security)
Error

Line: 237 Column: 9

                  if os.name != 'nt':
        os.chmod(privkey1, 0o444)
    else:
        import win32security  # pylint: disable=import-error
        import ntsecuritycon  # pylint: disable=import-error
        # Get the current DACL of the private key
        security = win32security.GetFileSecurity(privkey1, win32security.DACL_SECURITY_INFORMATION)
        dacl = security.GetSecurityDescriptorDacl()
        # Create a read permission for Everybody group

            

Reported by Pylint.

Import outside toplevel (ntsecuritycon)
Error

Line: 238 Column: 9

                      os.chmod(privkey1, 0o444)
    else:
        import win32security  # pylint: disable=import-error
        import ntsecuritycon  # pylint: disable=import-error
        # Get the current DACL of the private key
        security = win32security.GetFileSecurity(privkey1, win32security.DACL_SECURITY_INFORMATION)
        dacl = security.GetSecurityDescriptorDacl()
        # Create a read permission for Everybody group
        everybody = win32security.ConvertStringSidToSid(EVERYBODY_SID)

            

Reported by Pylint.

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
Security

Line: 307
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b101_assert_used.html

                  context.certbot(['-d', certname, '--rsa-key-size', '4096'])

    key1 = join(context.config_dir, 'archive', certname, 'privkey1.pem')
    assert os.stat(key1).st_size > 3000  # 4096 bits keys takes more than 3000 bytes
    assert_cert_count_for_lineage(context.config_dir, certname, 1)

    context.certbot(['renew'])

    assert_cert_count_for_lineage(context.config_dir, certname, 2)

            

Reported by Bandit.

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
Security

Line: 314
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b101_assert_used.html

              
    assert_cert_count_for_lineage(context.config_dir, certname, 2)
    key2 = join(context.config_dir, 'archive', certname, 'privkey2.pem')
    assert os.stat(key2).st_size > 3000

    context.certbot(['renew', '--rsa-key-size', '2048'])

    assert_cert_count_for_lineage(context.config_dir, certname, 3)
    key3 = join(context.config_dir, 'archive', certname, 'privkey3.pem')

            

Reported by Bandit.

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
Security

Line: 320
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b101_assert_used.html

              
    assert_cert_count_for_lineage(context.config_dir, certname, 3)
    key3 = join(context.config_dir, 'archive', certname, 'privkey3.pem')
    assert os.stat(key3).st_size < 1800  # 2048 bits keys takes less than 1800 bytes


def test_renew_ignoring_directory_hooks(context):
    """Test hooks are ignored during renewal with relevant CLI flag."""
    certname = context.get_domain('renew')

            

Reported by Bandit.

certbot/tests/reverter_test.py
44 issues
Unable to import 'certbot'
Error

Line: 13 Column: 1

              except ImportError: # pragma: no cover
    from unittest import mock

from certbot import errors
from certbot.compat import os
from certbot.tests import util as test_util


class ReverterCheckpointLocalTest(test_util.ConfigTestCase):

            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 14 Column: 1

                  from unittest import mock

from certbot import errors
from certbot.compat import os
from certbot.tests import util as test_util


class ReverterCheckpointLocalTest(test_util.ConfigTestCase):
    """Test the Reverter Class."""

            

Reported by Pylint.

Unable to import 'certbot.tests'
Error

Line: 15 Column: 1

              
from certbot import errors
from certbot.compat import os
from certbot.tests import util as test_util


class ReverterCheckpointLocalTest(test_util.ConfigTestCase):
    """Test the Reverter Class."""
    def setUp(self):

            

Reported by Pylint.

Unable to import 'certbot.reverter'
Error

Line: 22 Column: 9

                  """Test the Reverter Class."""
    def setUp(self):
        super().setUp()
        from certbot.reverter import Reverter

        # Disable spurious errors... we are trying to test for them
        logging.disable(logging.CRITICAL)

        self.reverter = Reverter(self.config)

            

Reported by Pylint.

Unable to import 'certbot.reverter'
Error

Line: 284 Column: 9

                  """Tests functions having to deal with full checkpoints."""
    def setUp(self):
        super().setUp()
        from certbot.reverter import Reverter
        # Disable spurious errors...
        logging.disable(logging.CRITICAL)

        self.reverter = Reverter(self.config)


            

Reported by Pylint.

Too many public methods (22/20)
Error

Line: 18 Column: 1

              from certbot.tests import util as test_util


class ReverterCheckpointLocalTest(test_util.ConfigTestCase):
    """Test the Reverter Class."""
    def setUp(self):
        super().setUp()
        from certbot.reverter import Reverter


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 20 Column: 5

              
class ReverterCheckpointLocalTest(test_util.ConfigTestCase):
    """Test the Reverter Class."""
    def setUp(self):
        super().setUp()
        from certbot.reverter import Reverter

        # Disable spurious errors... we are trying to test for them
        logging.disable(logging.CRITICAL)

            

Reported by Pylint.

Method name "setUp" doesn't conform to snake_case naming style
Error

Line: 20 Column: 5

              
class ReverterCheckpointLocalTest(test_util.ConfigTestCase):
    """Test the Reverter Class."""
    def setUp(self):
        super().setUp()
        from certbot.reverter import Reverter

        # Disable spurious errors... we are trying to test for them
        logging.disable(logging.CRITICAL)

            

Reported by Pylint.

Import outside toplevel (certbot.reverter.Reverter)
Error

Line: 22 Column: 9

                  """Test the Reverter Class."""
    def setUp(self):
        super().setUp()
        from certbot.reverter import Reverter

        # Disable spurious errors... we are trying to test for them
        logging.disable(logging.CRITICAL)

        self.reverter = Reverter(self.config)

            

Reported by Pylint.

Method name "tearDown" doesn't conform to snake_case naming style
Error

Line: 32 Column: 5

                      tup = setup_test_files()
        self.config1, self.config2, self.dir1, self.dir2, self.sets = tup

    def tearDown(self):
        shutil.rmtree(self.config.work_dir)
        shutil.rmtree(self.dir1)
        shutil.rmtree(self.dir2)

        logging.disable(logging.NOTSET)

            

Reported by Pylint.

certbot/tests/display/obj_test.py
44 issues
Unable to import 'certbot'
Error

Line: 5 Column: 1

              import unittest
from unittest import mock

from certbot import errors
from certbot._internal.display import obj as display_obj
from certbot.display import util as display_util

CHOICES = [("First", "Description1"), ("Second", "Description2")]
TAGS = ["tag1", "tag2", "tag3"]

            

Reported by Pylint.

Unable to import 'certbot._internal.display'
Error

Line: 6 Column: 1

              from unittest import mock

from certbot import errors
from certbot._internal.display import obj as display_obj
from certbot.display import util as display_util

CHOICES = [("First", "Description1"), ("Second", "Description2")]
TAGS = ["tag1", "tag2", "tag3"]


            

Reported by Pylint.

Unable to import 'certbot.display'
Error

Line: 7 Column: 1

              
from certbot import errors
from certbot._internal.display import obj as display_obj
from certbot.display import util as display_util

CHOICES = [("First", "Description1"), ("Second", "Description2")]
TAGS = ["tag1", "tag2", "tag3"]



            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 59 Column: 9

                      self.assertIn("message2", string)

    def test_notification_decoration(self):
        from certbot.compat import os
        self.displayer.notification("message", pause=False, decorate=False)
        string = self.mock_stdout.write.call_args[0][0]
        self.assertEqual(string, "message" + os.linesep)

        self.displayer.notification("message2", pause=False)

            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 289 Column: 9

                      mock_logger.debug.assert_called_with("Notifying user: %s", "message")

    def test_notification_decoration(self):
        from certbot.compat import os
        self.displayer.notification("message", pause=False, decorate=False)
        string = self.mock_stdout.write.call_args[0][0]
        self.assertEqual(string, "message" + os.linesep)

        self.displayer.notification("message2", pause=False)

            

Reported by Pylint.

Too many public methods (27/20)
Error

Line: 13 Column: 1

              TAGS = ["tag1", "tag2", "tag3"]


class FileOutputDisplayTest(unittest.TestCase):
    """Test stdout display.

    Most of this class has to deal with visual output.  In order to test how the
    functions look to a user, uncomment the test_visual function.


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 26 Column: 5

                      self.displayer = display_obj.FileDisplay(self.mock_stdout, False)

    @mock.patch("certbot._internal.display.obj.logger")
    def test_notification_no_pause(self, mock_logger):
        self.displayer.notification("message", False)
        string = self.mock_stdout.write.call_args[0][0]

        self.assertIn("message", string)
        mock_logger.debug.assert_called_with("Notifying user: %s", "message")

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 33 Column: 5

                      self.assertIn("message", string)
        mock_logger.debug.assert_called_with("Notifying user: %s", "message")

    def test_notification_pause(self):
        input_with_timeout = "certbot._internal.display.util.input_with_timeout"
        with mock.patch(input_with_timeout, return_value="enter"):
            self.displayer.notification("message", force_interactive=True)

        self.assertIn("message", self.mock_stdout.write.call_args[0][0])

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 40 Column: 5

              
        self.assertIn("message", self.mock_stdout.write.call_args[0][0])

    def test_notification_noninteractive(self):
        self._force_noninteractive(self.displayer.notification, "message")
        string = self.mock_stdout.write.call_args[0][0]
        self.assertIn("message", string)

    def test_notification_noninteractive2(self):

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 45 Column: 5

                      string = self.mock_stdout.write.call_args[0][0]
        self.assertIn("message", string)

    def test_notification_noninteractive2(self):
        # The main purpose of this test is to make sure we only call
        # logger.warning once which _force_noninteractive checks internally
        self._force_noninteractive(self.displayer.notification, "message")
        string = self.mock_stdout.write.call_args[0][0]
        self.assertIn("message", string)

            

Reported by Pylint.

certbot/tests/renewal_test.py
43 issues
Unable to import 'acme'
Error

Line: 5 Column: 1

              import copy
import unittest

from acme import challenges
from certbot import errors, configuration
from certbot._internal import storage
import certbot.tests.util as test_util

try:

            

Reported by Pylint.

Unable to import 'certbot'
Error

Line: 6 Column: 1

              import unittest

from acme import challenges
from certbot import errors, configuration
from certbot._internal import storage
import certbot.tests.util as test_util

try:
    import mock

            

Reported by Pylint.

Unable to import 'certbot._internal'
Error

Line: 7 Column: 1

              
from acme import challenges
from certbot import errors, configuration
from certbot._internal import storage
import certbot.tests.util as test_util

try:
    import mock
except ImportError:  # pragma: no cover

            

Reported by Pylint.

Unable to import 'certbot.tests.util'
Error

Line: 8 Column: 1

              from acme import challenges
from certbot import errors, configuration
from certbot._internal import storage
import certbot.tests.util as test_util

try:
    import mock
except ImportError:  # pragma: no cover
    from unittest import mock

            

Reported by Pylint.

Unable to import 'certbot._internal'
Error

Line: 30 Column: 9

                      lineage = storage.RenewableCert(rc_path, config)
        renewalparams = lineage.configuration['renewalparams']
        # pylint: disable=protected-access
        from certbot._internal import renewal
        renewal._restore_webroot_config(config, renewalparams)
        self.assertEqual(config.webroot_path, ['/var/www/'])

    @mock.patch('certbot._internal.renewal.cli.set_by_cli')
    def test_webroot_params_conservation(self, mock_set_by_cli):

            

Reported by Pylint.

Unable to import 'certbot._internal'
Error

Line: 39 Column: 9

                      # For more details about why this test is important, see:
        # certbot._internal.plugins.webroot_test::
        #   WebrootActionTest::test_webroot_map_partial_without_perform
        from certbot._internal import renewal
        mock_set_by_cli.return_value = False

        renewalparams = {
            'webroot_map': {'test.example.com': '/var/www/test'},
            'webroot_path': ['/var/www/test', '/var/www/other'],

            

Reported by Pylint.

Unable to import 'certbot._internal'
Error

Line: 71 Column: 9

                      le_client = mock.MagicMock()
        le_client.obtain_certificate.return_value = (None, None, None, None)

        from certbot._internal import renewal

        with mock.patch('certbot._internal.renewal.hooks.renew_hook'):
            renewal.renew_cert(self.config, None, le_client, lineage)

        assert self.config.rsa_key_size == 2048

            

Reported by Pylint.

Unable to import 'certbot._internal'
Error

Line: 95 Column: 9

                      le_client = mock.MagicMock()
        le_client.obtain_certificate.return_value = (None, None, None, None)

        from certbot._internal import renewal

        with mock.patch('certbot._internal.renewal.hooks.renew_hook'):
            renewal.renew_cert(self.config, None, le_client, lineage)

        assert self.config.elliptic_curve == 'secp256r1'

            

Reported by Pylint.

Unable to import 'certbot._internal'
Error

Line: 112 Column: 9

                      rc_path = test_util.make_lineage(
            self.config.config_dir, 'sample-renewal-deprecated-option.conf')

        from certbot._internal import renewal
        lineage_config = copy.deepcopy(self.config)
        renewal_candidate = renewal._reconstitute(lineage_config, rc_path)
        # This means that manual_public_ip_logging_ok was not modified in the config based on its
        # value in the renewal conf file
        self.assertIsInstance(lineage_config.manual_public_ip_logging_ok, mock.MagicMock)

            

Reported by Pylint.

Unable to import 'certbot._internal.renewal'
Error

Line: 124 Column: 9

                  """Tests for certbot._internal.renewal.restore_required_config_elements."""
    @classmethod
    def _call(cls, *args, **kwargs):
        from certbot._internal.renewal import restore_required_config_elements
        return restore_required_config_elements(*args, **kwargs)

    @mock.patch('certbot._internal.renewal.cli.set_by_cli')
    def test_allow_subset_of_names_success(self, mock_set_by_cli):
        mock_set_by_cli.return_value = False

            

Reported by Pylint.