Update auth_token before sending request
Previously auth_token was initialized once in __init__ method. After that we stored token in session headers. So to refresh token users need to instantiate a new session inside http client or re-create client itself. In order to provide possibility to refresh token we need to add token header before sending the request. So users can just update auth_token attribute in the HTTPClient to refresh user token. Change-Id: Ifebe9011870bbddc46fc6d6a26563641d5559e97 Closes-Bug: #1563495
This commit is contained in:
@@ -124,10 +124,6 @@ class HTTPClient(_BaseHTTPClient):
|
|||||||
self.session = requests.Session()
|
self.session = requests.Session()
|
||||||
self.session.headers["User-Agent"] = USER_AGENT
|
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:
|
if self.language_header:
|
||||||
self.session.headers["Accept-Language"] = 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)
|
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:
|
if osprofiler_web:
|
||||||
headers.update(osprofiler_web.get_trace_id_headers())
|
headers.update(osprofiler_web.get_trace_id_headers())
|
||||||
|
|
||||||
|
|||||||
@@ -210,14 +210,6 @@ class TestClient(testtools.TestCase):
|
|||||||
self.assertEqual(b"ni\xc3\xb1o", encoded[b"test"])
|
self.assertEqual(b"ni\xc3\xb1o", encoded[b"test"])
|
||||||
self.assertNotIn("none-val", encoded)
|
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):
|
def test_raw_request(self):
|
||||||
"""Verify the path being used for HTTP requests reflects accurately."""
|
"""Verify the path being used for HTTP requests reflects accurately."""
|
||||||
headers = {"Content-Type": "text/plain"}
|
headers = {"Content-Type": "text/plain"}
|
||||||
@@ -382,3 +374,26 @@ class TestClient(testtools.TestCase):
|
|||||||
self.assertThat(mock_log.call_args[0][0],
|
self.assertThat(mock_log.call_args[0][0],
|
||||||
matchers.Not(matchers.MatchesRegex(token_regex)),
|
matchers.Not(matchers.MatchesRegex(token_regex)),
|
||||||
'token found in LOG.debug parameter')
|
'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'])
|
||||||
|
|||||||
Reference in New Issue
Block a user