Пример #1
0
    def setUp(self):
        kwargs = {
            "chall": acme_util.HTTP01,
            "uri": "uri",
            "status": messages.STATUS_INVALID,
            "error": messages.Error(typ="urn:acme:error:tls", detail="detail"),
        }

        # Prevent future regressions if the error type changes
        self.assertTrue(kwargs["error"].description is not None)

        self.http01 = achallenges.KeyAuthorizationAnnotatedChallenge(
            # pylint: disable=star-args
            challb=messages.ChallengeBody(**kwargs),
            domain="example.com",
            account_key="key")

        kwargs["chall"] = acme_util.TLSSNI01
        self.tls_sni_same = achallenges.KeyAuthorizationAnnotatedChallenge(
            # pylint: disable=star-args
            challb=messages.ChallengeBody(**kwargs),
            domain="example.com",
            account_key="key")

        kwargs["error"] = messages.Error(typ="dnssec", detail="detail")
        self.tls_sni_diff = achallenges.KeyAuthorizationAnnotatedChallenge(
            # pylint: disable=star-args
            challb=messages.ChallengeBody(**kwargs),
            domain="foo.bar",
            account_key="key")
Пример #2
0
    def setUp(self):
        from letsencrypt import achallenges

        kwargs = {
            "chall" : acme_util.SIMPLE_HTTP,
            "uri": "uri",
            "status": messages.STATUS_INVALID,
            "error": messages.Error(typ="tls", detail="detail"),
        }

        self.simple_http = achallenges.SimpleHTTP(
            challb=messages.ChallengeBody(**kwargs),# pylint: disable=star-args
            domain="example.com",
            account_key="key")

        kwargs["chall"] = acme_util.DVSNI
        self.dvsni_same = achallenges.DVSNI(
            challb=messages.ChallengeBody(**kwargs),# pylint: disable=star-args
            domain="example.com",
            account_key="key")

        kwargs["error"] = messages.Error(typ="dnssec", detail="detail")
        self.dvsni_diff = achallenges.DVSNI(
            challb=messages.ChallengeBody(**kwargs),# pylint: disable=star-args
            domain="foo.bar",
            account_key="key")
Пример #3
0
    def setUp(self):
        kwargs = {
            "chall": acme_util.HTTP01,
            "uri": "uri",
            "status": messages.STATUS_INVALID,
            "error": messages.Error(typ="tls", detail="detail"),
        }

        self.http01 = achallenges.KeyAuthorizationAnnotatedChallenge(
            # pylint: disable=star-args
            challb=messages.ChallengeBody(**kwargs),
            domain="example.com",
            account_key="key")

        kwargs["chall"] = acme_util.DVSNI
        self.dvsni_same = achallenges.DVSNI(
            # pylint: disable=star-args
            challb=messages.ChallengeBody(**kwargs),
            domain="example.com",
            account_key="key")

        kwargs["error"] = messages.Error(typ="dnssec", detail="detail")
        self.dvsni_diff = achallenges.DVSNI(
            # pylint: disable=star-args
            challb=messages.ChallengeBody(**kwargs),
            domain="foo.bar",
            account_key="key")
Пример #4
0
 def test_check_response_not_ok_jobj_error(self):
     self.response.ok = False
     self.response.json.return_value = messages.Error(
         detail='foo', typ='serverInternal', title='some title').to_json()
     # pylint: disable=protected-access
     self.assertRaises(messages.Error, self.net._check_response,
                       self.response)
Пример #5
0
    def setUp(self):
        kwargs = {
            "chall": acme_util.HTTP01,
            "uri": "uri",
            "status": messages.STATUS_INVALID,
            "error": messages.Error.with_code("tls", detail="detail"),
        }

        # Prevent future regressions if the error type changes
        self.assertTrue(kwargs["error"].description is not None)

        http_01 = messages.ChallengeBody(**kwargs)  # pylint: disable=star-args

        kwargs["chall"] = acme_util.TLSSNI01
        tls_sni_01 = messages.ChallengeBody(**kwargs)  # pylint: disable=star-args

        self.authzr1 = mock.MagicMock()
        self.authzr1.body.identifier.value = 'example.com'
        self.authzr1.body.challenges = [http_01, tls_sni_01]

        kwargs["error"] = messages.Error(typ="dnssec", detail="detail")
        tls_sni_01_diff = messages.ChallengeBody(**kwargs)  # pylint: disable=star-args

        self.authzr2 = mock.MagicMock()
        self.authzr2.body.identifier.value = 'foo.bar'
        self.authzr2.body.challenges = [tls_sni_01_diff]
Пример #6
0
    def test_handle_exception(self, mock_sys):
        # pylint: disable=protected-access
        from acme import messages

        config = mock.MagicMock()
        mock_open = mock.mock_open()

        with mock.patch('certbot.main.open', mock_open, create=True):
            exception = Exception('detail')
            config.verbose_count = 1
            main._handle_exception(Exception,
                                   exc_value=exception,
                                   trace=None,
                                   config=None)
            mock_open().write.assert_called_once_with(''.join(
                traceback.format_exception_only(Exception, exception)))
            error_msg = mock_sys.exit.call_args_list[0][0][0]
            self.assertTrue('unexpected error' in error_msg)

        with mock.patch('certbot.main.open', mock_open, create=True):
            mock_open.side_effect = [KeyboardInterrupt]
            error = errors.Error('detail')
            main._handle_exception(errors.Error,
                                   exc_value=error,
                                   trace=None,
                                   config=None)
            # assert_any_call used because sys.exit doesn't exit in cli.py
            mock_sys.exit.assert_any_call(''.join(
                traceback.format_exception_only(errors.Error, error)))

        exception = messages.Error(detail='alpha',
                                   typ='urn:acme:error:triffid',
                                   title='beta')
        config = mock.MagicMock(debug=False, verbose_count=-3)
        main._handle_exception(messages.Error,
                               exc_value=exception,
                               trace=None,
                               config=config)
        error_msg = mock_sys.exit.call_args_list[-1][0][0]
        self.assertTrue('unexpected error' in error_msg)
        self.assertTrue('acme:error' not in error_msg)
        self.assertTrue('alpha' in error_msg)
        self.assertTrue('beta' in error_msg)
        config = mock.MagicMock(debug=False, verbose_count=1)
        main._handle_exception(messages.Error,
                               exc_value=exception,
                               trace=None,
                               config=config)
        error_msg = mock_sys.exit.call_args_list[-1][0][0]
        self.assertTrue('unexpected error' in error_msg)
        self.assertTrue('acme:error' in error_msg)
        self.assertTrue('alpha' in error_msg)

        interrupt = KeyboardInterrupt('detail')
        main._handle_exception(KeyboardInterrupt,
                               exc_value=interrupt,
                               trace=None,
                               config=None)
        mock_sys.exit.assert_called_with(''.join(
            traceback.format_exception_only(KeyboardInterrupt, interrupt)))
Пример #7
0
 def test_unsupported_error(self):
     from acme import messages
     msg = "Test"
     mx_err = messages.Error(detail=msg, typ="malformed", title="title")
     with mock.patch("certbot.client.acme_client.Client") as mock_client:
         mock_client().register.side_effect = [mx_err, mock.MagicMock()]
         self.assertRaises(messages.Error, self._call)
Пример #8
0
 def _call(cls,
           typ: str = "urn:ietf:params:acme:error:badCSR",
           title: str = "Unacceptable CSR",
           detail: str = "CSR contained unknown extensions"):
     from certbot._internal.display.util import describe_acme_error
     return describe_acme_error(
         acme_messages.Error(typ=typ, title=title, detail=detail))
Пример #9
0
 def test_email_invalid_noninteractive(self, _rep):
     from acme import messages
     msg = "DNS problem: NXDOMAIN looking up MX for example.com"
     mx_err = messages.Error(detail=msg, typ="urn:acme:error:invalidEmail")
     with mock.patch("certbot.client.acme_client.Client") as mock_client:
         mock_client().register.side_effect = [mx_err, mock.MagicMock()]
         self.assertRaises(errors.Error, self._call)
Пример #10
0
 def test_email_retry(self, _rep, mock_get_email):
     from acme import messages
     msg = "DNS problem: NXDOMAIN looking up MX for example.com"
     mx_err = messages.Error(detail=msg, typ="urn:acme:error:invalidEmail")
     with mock.patch("certbot.client.acme_client.Client") as mock_client:
         mock_client().register.side_effect = [mx_err, mock.MagicMock()]
         self._call()
         self.assertEqual(mock_get_email.call_count, 1)
Пример #11
0
 def test_email_retry(self, _rep, mock_get_email):
     from acme import messages
     msg = "Validation of contact mailto:[email protected] failed"
     mx_err = messages.Error(detail=msg, typ="malformed", title="title")
     with mock.patch("letsencrypt.client.acme_client.Client") as mock_client:
         mock_client().register.side_effect = [mx_err, mock.MagicMock()]
         self._call()
         self.assertEqual(mock_get_email.call_count, 1)
Пример #12
0
 def test_unsupported_error(self):
     from acme import messages
     msg = "Test"
     mx_err = messages.Error(detail=msg, typ="malformed", title="title")
     with mock.patch("certbot.client.acme_client.BackwardsCompatibleClientV2") as mock_client:
         with mock.patch("certbot.eff.handle_subscription") as mock_handle:
             mock_client().new_account_and_tos.side_effect = [mx_err, mock.MagicMock()]
             self.assertRaises(messages.Error, self._call)
     self.assertFalse(mock_handle.called)
Пример #13
0
 def setUp(self):
     from certbot.errors import FailedChallenges
     self.error = FailedChallenges(
         set([
             achallenges.DNS(domain="example.com",
                             challb=messages.ChallengeBody(
                                 chall=acme_util.DNS,
                                 uri=None,
                                 error=messages.Error(typ="tls",
                                                      detail="detail")))
         ]))
Пример #14
0
 def test_unsupported_error(self):
     from acme import messages
     msg = "Test"
     mx_err = messages.Error(detail=msg, typ="malformed", title="title")
     with mock.patch("certbot._internal.client.acme_client.BackwardsCompatibleClientV2") as mock_client:
         mock_client().client.directory.__getitem__ = mock.Mock(
             side_effect=self._new_acct_dir_mock
         )
         mock_client().external_account_required.side_effect = self._false_mock
         with mock.patch("certbot.eff.handle_subscription") as mock_handle:
             mock_client().new_account_and_tos.side_effect = [mx_err, mock.MagicMock()]
             self.assertRaises(messages.Error, self._call)
     self.assertFalse(mock_handle.called)
Пример #15
0
    def test_unicode(self):
        from certbot.errors import FailedChallenges
        arabic_detail = u'\u0639\u062f\u0627\u0644\u0629'
        arabic_error = FailedChallenges(
            set([
                achallenges.DNS(domain="example.com",
                                challb=messages.ChallengeBody(
                                    chall=acme_util.DNS01,
                                    uri=None,
                                    error=messages.Error(
                                        typ="tls", detail=arabic_detail)))
            ]))

        self.assertTrue(
            str(arabic_error).startswith(
                "Failed authorization procedure. example.com (dns-01): tls"))
Пример #16
0
    def test_except_hook(self, mock_sys):
        config = mock.MagicMock()
        mock_open = mock.mock_open()

        with mock.patch('certbot.log.open', mock_open, create=True):
            exception = Exception('detail')
            config.verbose_count = 1
            self._call(
                Exception, exc_value=exception, trace=None, config=None)
            mock_open().write.assert_any_call(''.join(
                traceback.format_exception_only(Exception, exception)))
            error_msg = mock_sys.exit.call_args_list[0][0][0]
            self.assertTrue('unexpected error' in error_msg)

        with mock.patch('certbot.log.open', mock_open, create=True):
            mock_open.side_effect = [KeyboardInterrupt]
            error = errors.Error('detail')
            self._call(
                errors.Error, exc_value=error, trace=None, config=None)
            # assert_any_call used because sys.exit doesn't exit in cli.py
            mock_sys.exit.assert_any_call(''.join(
                traceback.format_exception_only(errors.Error, error)))

        bad_typ = messages.ERROR_PREFIX + 'triffid'
        exception = messages.Error(detail='alpha', typ=bad_typ, title='beta')
        config = mock.MagicMock(debug=False, verbose_count=-3)
        self._call(
            messages.Error, exc_value=exception, trace=None, config=config)
        error_msg = mock_sys.exit.call_args_list[-1][0][0]
        self.assertTrue('unexpected error' in error_msg)
        self.assertTrue('acme:error' not in error_msg)
        self.assertTrue('alpha' in error_msg)
        self.assertTrue('beta' in error_msg)
        config = mock.MagicMock(debug=False, verbose_count=1)
        self._call(
            messages.Error, exc_value=exception, trace=None, config=config)
        error_msg = mock_sys.exit.call_args_list[-1][0][0]
        self.assertTrue('unexpected error' in error_msg)
        self.assertTrue('acme:error' in error_msg)
        self.assertTrue('alpha' in error_msg)

        interrupt = KeyboardInterrupt('detail')
        self._call(
            KeyboardInterrupt, exc_value=interrupt, trace=None, config=None)
        mock_sys.exit.assert_called_with(''.join(
            traceback.format_exception_only(KeyboardInterrupt, interrupt)))