summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwangxiyuan <wangxiyuan@huawei.com>2018-07-26 11:31:08 +0800
committerBrian Rosmaita <rosmaita.fossdev@gmail.com>2018-07-26 14:08:06 +0000
commitf15d91d1c875ea6c012d377566292662f546aa3d (patch)
treef5020ceeb35f3cd5e43c955cc7c4cc9ee1f36c3c
parent2c26f2748f433fbb510715532b45973768bf7483 (diff)
downloadpython-glanceclient-f15d91d1c875ea6c012d377566292662f546aa3d.tar.gz
Skip quote '=' for token header
If the token is encoded by base64, it may contain '=' char as well. We should skip quoting it. Change-Id: I1ca63d251fa366f0e8e58128d45b729a2489b65c Partial-Bug: #1783290 (cherry picked from commit eba4bb06d9aeaaf18a7e393ae8c03d47bd052f20)
-rw-r--r--glanceclient/common/http.py2
-rw-r--r--glanceclient/tests/unit/test_http.py7
2 files changed, 5 insertions, 4 deletions
diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py
index b5bea8a..a5fb153 100644
--- a/glanceclient/common/http.py
+++ b/glanceclient/common/http.py
@@ -66,7 +66,7 @@ def encode_headers(headers):
for h, v in headers.items():
if v is not None:
# if the item is token, do not quote '+' as well.
- safe = '+/' if h in TOKEN_HEADERS else '/'
+ safe = '=+/' if h in TOKEN_HEADERS else '/'
if six.PY2:
# incoming items may be unicode, so get them into something
# the py2 version of urllib can handle before percent encoding
diff --git a/glanceclient/tests/unit/test_http.py b/glanceclient/tests/unit/test_http.py
index cdc1895..6eee005 100644
--- a/glanceclient/tests/unit/test_http.py
+++ b/glanceclient/tests/unit/test_http.py
@@ -467,11 +467,12 @@ class TestClient(testtools.TestCase):
headers = self.mock.last_request.headers
self.assertEqual(refreshed_token, headers['X-Auth-Token'])
# regression check for bug 1448080
- unicode_token = u'ni\xf1o+'
+ unicode_token = u'ni\xf1o+=='
http_client.auth_token = unicode_token
http_client.get(path)
headers = self.mock.last_request.headers
# Bug #1766235: According to RFC 8187, headers must be
# encoded as 7-bit ASCII, so expect to see only displayable
- # chars in percent-encoding. The '+' char will be not be changed.
- self.assertEqual(b'ni%C3%B1o+', headers['X-Auth-Token'])
+ # chars in percent-encoding. The '+' and '= 'chars will not
+ # be changed.
+ self.assertEqual(b'ni%C3%B1o+==', headers['X-Auth-Token'])