diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py index 11573815..4549669e 100644 --- a/glanceclient/common/http.py +++ b/glanceclient/common/http.py @@ -124,10 +124,6 @@ class HTTPClient(_BaseHTTPClient): self.session = requests.Session() self.session.headers["User-Agent"] = USER_AGENT - if self.auth_token: - self.session.headers["X-Auth-Token"] = encodeutils.safe_encode( - self.auth_token) - if self.language_header: self.session.headers["Accept-Language"] = self.language_header @@ -226,6 +222,10 @@ class HTTPClient(_BaseHTTPClient): data = self._set_common_request_kwargs(headers, kwargs) + # add identity header to the request + if not headers.get('X-Auth-Token'): + headers['X-Auth-Token'] = self.auth_token + if osprofiler_web: headers.update(osprofiler_web.get_trace_id_headers()) diff --git a/glanceclient/tests/unit/test_http.py b/glanceclient/tests/unit/test_http.py index c18660e1..2182f85d 100644 --- a/glanceclient/tests/unit/test_http.py +++ b/glanceclient/tests/unit/test_http.py @@ -210,14 +210,6 @@ class TestClient(testtools.TestCase): self.assertEqual(b"ni\xc3\xb1o", encoded[b"test"]) self.assertNotIn("none-val", encoded) - def test_auth_token_header_encoding(self): - # Tests that X-Auth-Token header is converted to ascii string, as - # httplib in python 2.6 won't do the conversion - value = u'ni\xf1o' - http_client_object = http.HTTPClient(self.endpoint, token=value) - self.assertEqual(b'ni\xc3\xb1o', - http_client_object.session.headers['X-Auth-Token']) - def test_raw_request(self): """Verify the path being used for HTTP requests reflects accurately.""" headers = {"Content-Type": "text/plain"} @@ -382,3 +374,26 @@ class TestClient(testtools.TestCase): self.assertThat(mock_log.call_args[0][0], matchers.Not(matchers.MatchesRegex(token_regex)), 'token found in LOG.debug parameter') + + def test_expired_token_has_changed(self): + # instantiate client with some token + fake_token = b'fake-token' + http_client = http.HTTPClient(self.endpoint, + token=fake_token) + path = '/v1/images/my-image' + self.mock.get(self.endpoint + path) + http_client.get(path) + headers = self.mock.last_request.headers + self.assertEqual(fake_token, headers['X-Auth-Token']) + # refresh the token + refreshed_token = b'refreshed-token' + http_client.auth_token = refreshed_token + http_client.get(path) + headers = self.mock.last_request.headers + self.assertEqual(refreshed_token, headers['X-Auth-Token']) + # regression check for bug 1448080 + unicode_token = u'ni\xf1o' + http_client.auth_token = unicode_token + http_client.get(path) + headers = self.mock.last_request.headers + self.assertEqual(b'ni\xc3\xb1o', headers['X-Auth-Token'])