def test_api_response_string_repr(self):
     data = MagicMock(spec=str)
     headers = MagicMock(spec=dict)
     status_code = MagicMock(spec=int)
     response = APIResponse(data, headers, status_code)
     self.assertIn(str(data), str(response))
     self.assertIn(str(status_code), str(response))
 def setUp(self):
     self._transport = JOSETransport()
     self._transport.get = MagicMock(return_value=MagicMock(spec=APIResponse))
     public_key = APIResponse(valid_private_key,
                              {"X-IOV-KEY-ID": "59:12:e2:f6:3f:79:d5:1e:18:75:c5:25:ff:b3:b7:f2"}, 200)
     self._transport.get.return_value = public_key
     self._transport._server_time_difference = 0, time()
 def test_api_response_success(self):
     data = MagicMock(spec=str)
     headers = MagicMock(spec=dict)
     status_code = MagicMock(spec=int)
     response = APIResponse(data, headers, status_code)
     self.assertEqual(response.data, data)
     self.assertEqual(response.headers, headers)
     self.assertEqual(response.status_code, status_code)
 def test_process_jose_request_success_empty_response(self):
     self._transport._http_client = MagicMock()
     self._transport._http_client.get.return_value = APIResponse(None, {}, 201)
     response = self._transport._process_jose_request('GET', '/path', 'subject')
     self._transport.decrypt_response.assert_not_called()
     self.assertIsInstance(response, APIResponse)
     self.assertIsNone(response.data)
     self.assertEqual(response.status_code, 201)
 def test_process_jose_request_success_unencrypted_response(self):
     self._transport._http_client = MagicMock()
     self._transport._http_client.get.return_value = APIResponse({"a": "response"}, {}, 200)
     response = self._transport._process_jose_request('GET', '/path', ANY)
     self._transport.decrypt_response.assert_not_called()
     self.assertIsInstance(response, APIResponse)
     self.assertEqual(response.data, {"a": "response"})
     self.assertEqual(response.status_code, 200)
Esempio n. 6
0
 def setUp(self):
     self._transport = JOSETransport()
     self._transport.get = MagicMock(return_value=MagicMock(
         spec=APIResponse))
     self._transport._get_jwt_signature = MagicMock(return_value='x.x.x')
     public_key = APIResponse(valid_public_key, {}, 200)
     self._transport.get.return_value = public_key
     self._transport._server_time_difference = 0, time()
Esempio n. 7
0
 def setUp(self):
     self._transport = MagicMock()
     self._response = APIResponse({}, {}, 200)
     self._transport.post.return_value = self._response
     self._transport.get.return_value = self._response
     self._transport.put.return_value = self._response
     self._transport.delete.return_value = self._response
     self._transport.patch.return_value = self._response
     self._organization_client = OrganizationClient(uuid4(), self._transport)
Esempio n. 8
0
 def setup_client(self, client):
     self._client = client
     self._transport = self._client._transport
     self._response = APIResponse({}, {}, 200)
     self._transport.post.return_value = self._response
     self._transport.get.return_value = self._response
     self._transport.put.return_value = self._response
     self._transport.delete.return_value = self._response
     self._transport.patch.return_value = self._response
Esempio n. 9
0
 def setUp(self):
     self._transport = MagicMock()
     self._response = APIResponse({}, {}, 200)
     self._transport.post.return_value = self._response
     self._transport.get.return_value = self._response
     self._transport.put.return_value = self._response
     self._transport.delete.return_value = self._response
     self._transport.patch.return_value = self._response
     self._directory_client = DirectoryClient(uuid4(), self._transport)
 def setUp(self):
     self._transport = MagicMock()
     self._response = APIResponse({}, {}, 200)
     self._transport.post.return_value = self._response
     self._transport.get.return_value = self._response
     self._transport.put.return_value = self._response
     self._transport.delete.return_value = self._response
     self._transport.patch.return_value = self._response
     self._organization_id = uuid4()
     self._expected_subject = 'org:{}'.format(str(self._organization_id))
     self._organization_client = OrganizationClient(self._organization_id,
                                                    self._transport)
Esempio n. 11
0
 def setUp(self):
     self._transport = MagicMock()
     self._response = APIResponse({}, {}, 200)
     self._transport.post.return_value = self._response
     self._transport.get.return_value = self._response
     self._transport.put.return_value = self._response
     self._transport.delete.return_value = self._response
     self._transport.patch.return_value = self._response
     self._directory_id = uuid4()
     self._expected_subject = 'dir:{}'.format(str(self._directory_id))
     self._directory_client = DirectoryClient(self._directory_id,
                                              self._transport)
Esempio n. 12
0
    def setUp(self):
        self._transport = JOSETransport()
        self._transport.get = MagicMock(return_value=MagicMock(
            spec=APIResponse))
        public_key = APIResponse(valid_private_key, transport_request_headers,
                                 200)
        self._transport.get.return_value = public_key
        self._transport._server_time_difference = 0, time()
        self.issuer = "svc"
        self.issuer_id = uuid4()
        self._transport.set_issuer(self.issuer, self.issuer_id,
                                   valid_private_key)
        self._body = str(uuid4())
        self._content_hash = '16793293daadb5a03b7cbbb9d15a1a705b22e762a1a751bc8625dec666101ff2'

        self.jwt_payload = {
            'aud': '%s:%s' % (self.issuer, self.issuer_id),
            'iss': 'lka',
            'cty': 'application/json',
            'nbf': time(),
            'jti': str(uuid4()),
            'exp': time() + 30,
            'iat': time(),
            'request': {
                'meth': 'POST',
                'path': '/',
                'hash': self._content_hash,
                'func': 'S256'
            },
            'sub': '%s:%s' % (self.issuer, self.issuer_id)
        }
        self._transport._get_jwt_payload = MagicMock(
            return_value=self.jwt_payload)
        self._transport.content_hash_function = MagicMock()

        self._transport.content_hash_function(
        ).hexdigest.return_value = self._content_hash

        self._jwt_patch = patch("launchkey.transports.jose_auth.JWT",
                                return_value=MagicMock(spec=JWT)).start()
        self._faux_jwt_headers = {
            "alg": "RS512",
            "typ": "JWT",
            # This should be different than the kid from the transport headers
            "kid": "ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff"
        }
        self._jwt_patch.return_value.unpack.return_value.headers = self._faux_jwt_headers

        patcher = patch('launchkey.transports.jose_auth.sha256')
        patched = patcher.start()
        patched.return_value = MagicMock()
        patched.return_value.hexdigest.return_value = self._content_hash
        self.addCleanup(patcher.stop)
Esempio n. 13
0
    def setUp(self):
        self._transport = JOSETransport()
        self._transport.get = MagicMock(return_value=MagicMock(
            spec=APIResponse))
        public_key = APIResponse(valid_private_key, {}, 200)
        self._transport.get.return_value = public_key
        self._transport._server_time_difference = 0, time()

        self._jwt_patch = patch("launchkey.transports.jose_auth.JWT",
                                return_value=MagicMock(spec=JWT)).start()
        self._jwt_patch.return_value.unpack.return_value.headers = faux_jwt_headers

        self.addCleanup(patch.stopall)
Esempio n. 14
0
    def setUp(self):
        self._transport = JOSETransport()
        self._transport.get = MagicMock(return_value=MagicMock(
            spec=APIResponse))
        public_key = APIResponse(valid_public_key, transport_request_headers,
                                 200)
        self._transport.get.return_value = public_key
        self._transport._server_time_difference = 0, time()
        self.issuer = "svc"
        self.issuer_id = uuid4()
        self._transport.set_issuer(self.issuer, self.issuer_id,
                                   valid_private_key)
        self._body = str(uuid4())
        self._content_hash = '16793293daadb5a03b7cbbb9d15a1a705b22e762a1a751bc8625dec666101ff2'

        self._jwt_patch = patch("launchkey.transports.jose_auth.JWT",
                                return_value=MagicMock(spec=JWT)).start()
        self._jwt_patch.return_value.unpack.return_value.headers = faux_jwt_headers

        self.jwt_payload = {
            'aud': '%s:%s' % (self.issuer, self.issuer_id),
            'iss': 'lka',
            'cty': 'application/json',
            'nbf': time(),
            'jti': str(uuid4()),
            'exp': time() + 30,
            'iat': time(),
            'response': {
                'status': 200,
                'hash': self._content_hash,
                'func': 'S256',
                'cache': 'expected cache-control',
                'location': 'expected location'
            },
            'sub': '%s:%s' % (self.issuer, self.issuer_id)
        }

        self._headers = {
            'Location': 'expected location',
            'Cache-Control': 'expected cache-control'
        }
        self._transport._get_jwt_payload = MagicMock(
            return_value=self.jwt_payload)
        self._transport.content_hash_function = MagicMock()
        self._transport.content_hash_function.return_value.hexdigest.return_value = self._content_hash

        patcher = patch('launchkey.transports.jose_auth.sha256')
        patched = patcher.start()
        patched.return_value = MagicMock()
        patched.return_value.hexdigest.return_value = self._content_hash
        self.addCleanup(patcher.stop)
Esempio n. 15
0
 def setUp(self):
     self._transport = MagicMock()
     self._response = APIResponse({}, {}, 200)
     self._transport.post.return_value = self._response
     self._transport.get.return_value = self._response
     self._transport.put.return_value = self._response
     self._transport.delete.return_value = self._response
     self._device_response = {
         "auth_request": str(uuid4()),
         "response": True,
         "device_id": str(uuid4()),
         "service_pins": ["1234", "3456", "5678"]
     }
     self._transport.loaded_issuer_private_key.decrypt.return_value = dumps(
         self._device_response)
     self._service_client = ServiceClient(uuid4(), self._transport)
     self._service_client._transport._verify_jwt_response = MagicMock()
    def setUp(self):
        self._transport = JOSETransport()
        self._transport.get = MagicMock(return_value=MagicMock(spec=APIResponse))
        public_key = APIResponse(valid_private_key,
                                 {"X-IOV-KEY-ID": "59:12:e2:f6:3f:79:d5:1e:18:75:c5:25:ff:b3:b7:f2"}, 200)
        self._transport.get.return_value = public_key
        self._transport._server_time_difference = 0, time()
        self.issuer = "svc"
        self.issuer_id = uuid4()
        self._transport.set_issuer(self.issuer, self.issuer_id, valid_private_key)
        self._body = str(uuid4())
        self._content_hash = '16793293daadb5a03b7cbbb9d15a1a705b22e762a1a751bc8625dec666101ff2'

        self.jwt_payload = {
            'aud': '%s:%s' % (self.issuer, self.issuer_id),
            'iss': 'lka',
            'cty': 'application/json',
            'nbf': time(),
            'jti': str(uuid4()),
            'exp': time() + 30,
            'iat': time(),
            'request': {
                'meth': 'POST',
                'path': '/',
                'hash': self._content_hash,
                'func': 'S256'},
            'sub': '%s:%s' % (self.issuer, self.issuer_id)
        }
        self._transport._get_jwt_payload = MagicMock(return_value=self.jwt_payload)
        self._transport.content_hash_function = MagicMock()

        self._transport.content_hash_function().hexdigest.return_value = self._content_hash

        patcher = patch('launchkey.transports.jose_auth.sha256')
        patched = patcher.start()
        patched.return_value = MagicMock()
        patched.return_value.hexdigest.return_value = self._content_hash
        self.addCleanup(patcher.stop)
Esempio n. 17
0
    def setUp(self):
        self.jti = str(uuid4())
        minified_jwt_payload = {"jti": self.jti, "response": {"status": 200}}

        self._requests_transport = MagicMock(spec=RequestsTransport)
        self._requests_transport.get.return_value = APIResponse(
            valid_private_key, {}, 200)
        self._transport = JOSETransport(http_client=self._requests_transport)
        self._import_rsa_key_patch = patch(
            "launchkey.transports.jose_auth.import_rsa_key",
            return_value=MagicMock(spec=RsaKey)).start()
        self._jwt_patch = patch("launchkey.transports.jose_auth.JWT",
                                return_value=MagicMock(spec=JWT)).start()
        self._jwt_patch.return_value.unpack.return_value.headers = faux_jwt_headers
        self._jws_patch = patch("launchkey.transports.jose_auth.JWS",
                                return_value=MagicMock(spec=JWS)).start()
        self._jws_patch.return_value.verify_compact.return_value = minified_jwt_payload

        patch.object(JOSETransport, "_verify_jwt_payload").start()
        patch.object(JOSETransport, "_verify_jwt_response_headers").start()
        patch.object(JOSETransport, "_verify_jwt_content_hash").start()

        self.addCleanup(patch.stopall)
Esempio n. 18
0
    def setUp(self):
        self._transport = JOSETransport()
        self._transport.get = MagicMock(return_value=MagicMock(
            spec=APIResponse))
        public_key = APIResponse(valid_private_key, {
            "X-IOV-KEY-ID":
            "59:12:e2:f6:3f:79:d5:1e:18:75:c5:25:ff:b3:b7:f2"
        }, 200)
        self._transport.get.return_value = public_key
        self._transport._server_time_difference = 0, time()
        self.issuer = ANY
        self.issuer_id = uuid4()
        self._transport.set_issuer(self.issuer, self.issuer_id,
                                   valid_private_key)
        self._body = str(uuid4())
        self._content_hash = '16793293daadb5a03b7cbbb9d15a1a705b22e762a1a751bc8625dec666101ff2'

        self.jwt_response = {
            'aud': '%s:%s' % (self.issuer, self.issuer_id),
            'iss': 'lka',
            'cty': 'application/json',
            'nbf': time(),
            'jti': str(uuid4()),
            'exp': time() + 30,
            'iat': time(),
            'response': {
                'status': 200,
                'hash': self._content_hash,
                'func': 'S256'
            },
            'sub': '%s:%s' % (self.issuer, self.issuer_id)
        }
        self._transport._get_jwt_payload = MagicMock(
            return_value=self.jwt_response)
        self._transport.content_hash_function = MagicMock()
        self._transport.content_hash_function(
        ).hexdigest.return_value = self._content_hash
Esempio n. 19
0
 def test_raises_on_malformed_response_object(self):
     self._requests_transport.get.return_value = APIResponse(None, {}, 200)
     with self.assertRaises(UnexpectedAPIResponse):
         self._transport.verify_jwt_response(MagicMock(), self.jti, ANY,
                                             None)
Esempio n. 20
0
 def test_raises_on_api_404(self):
     self._requests_transport.get.return_value = APIResponse(
         "Not Found", {}, 404)
     with self.assertRaises(UnexpectedAPIResponse):
         self._transport.verify_jwt_response(MagicMock(), self.jti, ANY,
                                             None)
 def test_validate_response_on_api_response(self):
     response = APIResponse(MagicMock(), ANY, ANY)
     self._client._validate_response(response, MagicMock(spec=Schema))
Esempio n. 22
0
 def test_raises_when_kid_header_is_missing_from_http_headers(self):
     self._requests_transport.get.return_value = APIResponse(
         valid_public_key, {}, 200)
     with self.assertRaises(UnexpectedAPIResponse):
         self._transport.verify_jwt_response(MagicMock(), self.jti, ANY,
                                             None)