Skip to content

Commit 16247df

Browse files
committed
Merge pull request #806 from docker/803-urlsafe-b64
Use url-safe base64 when encoding auth header
2 parents f479720 + 3c4e5db commit 16247df

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

docker/auth/auth.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def decode_auth(auth):
102102

103103
def encode_header(auth):
104104
auth_json = json.dumps(auth).encode('ascii')
105-
return base64.b64encode(auth_json)
105+
return base64.urlsafe_b64encode(auth_json)
106106

107107

108108
def parse_auth(entries):

tests/utils_test.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
exclude_paths, convert_volume_binds, decode_json_header
2020
)
2121
from docker.utils.ports import build_port_bindings, split_port
22-
from docker.auth import resolve_repository_name, resolve_authconfig
22+
from docker.auth import (
23+
resolve_repository_name, resolve_authconfig, encode_header
24+
)
2325

2426
from . import base
2527
from .helpers import make_tree
@@ -376,12 +378,21 @@ def test_decode_json_header(self):
376378
obj = {'a': 'b', 'c': 1}
377379
data = None
378380
if six.PY3:
379-
data = base64.b64encode(bytes(json.dumps(obj), 'utf-8'))
381+
data = base64.urlsafe_b64encode(bytes(json.dumps(obj), 'utf-8'))
380382
else:
381-
data = base64.b64encode(json.dumps(obj))
383+
data = base64.urlsafe_b64encode(json.dumps(obj))
382384
decoded_data = decode_json_header(data)
383385
self.assertEqual(obj, decoded_data)
384386

387+
def test_803_urlsafe_encode(self):
388+
auth_data = {
389+
'username': 'root',
390+
'password': 'GR?XGR?XGR?XGR?X'
391+
}
392+
encoded = encode_header(auth_data)
393+
assert b'/' not in encoded
394+
assert b'_' in encoded
395+
385396
def test_resolve_repository_name(self):
386397
# docker hub library image
387398
self.assertEqual(

0 commit comments

Comments
 (0)