The following issues were found

certbot-dns-ovh/tests/dns_ovh_test.py
14 issues
Unable to import 'certbot.compat'
Error

Line: 11 Column: 1

                  from unittest import mock # type: ignore
from requests.exceptions import HTTPError

from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.tests import util as test_util

ENDPOINT = 'ovh-eu'

            

Reported by Pylint.

Unable to import 'certbot.plugins'
Error

Line: 12 Column: 1

              from requests.exceptions import HTTPError

from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.tests import util as test_util

ENDPOINT = 'ovh-eu'
APPLICATION_KEY = 'foo'

            

Reported by Pylint.

Unable to import 'certbot.plugins'
Error

Line: 13 Column: 1

              
from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.tests import util as test_util

ENDPOINT = 'ovh-eu'
APPLICATION_KEY = 'foo'
APPLICATION_SECRET = 'bar'

            

Reported by Pylint.

Unable to import 'certbot.tests'
Error

Line: 14 Column: 1

              from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.tests import util as test_util

ENDPOINT = 'ovh-eu'
APPLICATION_KEY = 'foo'
APPLICATION_SECRET = 'bar'
CONSUMER_KEY = 'spam'

            

Reported by Pylint.

Unable to import 'certbot_dns_ovh._internal.dns_ovh'
Error

Line: 28 Column: 9

                  def setUp(self):
        super().setUp()

        from certbot_dns_ovh._internal.dns_ovh import Authenticator

        path = os.path.join(self.tempdir, 'file.ini')
        credentials = {
            "ovh_endpoint": ENDPOINT,
            "ovh_application_key": APPLICATION_KEY,

            

Reported by Pylint.

Unable to import 'certbot_dns_ovh._internal.dns_ovh'
Error

Line: 54 Column: 9

                  LOGIN_ERROR = HTTPError('403 Client Error: Forbidden for url: https://eu.api.ovh.com/1.0/...')

    def setUp(self):
        from certbot_dns_ovh._internal.dns_ovh import _OVHLexiconClient

        self.client = _OVHLexiconClient(
            ENDPOINT, APPLICATION_KEY, APPLICATION_SECRET, CONSUMER_KEY, 0
        )


            

Reported by Pylint.

Possible hardcoded password: 'bar'
Security

Line: 18
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b105_hardcoded_password_string.html

              
ENDPOINT = 'ovh-eu'
APPLICATION_KEY = 'foo'
APPLICATION_SECRET = 'bar'
CONSUMER_KEY = 'spam'


class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):

            

Reported by Bandit.

Missing class docstring
Error

Line: 22 Column: 1

              CONSUMER_KEY = 'spam'


class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):

    def setUp(self):
        super().setUp()


            

Reported by Pylint.

Too few public methods (1/2)
Error

Line: 22 Column: 1

              CONSUMER_KEY = 'spam'


class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):

    def setUp(self):
        super().setUp()


            

Reported by Pylint.

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

Line: 25 Column: 5

              class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):

    def setUp(self):
        super().setUp()

        from certbot_dns_ovh._internal.dns_ovh import Authenticator

        path = os.path.join(self.tempdir, 'file.ini')

            

Reported by Pylint.

certbot-apache/tests/centos6_test.py
14 issues
Unable to import 'certbot.compat'
Error

Line: 5 Column: 1

              import unittest
from unittest import mock

from certbot.compat import os
from certbot.errors import MisconfigurationError
from certbot_apache._internal import obj
from certbot_apache._internal import override_centos
from certbot_apache._internal import parser
import util

            

Reported by Pylint.

Unable to import 'certbot.errors'
Error

Line: 6 Column: 1

              from unittest import mock

from certbot.compat import os
from certbot.errors import MisconfigurationError
from certbot_apache._internal import obj
from certbot_apache._internal import override_centos
from certbot_apache._internal import parser
import util


            

Reported by Pylint.

Unable to import 'certbot_apache._internal'
Error

Line: 7 Column: 1

              
from certbot.compat import os
from certbot.errors import MisconfigurationError
from certbot_apache._internal import obj
from certbot_apache._internal import override_centos
from certbot_apache._internal import parser
import util



            

Reported by Pylint.

Unable to import 'certbot_apache._internal'
Error

Line: 8 Column: 1

              from certbot.compat import os
from certbot.errors import MisconfigurationError
from certbot_apache._internal import obj
from certbot_apache._internal import override_centos
from certbot_apache._internal import parser
import util


def get_vh_truth(temp_dir, config_name):

            

Reported by Pylint.

Unable to import 'certbot_apache._internal'
Error

Line: 9 Column: 1

              from certbot.errors import MisconfigurationError
from certbot_apache._internal import obj
from certbot_apache._internal import override_centos
from certbot_apache._internal import parser
import util


def get_vh_truth(temp_dir, config_name):
    """Return the ground truth for the specified directory."""

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 50 Column: 5

                      self.vh_truth = get_vh_truth(
            self.temp_dir, "centos6_apache/apache")

    def test_get_parser(self):
        self.assertTrue(isinstance(self.config.parser,
                                   override_centos.CentOSParser))

    def test_get_virtual_hosts(self):
        """Make sure all vhosts are being properly found."""

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 70 Column: 5

                      self.assertEqual(found, 2)

    @mock.patch("certbot_apache._internal.configurator.display_util.notify")
    def test_loadmod_default(self, unused_mock_notify):
        ssl_loadmods = self.config.parser.find_dir(
            "LoadModule", "ssl_module", exclude=False)
        self.assertEqual(len(ssl_loadmods), 1)
        # Make sure the LoadModule ssl_module is in ssl.conf (default)
        self.assertTrue("ssl.conf" in ssl_loadmods[0])

            

Reported by Pylint.

Variable name "lm" doesn't conform to snake_case naming style
Error

Line: 91 Column: 13

              
        # We should now have LoadModule ssl_module in root conf and ssl.conf
        self.assertEqual(len(post_loadmods), 2)
        for lm in post_loadmods:
            # lm[:-7] removes "/arg[#]" from the path
            arguments = self.config.parser.get_all_args(lm[:-7])
            self.assertEqual(arguments, ["ssl_module", "modules/mod_ssl.so"])
            # ...and both of them should be wrapped in <IfModule !mod_ssl.c>
            # lm[:-17] strips off /directive/arg[1] from the path.

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 101 Column: 5

                          self.assertTrue("!mod_ssl.c" in ifmod_args)

    @mock.patch("certbot_apache._internal.configurator.display_util.notify")
    def test_loadmod_multiple(self, unused_mock_notify):
        sslmod_args = ["ssl_module", "modules/mod_ssl.so"]
        # Adds another LoadModule to main httpd.conf in addtition to ssl.conf
        self.config.parser.add_dir(self.config.parser.loc["default"], "LoadModule",
                                   sslmod_args)
        self.config.save()

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 122 Column: 5

                          self.assertTrue(self.config.parser.not_modssl_ifmodule(mod))  #pylint: disable=no-member

    @mock.patch("certbot_apache._internal.configurator.display_util.notify")
    def test_loadmod_rootconf_exists(self, unused_mock_notify):
        sslmod_args = ["ssl_module", "modules/mod_ssl.so"]
        rootconf_ifmod = self.config.parser.get_ifmod(
            parser.get_aug_path(self.config.parser.loc["default"]),
            "!mod_ssl.c", beginning=True)
        self.config.parser.add_dir(rootconf_ifmod[:-1], "LoadModule", sslmod_args)

            

Reported by Pylint.

tools/snap/build_remote.py
14 issues
Instance of 'SyncManager' has no 'Lock' member; maybe 'RLock'?
Error

Line: 244 Column: 23

                      running = manager.dict({target: True for target in targets})
        # While multiple processes are running, this lock should be acquired
        # before printing output.
        output_lock = manager.Lock()

        async_results = [pool.apply_async(_build_snap, (target, archs, status, running, output_lock))
                         for target in targets]

        process = Process(target=_dump_status, args=(archs, status, running, output_lock))

            

Reported by Pylint.

Unused import shutil
Error

Line: 18 Column: 1

              from os.path import realpath
import random
import re
import shutil
import string
import subprocess
import sys
import tempfile
from threading import Lock

            

Reported by Pylint.

Redefining built-in 'print'
Error

Line: 42 Column: 1

              # also be done through command line flags or environment variables set when the
# Python process starts, but this approach was taken instead to ensure
# consistent behavior regardless of how the script is invoked.
print = functools.partial(print, flush=True)


def _snap_log_name(target: str, arch: str):
    return f'{target}_{arch}.txt'


            

Reported by Pylint.

Unused variable 'failures'
Error

Line: 183 Column: 13

                      result = status[target][arch]

        if result != 'Successfully built':
            failures = True

            build_output_name = _snap_log_name(target, arch)
            build_output_path = join(workspace, build_output_name)
            if not exists(build_output_path):
                build_output = f'No output has been dumped by snapcraft remote-build.'

            

Reported by Pylint.

Using an f-string that does not have any interpolated variables
Error

Line: 188 Column: 32

                          build_output_name = _snap_log_name(target, arch)
            build_output_path = join(workspace, build_output_name)
            if not exists(build_output_path):
                build_output = f'No output has been dumped by snapcraft remote-build.'
            else:
                with open(build_output_path) as file_h:
                    build_output = file_h.read()

            print(f'Output for failed build target={target} arch={arch}')

            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              #!/usr/bin/env python3
import argparse
import datetime
import functools
import glob
from multiprocessing import Manager
from multiprocessing import Pool
from multiprocessing import Process
from multiprocessing.managers import SyncManager

            

Reported by Pylint.

Consider possible security implications associated with subprocess module.
Security blacklist

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

              import re
import shutil
import string
import subprocess
import sys
import tempfile
from threading import Lock
import time
from typing import Dict

            

Reported by Bandit.

Standard pseudo-random generators are not suitable for security/cryptographic purposes.
Security blacklist

Line: 62
Suggestion: https://bandit.readthedocs.io/en/latest/blacklists/blacklist_calls.html#b311-random

                  # This random string was chosen because snapcraft uses a MD5 hash
    # represented as a 32 character hex string by default, so we use the same
    # length but from a larger character set just because we can.
    random_string = ''.join(random.choice(string.ascii_lowercase + string.digits)
                            for _ in range(32))
    build_id = f'snapcraft-{target}-{random_string}'

    with tempfile.TemporaryDirectory() as tempdir:
        environ = os.environ.copy()

            

Reported by Bandit.

subprocess call - check for execution of untrusted input.
Security injection

Line: 69
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b603_subprocess_without_shell_equals_true.html

                  with tempfile.TemporaryDirectory() as tempdir:
        environ = os.environ.copy()
        environ['XDG_CACHE_HOME'] = tempdir
        process = subprocess.Popen([
            'snapcraft', 'remote-build', '--launchpad-accept-public-upload',
            '--build-on', ','.join(archs), '--build-id', build_id],
            stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
            universal_newlines=True, env=environ, cwd=workspace)


            

Reported by Bandit.

Starting a process with a partial executable path
Security injection

Line: 69
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b607_start_process_with_partial_path.html

                  with tempfile.TemporaryDirectory() as tempdir:
        environ = os.environ.copy()
        environ['XDG_CACHE_HOME'] = tempdir
        process = subprocess.Popen([
            'snapcraft', 'remote-build', '--launchpad-accept-public-upload',
            '--build-on', ','.join(archs), '--build-id', build_id],
            stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
            universal_newlines=True, env=environ, cwd=workspace)


            

Reported by Bandit.

certbot-dns-nsone/tests/dns_nsone_test.py
14 issues
Unable to import 'certbot.compat'
Error

Line: 11 Column: 1

                  from unittest import mock # type: ignore
from requests.exceptions import HTTPError

from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.plugins.dns_test_common import DOMAIN
from certbot.tests import util as test_util


            

Reported by Pylint.

Unable to import 'certbot.plugins'
Error

Line: 12 Column: 1

              from requests.exceptions import HTTPError

from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.plugins.dns_test_common import DOMAIN
from certbot.tests import util as test_util

API_KEY = 'foo'

            

Reported by Pylint.

Unable to import 'certbot.plugins'
Error

Line: 13 Column: 1

              
from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.plugins.dns_test_common import DOMAIN
from certbot.tests import util as test_util

API_KEY = 'foo'


            

Reported by Pylint.

Unable to import 'certbot.plugins.dns_test_common'
Error

Line: 14 Column: 1

              from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.plugins.dns_test_common import DOMAIN
from certbot.tests import util as test_util

API_KEY = 'foo'



            

Reported by Pylint.

Unable to import 'certbot.tests'
Error

Line: 15 Column: 1

              from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.plugins.dns_test_common import DOMAIN
from certbot.tests import util as test_util

API_KEY = 'foo'


class AuthenticatorTest(test_util.TempDirTestCase,

            

Reported by Pylint.

Unable to import 'certbot_dns_nsone._internal.dns_nsone'
Error

Line: 26 Column: 9

                  def setUp(self):
        super().setUp()

        from certbot_dns_nsone._internal.dns_nsone import Authenticator

        path = os.path.join(self.tempdir, 'file.ini')
        dns_test_common.write({"nsone_api_key": API_KEY}, path)

        self.config = mock.MagicMock(nsone_credentials=path,

            

Reported by Pylint.

Unable to import 'certbot_dns_nsone._internal.dns_nsone'
Error

Line: 46 Column: 9

                  LOGIN_ERROR = HTTPError('401 Client Error: Unauthorized for url: {0}.'.format(DOMAIN))

    def setUp(self):
        from certbot_dns_nsone._internal.dns_nsone import _NS1LexiconClient

        self.client = _NS1LexiconClient(API_KEY, 0)

        self.provider_mock = mock.MagicMock()
        self.client.provider = self.provider_mock

            

Reported by Pylint.

Missing class docstring
Error

Line: 20 Column: 1

              API_KEY = 'foo'


class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):

    def setUp(self):
        super().setUp()


            

Reported by Pylint.

Too few public methods (1/2)
Error

Line: 20 Column: 1

              API_KEY = 'foo'


class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):

    def setUp(self):
        super().setUp()


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 23 Column: 5

              class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):

    def setUp(self):
        super().setUp()

        from certbot_dns_nsone._internal.dns_nsone import Authenticator

        path = os.path.join(self.tempdir, 'file.ini')

            

Reported by Pylint.

certbot-apache/tests/autohsts_test.py
14 issues
Unable to import 'certbot'
Error

Line: 11 Column: 1

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

from certbot import errors
from certbot_apache._internal import constants
import util


class AutoHSTSTest(util.ApacheTest):

            

Reported by Pylint.

Unable to import 'certbot_apache._internal'
Error

Line: 12 Column: 1

                  from unittest import mock # type: ignore

from certbot import errors
from certbot_apache._internal import constants
import util


class AutoHSTSTest(util.ApacheTest):
    """Tests for AutoHSTS feature"""

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 46 Column: 5

              
    @mock.patch("certbot_apache._internal.configurator.ApacheConfigurator.restart")
    @mock.patch("certbot_apache._internal.configurator.ApacheConfigurator.enable_mod")
    def test_autohsts_enable_headers_mod(self, mock_enable, _restart):
        self.config.parser.modules.pop("headers_module", None)
        self.config.parser.modules.pop("mod_header.c", None)
        self.config.enable_autohsts(mock.MagicMock(), ["ocspvhost.com"])
        self.assertTrue(mock_enable.called)


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 53 Column: 5

                      self.assertTrue(mock_enable.called)

    @mock.patch("certbot_apache._internal.configurator.ApacheConfigurator.restart")
    def test_autohsts_deploy_already_exists(self, _restart):
        self.config.enable_autohsts(mock.MagicMock(), ["ocspvhost.com"])
        self.assertRaises(errors.PluginEnhancementAlreadyPresent,
                          self.config.enable_autohsts,
                          mock.MagicMock(), ["ocspvhost.com"])


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 62 Column: 5

                  @mock.patch("certbot_apache._internal.constants.AUTOHSTS_FREQ", 0)
    @mock.patch("certbot_apache._internal.configurator.ApacheConfigurator.restart")
    @mock.patch("certbot_apache._internal.configurator.ApacheConfigurator.prepare")
    def test_autohsts_increase(self, mock_prepare, _mock_restart):
        self.config._prepared = False
        maxage = "\"max-age={0}\""
        initial_val = maxage.format(constants.AUTOHSTS_STEPS[0])
        inc_val = maxage.format(constants.AUTOHSTS_STEPS[1])


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 81 Column: 5

              
    @mock.patch("certbot_apache._internal.configurator.ApacheConfigurator.restart")
    @mock.patch("certbot_apache._internal.configurator.ApacheConfigurator._autohsts_increase")
    def test_autohsts_increase_noop(self, mock_increase, _restart):
        maxage = "\"max-age={0}\""
        initial_val = maxage.format(constants.AUTOHSTS_STEPS[0])
        self.config.enable_autohsts(mock.MagicMock(), ["ocspvhost.com"])
        # Verify initial value
        self.assertEqual(self.get_autohsts_value(self.vh_truth[7].path),

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 96 Column: 5

              
    @mock.patch("certbot_apache._internal.configurator.ApacheConfigurator.restart")
    @mock.patch("certbot_apache._internal.constants.AUTOHSTS_FREQ", 0)
    def test_autohsts_increase_no_header(self, _restart):
        self.config.enable_autohsts(mock.MagicMock(), ["ocspvhost.com"])
        # Remove the header
        dir_locs = self.config.parser.find_dir("Header", None,
                                              self.vh_truth[7].path)
        dir_loc = "/".join(dir_locs[0].split("/")[:-1])

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 109 Column: 5

              
    @mock.patch("certbot_apache._internal.constants.AUTOHSTS_FREQ", 0)
    @mock.patch("certbot_apache._internal.configurator.ApacheConfigurator.restart")
    def test_autohsts_increase_and_make_permanent(self, _mock_restart):
        maxage = "\"max-age={0}\""
        max_val = maxage.format(constants.AUTOHSTS_PERMANENT)
        mock_lineage = mock.MagicMock()
        mock_lineage.key_path = "/etc/apache2/ssl/key-certbot_15.pem"
        self.config.enable_autohsts(mock.MagicMock(), ["ocspvhost.com"])

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 133 Column: 5

                      self.assertEqual(self.get_autohsts_value(self.vh_truth[7].path),
                          max_val)

    def test_autohsts_update_noop(self):
        with mock.patch("time.time") as mock_time:
            # Time mock is used to make sure that the execution does not
            # continue when no autohsts entries exist in pluginstorage
            self.config.update_autohsts(mock.MagicMock())
            self.assertFalse(mock_time.called)

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 140 Column: 5

                          self.config.update_autohsts(mock.MagicMock())
            self.assertFalse(mock_time.called)

    def test_autohsts_make_permanent_noop(self):
        self.config.storage.put = mock.MagicMock()
        self.config.deploy_autohsts(mock.MagicMock())
        # Make sure that the execution does not continue when no entries in store
        self.assertFalse(self.config.storage.put.called)


            

Reported by Pylint.

certbot-dns-luadns/tests/dns_luadns_test.py
14 issues
Unable to import 'certbot.compat'
Error

Line: 11 Column: 1

                  from unittest import mock # type: ignore
from requests.exceptions import HTTPError

from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.tests import util as test_util

EMAIL = 'fake@example.com'

            

Reported by Pylint.

Unable to import 'certbot.plugins'
Error

Line: 12 Column: 1

              from requests.exceptions import HTTPError

from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.tests import util as test_util

EMAIL = 'fake@example.com'
TOKEN = 'foo'

            

Reported by Pylint.

Unable to import 'certbot.plugins'
Error

Line: 13 Column: 1

              
from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.tests import util as test_util

EMAIL = 'fake@example.com'
TOKEN = 'foo'


            

Reported by Pylint.

Unable to import 'certbot.tests'
Error

Line: 14 Column: 1

              from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins import dns_test_common_lexicon
from certbot.tests import util as test_util

EMAIL = 'fake@example.com'
TOKEN = 'foo'



            

Reported by Pylint.

Unable to import 'certbot_dns_luadns._internal.dns_luadns'
Error

Line: 26 Column: 9

                  def setUp(self):
        super().setUp()

        from certbot_dns_luadns._internal.dns_luadns import Authenticator

        path = os.path.join(self.tempdir, 'file.ini')
        dns_test_common.write({"luadns_email": EMAIL, "luadns_token": TOKEN}, path)

        self.config = mock.MagicMock(luadns_credentials=path,

            

Reported by Pylint.

Unable to import 'certbot_dns_luadns._internal.dns_luadns'
Error

Line: 46 Column: 9

                  LOGIN_ERROR = HTTPError("401 Client Error: Unauthorized for url: ...")

    def setUp(self):
        from certbot_dns_luadns._internal.dns_luadns import _LuaDNSLexiconClient

        self.client = _LuaDNSLexiconClient(EMAIL, TOKEN, 0)

        self.provider_mock = mock.MagicMock()
        self.client.provider = self.provider_mock

            

Reported by Pylint.

Possible hardcoded password: 'foo'
Security

Line: 17
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b105_hardcoded_password_string.html

              from certbot.tests import util as test_util

EMAIL = 'fake@example.com'
TOKEN = 'foo'


class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):


            

Reported by Bandit.

Missing class docstring
Error

Line: 20 Column: 1

              TOKEN = 'foo'


class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):

    def setUp(self):
        super().setUp()


            

Reported by Pylint.

Too few public methods (1/2)
Error

Line: 20 Column: 1

              TOKEN = 'foo'


class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):

    def setUp(self):
        super().setUp()


            

Reported by Pylint.

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

Line: 23 Column: 5

              class AuthenticatorTest(test_util.TempDirTestCase,
                        dns_test_common_lexicon.BaseLexiconAuthenticatorTest):

    def setUp(self):
        super().setUp()

        from certbot_dns_luadns._internal.dns_luadns import Authenticator

        path = os.path.join(self.tempdir, 'file.ini')

            

Reported by Pylint.

certbot/certbot/_internal/account.py
14 issues
Unable to import 'josepy'
Error

Line: 10 Column: 1

              import socket

from cryptography.hazmat.primitives import serialization
import josepy as jose
import pyrfc3339
import pytz

from acme import fields as acme_fields
from acme import messages

            

Reported by Pylint.

Unable to import 'pyrfc3339'
Error

Line: 11 Column: 1

              
from cryptography.hazmat.primitives import serialization
import josepy as jose
import pyrfc3339
import pytz

from acme import fields as acme_fields
from acme import messages
from acme.client import ClientBase  # pylint: disable=unused-import

            

Reported by Pylint.

Unable to import 'pytz'
Error

Line: 12 Column: 1

              from cryptography.hazmat.primitives import serialization
import josepy as jose
import pyrfc3339
import pytz

from acme import fields as acme_fields
from acme import messages
from acme.client import ClientBase  # pylint: disable=unused-import
from certbot import errors

            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 14 Column: 1

              import pyrfc3339
import pytz

from acme import fields as acme_fields
from acme import messages
from acme.client import ClientBase  # pylint: disable=unused-import
from certbot import errors
from certbot import interfaces
from certbot import util

            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 15 Column: 1

              import pytz

from acme import fields as acme_fields
from acme import messages
from acme.client import ClientBase  # pylint: disable=unused-import
from certbot import errors
from certbot import interfaces
from certbot import util
from certbot._internal import constants

            

Reported by Pylint.

Unable to import 'acme.client'
Error

Line: 16 Column: 1

              
from acme import fields as acme_fields
from acme import messages
from acme.client import ClientBase  # pylint: disable=unused-import
from certbot import errors
from certbot import interfaces
from certbot import util
from certbot._internal import constants
from certbot.compat import filesystem

            

Reported by Pylint.

Use of insecure MD2, MD4, MD5, or SHA1 hash function.
Security blacklist

Line: 64
Suggestion: https://bandit.readthedocs.io/en/latest/blacklists/blacklist_calls.html#b303-md5

              
        # try MD5, else use MD5 in non-security mode (e.g. for FIPS systems / RHEL)
        try:
            hasher = hashlib.md5()
        except ValueError:
            hasher = hashlib.new('md5', usedforsecurity=False) # type: ignore

        hasher.update(self.key.key.public_key().public_bytes(
            encoding=serialization.Encoding.PEM,

            

Reported by Bandit.

Use of insecure MD4 or MD5 hash function.
Security blacklist

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

                      try:
            hasher = hashlib.md5()
        except ValueError:
            hasher = hashlib.new('md5', usedforsecurity=False) # type: ignore

        hasher.update(self.key.key.public_key().public_bytes(
            encoding=serialization.Encoding.PEM,
            format=serialization.PublicFormat.SubjectPublicKeyInfo)
        )

            

Reported by Bandit.

Consider explicitly re-raising using the 'from' keyword
Error

Line: 114 Column: 13

                      try:
            return self.accounts[account_id]
        except KeyError:
            raise errors.AccountNotFound(account_id)

class RegistrationResourceWithNewAuthzrURI(messages.RegistrationResource):
    """A backwards-compatible RegistrationResource with a new-authz URI.

       Hack: Certbot versions pre-0.11.1 expect to load

            

Reported by Pylint.

Too few public methods (0/2)
Error

Line: 37 Column: 5

              
    """

    class Meta(jose.JSONObjectWithFields):
        """Account metadata

        :ivar datetime.datetime creation_dt: Creation date and time (UTC).
        :ivar str creation_host: FQDN of host, where account has been created.
        :ivar str register_to_eff: If not None, Certbot will register the provided

            

Reported by Pylint.

certbot-apache/tests/parsernode_util_test.py
14 issues
Unable to import 'certbot_apache._internal'
Error

Line: 4 Column: 1

              """ Tests for ParserNode utils """
import unittest

from certbot_apache._internal import parsernode_util as util


class ParserNodeUtilTest(unittest.TestCase):
    """Tests for ParserNode utils"""


            

Reported by Pylint.

Probable insecure usage of temp file/directory.
Security

Line: 15
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b108_hardcoded_tmp_directory.html

                      return {
            "ancestor": None,
            "dirty": False,
            "filepath": "/tmp",
        }

    def _setup_commentnode(self):
        """ Sets up kwargs dict for CommentNode """


            

Reported by Bandit.

Method could be a function
Error

Line: 10 Column: 5

              class ParserNodeUtilTest(unittest.TestCase):
    """Tests for ParserNode utils"""

    def _setup_parsernode(self):
        """ Sets up kwargs dict for ParserNode """
        return {
            "ancestor": None,
            "dirty": False,
            "filepath": "/tmp",

            

Reported by Pylint.

Variable name "pn" doesn't conform to snake_case naming style
Error

Line: 21 Column: 9

                  def _setup_commentnode(self):
        """ Sets up kwargs dict for CommentNode """

        pn = self._setup_parsernode()
        pn["comment"] = "x"
        return pn

    def _setup_directivenode(self):
        """ Sets up kwargs dict for DirectiveNode """

            

Reported by Pylint.

Variable name "pn" doesn't conform to snake_case naming style
Error

Line: 28 Column: 9

                  def _setup_directivenode(self):
        """ Sets up kwargs dict for DirectiveNode """

        pn = self._setup_parsernode()
        pn["name"] = "Name"
        pn["parameters"] = ("first",)
        pn["enabled"] = True
        return pn


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 34 Column: 5

                      pn["enabled"] = True
        return pn

    def test_unknown_parameter(self):
        params = self._setup_parsernode()
        params["unknown"] = "unknown"
        self.assertRaises(TypeError, util.parsernode_kwargs, params)

        params = self._setup_commentnode()

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 47 Column: 5

                      params["unknown"] = "unknown"
        self.assertRaises(TypeError, util.directivenode_kwargs, params)

    def test_parsernode(self):
        params = self._setup_parsernode()
        ctrl = self._setup_parsernode()

        ancestor, dirty, filepath, metadata = util.parsernode_kwargs(params)
        self.assertEqual(ancestor, ctrl["ancestor"])

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 57 Column: 5

                      self.assertEqual(filepath, ctrl["filepath"])
        self.assertEqual(metadata, {})

    def test_parsernode_from_metadata(self):
        params = self._setup_parsernode()
        params.pop("filepath")
        md = {"some": "value"}
        params["metadata"] = md


            

Reported by Pylint.

Variable name "md" doesn't conform to snake_case naming style
Error

Line: 60 Column: 9

                  def test_parsernode_from_metadata(self):
        params = self._setup_parsernode()
        params.pop("filepath")
        md = {"some": "value"}
        params["metadata"] = md

        # Just testing that error from missing required parameters is not raised
        _, _, _, metadata = util.parsernode_kwargs(params)
        self.assertEqual(metadata, md)

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 67 Column: 5

                      _, _, _, metadata = util.parsernode_kwargs(params)
        self.assertEqual(metadata, md)

    def test_commentnode(self):
        params = self._setup_commentnode()
        ctrl = self._setup_commentnode()

        comment, _ = util.commentnode_kwargs(params)
        self.assertEqual(comment, ctrl["comment"])

            

Reported by Pylint.

certbot/tests/error_handler_test.py
13 issues
Unable to import 'certbot.compat'
Error

Line: 10 Column: 1

              from typing import Union
import unittest

from certbot.compat import os

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

            

Reported by Pylint.

Unable to import 'certbot._internal'
Error

Line: 49 Column: 9

                  """Tests for certbot._internal.error_handler.ErrorHandler."""

    def setUp(self):
        from certbot._internal import error_handler

        self.init_func = mock.MagicMock()
        self.init_args = {42,}
        self.init_kwargs = {'foo': 'bar'}
        self.handler = error_handler.ErrorHandler(self.init_func,

            

Reported by Pylint.

Unable to import 'certbot._internal'
Error

Line: 141 Column: 9

                  """Tests for certbot._internal.error_handler.ExitHandler."""

    def setUp(self):
        from certbot._internal import error_handler
        super().setUp()
        self.handler = error_handler.ExitHandler(self.init_func,
                                                 *self.init_args,
                                                 **self.init_kwargs)


            

Reported by Pylint.

Variable name "s" doesn't conform to snake_case naming style
Error

Line: 26 Column: 9

              
def set_signals(sig_handler_dict):
    """Set the signal (keys) with the handler (values) from the input dict."""
    for s, h in sig_handler_dict.items():
        signal.signal(s, h)


@contextlib.contextmanager
def signal_receiver(signums):

            

Reported by Pylint.

Variable name "h" doesn't conform to snake_case naming style
Error

Line: 26 Column: 12

              
def set_signals(sig_handler_dict):
    """Set the signal (keys) with the handler (values) from the input dict."""
    for s, h in sig_handler_dict.items():
        signal.signal(s, h)


@contextlib.contextmanager
def signal_receiver(signums):

            

Reported by Pylint.

Import outside toplevel (certbot._internal.error_handler)
Error

Line: 49 Column: 9

                  """Tests for certbot._internal.error_handler.ErrorHandler."""

    def setUp(self):
        from certbot._internal import error_handler

        self.init_func = mock.MagicMock()
        self.init_args = {42,}
        self.init_kwargs = {'foo': 'bar'}
        self.handler = error_handler.ErrorHandler(self.init_func,

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 61 Column: 5

                      # pylint: disable=protected-access
        self.signals = error_handler._SIGNALS

    def test_context_manager(self):
        exception_raised = False
        try:
            with self.handler:
                raise ValueError
        except ValueError:

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 73 Column: 5

                      self.init_func.assert_called_once_with(*self.init_args,
                                               **self.init_kwargs)

    def test_context_manager_with_signal(self):
        if not self.signals:
            self.skipTest(reason='Signals cannot be handled on Windows.')
        init_signals = get_signals(self.signals)
        with signal_receiver(self.signals) as signals_received:
            with self.handler:

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 93 Column: 5

                      for signum in self.signals:
            self.assertEqual(init_signals[signum], signal.getsignal(signum))

    def test_bad_recovery(self):
        bad_func = mock.MagicMock(side_effect=[ValueError])
        self.handler.register(bad_func)
        try:
            with self.handler:
                raise ValueError

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 105 Column: 5

                                                             **self.init_kwargs)
        bad_func.assert_called_once_with()

    def test_bad_recovery_with_signal(self):
        if not self.signals:
            self.skipTest(reason='Signals cannot be handled on Windows.')
        sig1 = self.signals[0]
        sig2 = self.signals[-1]
        bad_func = mock.MagicMock(side_effect=lambda: send_signal(sig1))

            

Reported by Pylint.

certbot-apache/tests/centos_test.py
13 issues
Unable to import 'certbot'
Error

Line: 9 Column: 1

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

from certbot import errors
from certbot.compat import filesystem
from certbot.compat import os
from certbot_apache._internal import obj
from certbot_apache._internal import override_centos
import util

            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 10 Column: 1

                  from unittest import mock # type: ignore

from certbot import errors
from certbot.compat import filesystem
from certbot.compat import os
from certbot_apache._internal import obj
from certbot_apache._internal import override_centos
import util


            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 11 Column: 1

              
from certbot import errors
from certbot.compat import filesystem
from certbot.compat import os
from certbot_apache._internal import obj
from certbot_apache._internal import override_centos
import util



            

Reported by Pylint.

Unable to import 'certbot_apache._internal'
Error

Line: 12 Column: 1

              from certbot import errors
from certbot.compat import filesystem
from certbot.compat import os
from certbot_apache._internal import obj
from certbot_apache._internal import override_centos
import util


def get_vh_truth(temp_dir, config_name):

            

Reported by Pylint.

Unable to import 'certbot_apache._internal'
Error

Line: 13 Column: 1

              from certbot.compat import filesystem
from certbot.compat import os
from certbot_apache._internal import obj
from certbot_apache._internal import override_centos
import util


def get_vh_truth(temp_dir, config_name):
    """Return the ground truth for the specified directory."""

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 59 Column: 5

                          mock_info.return_value = ["fedora", "28"]
            self.config.config_test()

    def test_non_fedora_error(self):
        c_test = "certbot_apache._internal.configurator.ApacheConfigurator.config_test"
        with mock.patch(c_test) as mock_test:
            mock_test.side_effect = errors.MisconfigurationError
            with mock.patch("certbot.util.get_os_info") as mock_info:
                mock_info.return_value = ["not_fedora"]

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 68 Column: 5

                              self.assertRaises(errors.MisconfigurationError,
                                  self.config.config_test)

    def test_fedora_restart_error(self):
        c_test = "certbot_apache._internal.configurator.ApacheConfigurator.config_test"
        with mock.patch(c_test) as mock_test:
            # First call raises error, second doesn't
            mock_test.side_effect = [errors.MisconfigurationError, '']
            with mock.patch("certbot.util.run_script") as mock_run:

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 78 Column: 5

                              self.assertRaises(errors.MisconfigurationError,
                                  self._run_fedora_test)

    def test_fedora_restart(self):
        c_test = "certbot_apache._internal.configurator.ApacheConfigurator.config_test"
        with mock.patch(c_test) as mock_test:
            with mock.patch("certbot.util.run_script") as mock_run:
                # First call raises error, second doesn't
                mock_test.side_effect = [errors.MisconfigurationError, '']

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 109 Column: 5

                      self.vh_truth = get_vh_truth(
            self.temp_dir, "centos7_apache/apache")

    def test_get_parser(self):
        self.assertIsInstance(self.config.parser, override_centos.CentOSParser)

    @mock.patch("certbot_apache._internal.apache_util._get_runtime_cfg")
    def test_opportunistic_httpd_runtime_parsing(self, mock_get):
        define_val = (

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 113 Column: 5

                      self.assertIsInstance(self.config.parser, override_centos.CentOSParser)

    @mock.patch("certbot_apache._internal.apache_util._get_runtime_cfg")
    def test_opportunistic_httpd_runtime_parsing(self, mock_get):
        define_val = (
            'Define: TEST1\n'
            'Define: TEST2\n'
            'Define: DUMP_RUN_CFG\n'
        )

            

Reported by Pylint.