Ejemplo n.º 1
0
class SimpleHTTPTest(unittest.TestCase):

    def setUp(self):
        from acme.challenges import SimpleHTTP
        self.msg = SimpleHTTP(
            token=jose.decode_b64jose(
                'evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oA'))
        self.jmsg = {
            'type': 'simpleHttp',
            'token': 'evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA',
        }

    def test_to_partial_json(self):
        self.assertEqual(self.jmsg, self.msg.to_partial_json())

    def test_from_json(self):
        from acme.challenges import SimpleHTTP
        self.assertEqual(self.msg, SimpleHTTP.from_json(self.jmsg))

    def test_from_json_hashable(self):
        from acme.challenges import SimpleHTTP
        hash(SimpleHTTP.from_json(self.jmsg))

    def test_good_token(self):
        self.assertTrue(self.msg.good_token)
        self.assertFalse(
            self.msg.update(token=b'..').good_token)
 def setUp(self):
     from acme.challenges import SimpleHTTP
     self.msg = SimpleHTTP(
         token='evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oA')
     self.jmsg = {
         'type': 'simpleHttp',
         'token': 'evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oA',
     }
Ejemplo n.º 3
0
class SimpleHTTPTest(unittest.TestCase):
    def setUp(self):
        from acme.challenges import SimpleHTTP
        self.msg = SimpleHTTP(
            token='evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oA')
        self.jmsg = {
            'type': 'simpleHttp',
            'token': 'evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oA',
            'tls': True,
        }

    def test_no_tls(self):
        from acme.challenges import SimpleHTTP
        self.assertEqual(
            SimpleHTTP(token='tok', tls=False).to_json(), {
                'tls': False,
                'token': 'tok',
                'type': 'simpleHttp',
            })

    def test_to_partial_json(self):
        self.assertEqual(self.jmsg, self.msg.to_partial_json())

    def test_from_json(self):
        from acme.challenges import SimpleHTTP
        self.assertEqual(self.msg, SimpleHTTP.from_json(self.jmsg))

    def test_from_json_hashable(self):
        from acme.challenges import SimpleHTTP
        hash(SimpleHTTP.from_json(self.jmsg))
class SimpleHTTPTest(unittest.TestCase):

    def setUp(self):
        from acme.challenges import SimpleHTTP
        self.msg = SimpleHTTP(
            token='evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oA')
        self.jmsg = {
            'type': 'simpleHttp',
            'token': 'evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oA',
            'tls': True,
        }

    def test_no_tls(self):
        from acme.challenges import SimpleHTTP
        self.assertEqual(SimpleHTTP(token='tok', tls=False).to_json(), {
            'tls': False,
            'token': 'tok',
            'type': 'simpleHttp',
        })

    def test_to_partial_json(self):
        self.assertEqual(self.jmsg, self.msg.to_partial_json())

    def test_from_json(self):
        from acme.challenges import SimpleHTTP
        self.assertEqual(self.msg, SimpleHTTP.from_json(self.jmsg))

    def test_from_json_hashable(self):
        from acme.challenges import SimpleHTTP
        hash(SimpleHTTP.from_json(self.jmsg))
Ejemplo n.º 5
0
 def setUp(self):
     from acme.challenges import SimpleHTTP
     self.msg = SimpleHTTP(
         token='evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oA')
     self.jmsg = {
         'type': 'simpleHttp',
         'token': 'evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oA',
     }
Ejemplo n.º 6
0
 def test_no_tls(self):
     from acme.challenges import SimpleHTTP
     self.assertEqual(
         SimpleHTTP(token='tok', tls=False).to_json(), {
             'tls': False,
             'token': 'tok',
             'type': 'simpleHttp',
         })
Ejemplo n.º 7
0
    def setUp(self):
        from acme.challenges import SimpleHTTPResponse
        self.msg_http = SimpleHTTPResponse(tls=False)
        self.msg_https = SimpleHTTPResponse(tls=True)
        self.jmsg_http = {
            'resource': 'challenge',
            'type': 'simpleHttp',
            'tls': False,
        }
        self.jmsg_https = {
            'resource': 'challenge',
            'type': 'simpleHttp',
            'tls': True,
        }

        from acme.challenges import SimpleHTTP
        self.chall = SimpleHTTP(token=(b"x" * 16))
        self.resp_http = SimpleHTTPResponse(tls=False)
        self.resp_https = SimpleHTTPResponse(tls=True)
        self.good_headers = {'Content-Type': SimpleHTTPResponse.CONTENT_TYPE}
Ejemplo n.º 8
0
    def setUp(self):
        from acme.challenges import SimpleHTTPResponse
        self.msg_http = SimpleHTTPResponse(tls=False)
        self.msg_https = SimpleHTTPResponse(tls=True)
        self.jmsg_http = {
            'resource': 'challenge',
            'type': 'simpleHttp',
            'tls': False,
        }
        self.jmsg_https = {
            'resource': 'challenge',
            'type': 'simpleHttp',
            'tls': True,
        }

        from acme.challenges import SimpleHTTP
        self.chall = SimpleHTTP(token=(b"x" * 16))
        self.resp_http = SimpleHTTPResponse(tls=False)
        self.resp_https = SimpleHTTPResponse(tls=True)
        self.good_headers = {'Content-Type': SimpleHTTPResponse.CONTENT_TYPE}
Ejemplo n.º 9
0
    def setUp(self):
        from acme.challenges import SimpleHTTPResponse
        self.msg_http = SimpleHTTPResponse(path='6tbIMBC5Anhl5bOlWT5ZFA',
                                           tls=False)
        self.msg_https = SimpleHTTPResponse(path='6tbIMBC5Anhl5bOlWT5ZFA')
        self.jmsg_http = {
            'type': 'simpleHttp',
            'path': '6tbIMBC5Anhl5bOlWT5ZFA',
            'tls': False,
        }
        self.jmsg_https = {
            'type': 'simpleHttp',
            'path': '6tbIMBC5Anhl5bOlWT5ZFA',
            'tls': True,
        }

        from acme.challenges import SimpleHTTP
        self.chall = SimpleHTTP(token="foo")
        self.resp_http = SimpleHTTPResponse(path="bar", tls=False)
        self.resp_https = SimpleHTTPResponse(path="bar", tls=True)
        self.good_headers = {'Content-Type': SimpleHTTPResponse.CONTENT_TYPE}
Ejemplo n.º 10
0
 def test_from_json_hashable(self):
     from acme.challenges import SimpleHTTP
     hash(SimpleHTTP.from_json(self.jmsg))
Ejemplo n.º 11
0
 def test_from_json(self):
     from acme.challenges import SimpleHTTP
     self.assertEqual(self.msg, SimpleHTTP.from_json(self.jmsg))
 def test_from_json_hashable(self):
     from acme.challenges import SimpleHTTP
     hash(SimpleHTTP.from_json(self.jmsg))
 def test_from_json(self):
     from acme.challenges import SimpleHTTP
     self.assertEqual(self.msg, SimpleHTTP.from_json(self.jmsg))
Ejemplo n.º 14
0
class SimpleHTTPResponseTest(unittest.TestCase):
    # pylint: disable=too-many-instance-attributes

    def setUp(self):
        from acme.challenges import SimpleHTTPResponse
        self.msg_http = SimpleHTTPResponse(tls=False)
        self.msg_https = SimpleHTTPResponse(tls=True)
        self.jmsg_http = {
            'resource': 'challenge',
            'type': 'simpleHttp',
            'tls': False,
        }
        self.jmsg_https = {
            'resource': 'challenge',
            'type': 'simpleHttp',
            'tls': True,
        }

        from acme.challenges import SimpleHTTP
        self.chall = SimpleHTTP(token=(b"x" * 16))
        self.resp_http = SimpleHTTPResponse(tls=False)
        self.resp_https = SimpleHTTPResponse(tls=True)
        self.good_headers = {'Content-Type': SimpleHTTPResponse.CONTENT_TYPE}

    def test_to_partial_json(self):
        self.assertEqual(self.jmsg_http, self.msg_http.to_partial_json())
        self.assertEqual(self.jmsg_https, self.msg_https.to_partial_json())

    def test_from_json(self):
        from acme.challenges import SimpleHTTPResponse
        self.assertEqual(self.msg_http,
                         SimpleHTTPResponse.from_json(self.jmsg_http))
        self.assertEqual(self.msg_https,
                         SimpleHTTPResponse.from_json(self.jmsg_https))

    def test_from_json_hashable(self):
        from acme.challenges import SimpleHTTPResponse
        hash(SimpleHTTPResponse.from_json(self.jmsg_http))
        hash(SimpleHTTPResponse.from_json(self.jmsg_https))

    def test_scheme(self):
        self.assertEqual('http', self.msg_http.scheme)
        self.assertEqual('https', self.msg_https.scheme)

    def test_port(self):
        self.assertEqual(80, self.msg_http.port)
        self.assertEqual(443, self.msg_https.port)

    def test_uri(self):
        self.assertEqual(
            'http://example.com/.well-known/acme-challenge/'
            'eHh4eHh4eHh4eHh4eHh4eA',
            self.msg_http.uri('example.com', self.chall))
        self.assertEqual(
            'https://example.com/.well-known/acme-challenge/'
            'eHh4eHh4eHh4eHh4eHh4eA',
            self.msg_https.uri('example.com', self.chall))

    def test_gen_check_validation(self):
        account_key = jose.JWKRSA.load(test_util.load_vector('rsa512_key.pem'))
        self.assertTrue(
            self.resp_http.check_validation(
                validation=self.resp_http.gen_validation(
                    self.chall, account_key),
                chall=self.chall,
                account_public_key=account_key.public_key()))

    def test_gen_check_validation_wrong_key(self):
        key1 = jose.JWKRSA.load(test_util.load_vector('rsa512_key.pem'))
        key2 = jose.JWKRSA.load(test_util.load_vector('rsa1024_key.pem'))
        self.assertFalse(
            self.resp_http.check_validation(
                validation=self.resp_http.gen_validation(self.chall, key1),
                chall=self.chall,
                account_public_key=key2.public_key()))

    def test_check_validation_wrong_payload(self):
        account_key = jose.JWKRSA.load(test_util.load_vector('rsa512_key.pem'))
        validations = tuple(
            jose.JWS.sign(payload=payload, alg=jose.RS256, key=account_key)
            for payload in (b'', b'{}',
                            self.chall.json_dumps().encode('utf-8'),
                            self.resp_http.json_dumps().encode('utf-8')))
        for validation in validations:
            self.assertFalse(
                self.resp_http.check_validation(
                    validation=validation,
                    chall=self.chall,
                    account_public_key=account_key.public_key()))

    def test_check_validation_wrong_fields(self):
        resource = self.resp_http.gen_resource(self.chall)
        account_key = jose.JWKRSA.load(test_util.load_vector('rsa512_key.pem'))
        validations = tuple(
            jose.JWS.sign(payload=bad_resource.json_dumps().encode('utf-8'),
                          alg=jose.RS256,
                          key=account_key)
            for bad_resource in (resource.update(tls=True),
                                 resource.update(token=(b'x' * 20))))
        for validation in validations:
            self.assertFalse(
                self.resp_http.check_validation(
                    validation=validation,
                    chall=self.chall,
                    account_public_key=account_key.public_key()))

    @mock.patch("acme.challenges.requests.get")
    def test_simple_verify_good_validation(self, mock_get):
        account_key = jose.JWKRSA.load(test_util.load_vector('rsa512_key.pem'))
        for resp in self.resp_http, self.resp_https:
            mock_get.reset_mock()
            validation = resp.gen_validation(self.chall, account_key)
            mock_get.return_value = mock.MagicMock(
                text=validation.json_dumps(), headers=self.good_headers)
            self.assertTrue(resp.simple_verify(self.chall, "local", None))
            mock_get.assert_called_once_with(resp.uri("local", self.chall),
                                             verify=False)

    @mock.patch("acme.challenges.requests.get")
    def test_simple_verify_bad_validation(self, mock_get):
        mock_get.return_value = mock.MagicMock(text="!",
                                               headers=self.good_headers)
        self.assertFalse(
            self.resp_http.simple_verify(self.chall, "local", None))

    @mock.patch("acme.challenges.requests.get")
    def test_simple_verify_bad_content_type(self, mock_get):
        mock_get().text = self.chall.token
        self.assertFalse(
            self.resp_http.simple_verify(self.chall, "local", None))

    @mock.patch("acme.challenges.requests.get")
    def test_simple_verify_connection_error(self, mock_get):
        mock_get.side_effect = requests.exceptions.RequestException
        self.assertFalse(
            self.resp_http.simple_verify(self.chall, "local", None))

    @mock.patch("acme.challenges.requests.get")
    def test_simple_verify_port(self, mock_get):
        self.resp_http.simple_verify(self.chall,
                                     domain="local",
                                     account_public_key=None,
                                     port=4430)
        self.assertEqual(
            "local:4430",
            urllib_parse.urlparse(mock_get.mock_calls[0][1][0]).netloc)
Ejemplo n.º 15
0
class SimpleHTTPResponseTest(unittest.TestCase):
    # pylint: disable=too-many-instance-attributes

    def setUp(self):
        from acme.challenges import SimpleHTTPResponse
        self.msg_http = SimpleHTTPResponse(tls=False)
        self.msg_https = SimpleHTTPResponse(tls=True)
        self.jmsg_http = {
            'resource': 'challenge',
            'type': 'simpleHttp',
            'tls': False,
        }
        self.jmsg_https = {
            'resource': 'challenge',
            'type': 'simpleHttp',
            'tls': True,
        }

        from acme.challenges import SimpleHTTP
        self.chall = SimpleHTTP(token=(b"x" * 16))
        self.resp_http = SimpleHTTPResponse(tls=False)
        self.resp_https = SimpleHTTPResponse(tls=True)
        self.good_headers = {'Content-Type': SimpleHTTPResponse.CONTENT_TYPE}

    def test_to_partial_json(self):
        self.assertEqual(self.jmsg_http, self.msg_http.to_partial_json())
        self.assertEqual(self.jmsg_https, self.msg_https.to_partial_json())

    def test_from_json(self):
        from acme.challenges import SimpleHTTPResponse
        self.assertEqual(
            self.msg_http, SimpleHTTPResponse.from_json(self.jmsg_http))
        self.assertEqual(
            self.msg_https, SimpleHTTPResponse.from_json(self.jmsg_https))

    def test_from_json_hashable(self):
        from acme.challenges import SimpleHTTPResponse
        hash(SimpleHTTPResponse.from_json(self.jmsg_http))
        hash(SimpleHTTPResponse.from_json(self.jmsg_https))

    def test_scheme(self):
        self.assertEqual('http', self.msg_http.scheme)
        self.assertEqual('https', self.msg_https.scheme)

    def test_port(self):
        self.assertEqual(80, self.msg_http.port)
        self.assertEqual(443, self.msg_https.port)

    def test_uri(self):
        self.assertEqual(
            'http://example.com/.well-known/acme-challenge/'
            'eHh4eHh4eHh4eHh4eHh4eA', self.msg_http.uri(
                'example.com', self.chall))
        self.assertEqual(
            'https://example.com/.well-known/acme-challenge/'
            'eHh4eHh4eHh4eHh4eHh4eA', self.msg_https.uri(
                'example.com', self.chall))

    def test_gen_check_validation(self):
        account_key = jose.JWKRSA.load(test_util.load_vector('rsa512_key.pem'))
        self.assertTrue(self.resp_http.check_validation(
            validation=self.resp_http.gen_validation(self.chall, account_key),
            chall=self.chall, account_public_key=account_key.public_key()))

    def test_gen_check_validation_wrong_key(self):
        key1 = jose.JWKRSA.load(test_util.load_vector('rsa512_key.pem'))
        key2 = jose.JWKRSA.load(test_util.load_vector('rsa1024_key.pem'))
        self.assertFalse(self.resp_http.check_validation(
            validation=self.resp_http.gen_validation(self.chall, key1),
            chall=self.chall, account_public_key=key2.public_key()))

    def test_check_validation_wrong_payload(self):
        account_key = jose.JWKRSA.load(test_util.load_vector('rsa512_key.pem'))
        validations = tuple(
            jose.JWS.sign(payload=payload, alg=jose.RS256, key=account_key)
            for payload in (b'', b'{}', self.chall.json_dumps().encode('utf-8'),
                            self.resp_http.json_dumps().encode('utf-8'))
        )
        for validation in validations:
            self.assertFalse(self.resp_http.check_validation(
                validation=validation, chall=self.chall,
                account_public_key=account_key.public_key()))

    def test_check_validation_wrong_fields(self):
        resource = self.resp_http.gen_resource(self.chall)
        account_key = jose.JWKRSA.load(test_util.load_vector('rsa512_key.pem'))
        validations = tuple(
            jose.JWS.sign(payload=bad_resource.json_dumps().encode('utf-8'),
                          alg=jose.RS256, key=account_key)
            for bad_resource in (resource.update(tls=True),
                                 resource.update(token=(b'x' * 20)))
        )
        for validation in validations:
            self.assertFalse(self.resp_http.check_validation(
                validation=validation, chall=self.chall,
                account_public_key=account_key.public_key()))

    @mock.patch("acme.challenges.requests.get")
    def test_simple_verify_good_validation(self, mock_get):
        account_key = jose.JWKRSA.load(test_util.load_vector('rsa512_key.pem'))
        for resp in self.resp_http, self.resp_https:
            mock_get.reset_mock()
            validation = resp.gen_validation(self.chall, account_key)
            mock_get.return_value = mock.MagicMock(
                text=validation.json_dumps(), headers=self.good_headers)
            self.assertTrue(resp.simple_verify(self.chall, "local", None))
            mock_get.assert_called_once_with(resp.uri(
                "local", self.chall), verify=False)

    @mock.patch("acme.challenges.requests.get")
    def test_simple_verify_bad_validation(self, mock_get):
        mock_get.return_value = mock.MagicMock(
            text="!", headers=self.good_headers)
        self.assertFalse(self.resp_http.simple_verify(
            self.chall, "local", None))

    @mock.patch("acme.challenges.requests.get")
    def test_simple_verify_bad_content_type(self, mock_get):
        mock_get().text = self.chall.token
        self.assertFalse(self.resp_http.simple_verify(
            self.chall, "local", None))

    @mock.patch("acme.challenges.requests.get")
    def test_simple_verify_connection_error(self, mock_get):
        mock_get.side_effect = requests.exceptions.RequestException
        self.assertFalse(self.resp_http.simple_verify(
            self.chall, "local", None))

    @mock.patch("acme.challenges.requests.get")
    def test_simple_verify_port(self, mock_get):
        self.resp_http.simple_verify(
            self.chall, domain="local", account_public_key=None, port=4430)
        self.assertEqual("local:4430", urllib_parse.urlparse(
            mock_get.mock_calls[0][1][0]).netloc)