diff options
author | Joffrey F <joffrey@docker.com> | 2015-10-09 12:01:16 -0700 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2015-10-09 12:23:58 -0700 |
commit | 3c4e5db113d8f460039a52a79b8e191a0dc1469e (patch) | |
tree | d1fcdf76ac59c8c2ecea36e4a725553b41dc7765 | |
parent | f479720d517a7db7f886916190b3032d29d18f10 (diff) | |
download | docker-py-803-urlsafe-b64.tar.gz |
Use url-safe base64 when encoding auth header803-urlsafe-b64
+ regression test
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r-- | docker/auth/auth.py | 2 | ||||
-rw-r--r-- | tests/utils_test.py | 17 |
2 files changed, 15 insertions, 4 deletions
diff --git a/docker/auth/auth.py b/docker/auth/auth.py index 366bc67..1ee9f81 100644 --- a/docker/auth/auth.py +++ b/docker/auth/auth.py @@ -102,7 +102,7 @@ def decode_auth(auth): def encode_header(auth): auth_json = json.dumps(auth).encode('ascii') - return base64.b64encode(auth_json) + return base64.urlsafe_b64encode(auth_json) def parse_auth(entries): diff --git a/tests/utils_test.py b/tests/utils_test.py index b1adde2..04183f9 100644 --- a/tests/utils_test.py +++ b/tests/utils_test.py @@ -19,7 +19,9 @@ from docker.utils import ( exclude_paths, convert_volume_binds, decode_json_header ) from docker.utils.ports import build_port_bindings, split_port -from docker.auth import resolve_repository_name, resolve_authconfig +from docker.auth import ( + resolve_repository_name, resolve_authconfig, encode_header +) from . import base from .helpers import make_tree @@ -376,12 +378,21 @@ class UtilsTest(base.BaseTestCase): obj = {'a': 'b', 'c': 1} data = None if six.PY3: - data = base64.b64encode(bytes(json.dumps(obj), 'utf-8')) + data = base64.urlsafe_b64encode(bytes(json.dumps(obj), 'utf-8')) else: - data = base64.b64encode(json.dumps(obj)) + data = base64.urlsafe_b64encode(json.dumps(obj)) decoded_data = decode_json_header(data) self.assertEqual(obj, decoded_data) + def test_803_urlsafe_encode(self): + auth_data = { + 'username': 'root', + 'password': 'GR?XGR?XGR?XGR?X' + } + encoded = encode_header(auth_data) + assert b'/' not in encoded + assert b'_' in encoded + def test_resolve_repository_name(self): # docker hub library image self.assertEqual( |