Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
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)
Ejemplo n.º 4
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))
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
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))
Ejemplo n.º 7
0
    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))
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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)
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
    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))
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
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))
Ejemplo n.º 15
0
    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)
Ejemplo n.º 16
0
    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)
Ejemplo n.º 17
0
    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))