def check_proxy_request(self, validator=lambda response: True, path='/path', **kwargs): request = self.prepare_request_mock(use_deprecated_code=False, **kwargs) response = proxy_request(request=request, protocol='http', domain='example.com', path=path) validator(response) request = self.prepare_request_mock(use_deprecated_code=True, **kwargs) response = proxy_request(request=request, protocol='http', domain='example.com', path=path) validator(response)
def check_proxy_request(self, validator=lambda response: True, path='/path', refresh=False, **kwargs): request = self.prepare_request_mock(use_deprecated_code=False, **kwargs) response = proxy_request(request=request, protocol='http', domain='example.com', path=path) validator(response) request = self.prepare_request_mock(use_deprecated_code=True, **kwargs) response = proxy_request(request=request, protocol='http', domain='example.com', path=path) validator(response) if refresh: # We do two calls to the API self.assertEqual(self.admin_mock.social_auth.get(provider='fiware').refresh_token.call_count, 2) else: self.assertEqual(self.admin_mock.social_auth.get(provider='fiware').refresh_token.call_count, 0)
def test_normal_request(self): request = self.prepare_request_mock() del request.META['HTTP_FIWARE_OAUTH_TOKEN'] with patch('wirecloud.fiware.proxy.get_access_token') as get_access_token_mock: response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(get_access_token_mock.call_count, 0)
def test_fiware_idm_token_invalid_source(self): request = self.prepare_request_mock('{}', extra_headers={ "HTTP_X_FI_WARE_OAUTH_SOURCE": 'invalidsource', "HTTP_X_FI_WARE_OAUTH_HEADER_NAME": 'X-Auth-Token', }, user=self.normuser_mock) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 422) json.loads(self.read_response(response))
def test_normal_request(self): request = self.prepare_request_mock() del request.META['HTTP_FIWARE_OAUTH_TOKEN'] self.network._servers['http']['example.com'].add_response('GET', '/path', self.echo_headers_response) with patch('wirecloud.fiware.proxy.get_access_token') as get_access_token_mock: response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 200) self.assertEqual(get_access_token_mock.call_count, 0)
def test_fiware_idm_no_token_available(self): self.network._servers['http']['example.com'].add_response('POST', '/path', self.echo_headers_response) # Make the request request = self.prepare_request_mock('{}', extra_headers={ "HTTP_X_FI_WARE_OAUTH_HEADER_NAME": 'X-Auth-Token', }, user=self.normuser_mock) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 422) json.loads(self.read_response(response))
def test_fiware_idm_processor_requires_valid_referer(self): self.network._servers['http']['example.com'].add_response('POST', '/path', self.echo_headers_response) proxied_url = reverse('wirecloud|proxy', kwargs={'protocol': 'http', 'domain': 'example.com', 'path': '/path'}) request = self.prepare_request_mock('{}', extra_headers={ "HTTP_X_FI_WARE_OAUTH_HEADER_NAME": 'X-Auth-Token', }, referer='http://localhost' + proxied_url, user=self.admin_mock) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 422) json.loads(self.read_response(response))
def test_fiware_idm_processor_header(self): self.network._servers['http']['example.com'].add_response('POST', '/path', self.echo_headers_response) request = self.prepare_request_mock('{}', extra_headers={ "HTTP_X_FI_WARE_OAUTH_HEADER_NAME": 'X-Auth-Token', }) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 200) headers = json.loads(self.read_response(response)) self.assertIn('X-Auth-Token', headers) self.assertEqual(headers['X-Auth-Token'], TEST_TOKEN)
def test_fiware_idm_processor_get_parameter_emtpy_query(self): def echo_response(method, url, *args, **kwargs): return {'content': url} self.network._servers['http']['example.com'].add_response('POST', '/path', echo_response) request = self.prepare_request_mock('body', extra_headers={ 'HTTP_X_FI_WARE_OAUTH_GET_PARAMETER': 'access_token_id', }) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 200) new_url = self.read_response(response) self.assertEqual(new_url, 'http://example.com/path?access_token_id=' + TEST_TOKEN)
def test_fiware_idm_processor_body(self): def echo_response(method, url, *args, **kwargs): self.assertEqual(int(kwargs['headers']['content-length']), 99) # Content Length after token injection return {'content': kwargs['data'].read()} self.network._servers['http']['example.com'].add_response('POST', '/path', echo_response) request = self.prepare_request_mock('{"token": "%token%"}', extra_headers={ 'HTTP_X_FI_WARE_OAUTH_TOKEN_BODY_PATTERN': '%token%', }) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 200) data = json.loads(self.read_response(response)) self.assertEqual(data['token'], TEST_TOKEN)
def test_fiware_idm_token_from_workspace_owner_header(self): self.network._servers['http']['example.com'].add_response('POST', '/path', self.echo_headers_response) # Make the request request = self.prepare_request_mock('{}', extra_headers={ "HTTP_X_FI_WARE_OAUTH_SOURCE": 'workspaceowner', "HTTP_X_FI_WARE_OAUTH_HEADER_NAME": 'X-Auth-Token', }, user=self.normuser_mock) with patch('wirecloud.proxy.views.Workspace') as Workspace_orm_mock: Workspace_orm_mock.objects.get().creator = self.user_with_workspaces_mock response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 200) request_headers = json.loads(self.read_response(response)) self.assertIn('X-Auth-Token', request_headers) self.assertEqual(request_headers['X-Auth-Token'], TEST_WORKSPACE_TOKEN)
def test_fiware_idm_token_from_workspace_owner_no_token(self): # Remove user_with_workspaces access_token self.user_with_workspaces_mock.social_auth.get(provider='fiware').tokens = {} self.network._servers['http']['example.com'].add_response('POST', '/path', self.echo_headers_response) # Make the request request = self.prepare_request_mock('{}', extra_headers={ "HTTP_X_FI_WARE_OAUTH_SOURCE": 'workspaceowner', "HTTP_X_FI_WARE_OAUTH_HEADER_NAME": 'X-Auth-Token', }, user=self.normuser_mock) with patch('wirecloud.proxy.views.Workspace') as Workspace_orm_mock: Workspace_orm_mock.objects.get().creator = self.user_with_workspaces_mock response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 422) json.loads(self.read_response(response))
def test_fiware_idm_processor_header_authorization(self): self.network._servers['http']['example.com'].add_response( 'POST', '/path', self.echo_headers_response) request = self.prepare_request_mock( '{}', extra_headers={ "HTTP_X_FI_WARE_OAUTH_HEADER_NAME": 'Authorization', }) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 200) headers = json.loads(self.read_response(response)) self.assertIn('Authorization', headers) self.assertEqual(headers['Authorization'], 'Bearer ' + TEST_TOKEN)
def test_fiware_idm_no_token_available(self): self.network._servers['http']['example.com'].add_response( 'POST', '/path', self.echo_headers_response) # Make the request request = self.prepare_request_mock( '{}', extra_headers={ "HTTP_X_FI_WARE_OAUTH_HEADER_NAME": 'X-Auth-Token', }, user=self.normuser_mock) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 422) json.loads(self.read_response(response))
def test_fiware_idm_processor_get_parameter_emtpy_query(self): def echo_response(method, url, *args, **kwargs): return {'content': url} self.network._servers['http']['example.com'].add_response( 'POST', '/path', echo_response) request = self.prepare_request_mock( 'body', extra_headers={ 'HTTP_X_FI_WARE_OAUTH_GET_PARAMETER': 'access_token_id', }) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 200) new_url = self.read_response(response) self.assertEqual( new_url, 'http://example.com/path?access_token_id=' + TEST_TOKEN)
def test_fiware_idm_processor_body(self): def echo_response(method, url, *args, **kwargs): self.assertEqual(int(kwargs['headers']['content-length']), 99) # Content Length after token injection return {'content': kwargs['data'].read()} self.network._servers['http']['example.com'].add_response( 'POST', '/path', echo_response) request = self.prepare_request_mock( '{"token": "%token%"}', extra_headers={ 'HTTP_X_FI_WARE_OAUTH_TOKEN_BODY_PATTERN': '%token%', }) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 200) data = json.loads(self.read_response(response)) self.assertEqual(data['token'], TEST_TOKEN)
def test_fiware_idm_processor_requires_valid_referer(self): self.network._servers['http']['example.com'].add_response( 'POST', '/path', self.echo_headers_response) proxied_url = reverse('wirecloud|proxy', kwargs={ 'protocol': 'http', 'domain': 'example.com', 'path': '/path' }) request = self.prepare_request_mock( '{}', extra_headers={ "HTTP_X_FI_WARE_OAUTH_HEADER_NAME": 'X-Auth-Token', }, referer='http://localhost' + proxied_url, user=self.admin_mock) response = proxy_request(request=request, protocol='http', domain='example.com', path='/path') self.assertEqual(response.status_code, 422) json.loads(self.read_response(response))