mirror of https://github.com/docker/docker-py.git
Add support for identity tokens in config file.
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
e4cf97bc7b
commit
06b6a62faa
|
@ -174,6 +174,15 @@ def parse_auth(entries, raise_on_error=False):
|
||||||
'Invalid configuration for registry {0}'.format(registry)
|
'Invalid configuration for registry {0}'.format(registry)
|
||||||
)
|
)
|
||||||
return {}
|
return {}
|
||||||
|
if 'identitytoken' in entry:
|
||||||
|
log.debug('Found an IdentityToken entry for registry {0}'.format(
|
||||||
|
registry
|
||||||
|
))
|
||||||
|
conf[registry] = {
|
||||||
|
'IdentityToken': entry['identitytoken']
|
||||||
|
}
|
||||||
|
continue # Other values are irrelevant if we have a token, skip.
|
||||||
|
|
||||||
if 'auth' not in entry:
|
if 'auth' not in entry:
|
||||||
# Starting with engine v1.11 (API 1.23), an empty dictionary is
|
# Starting with engine v1.11 (API 1.23), an empty dictionary is
|
||||||
# a valid value in the auths config.
|
# a valid value in the auths config.
|
||||||
|
@ -182,13 +191,15 @@ def parse_auth(entries, raise_on_error=False):
|
||||||
'Auth data for {0} is absent. Client might be using a '
|
'Auth data for {0} is absent. Client might be using a '
|
||||||
'credentials store instead.'
|
'credentials store instead.'
|
||||||
)
|
)
|
||||||
return {}
|
conf[registry] = {}
|
||||||
|
continue
|
||||||
|
|
||||||
username, password = decode_auth(entry['auth'])
|
username, password = decode_auth(entry['auth'])
|
||||||
log.debug(
|
log.debug(
|
||||||
'Found entry (registry={0}, username={1})'
|
'Found entry (registry={0}, username={1})'
|
||||||
.format(repr(registry), repr(username))
|
.format(repr(registry), repr(username))
|
||||||
)
|
)
|
||||||
|
|
||||||
conf[registry] = {
|
conf[registry] = {
|
||||||
'username': username,
|
'username': username,
|
||||||
'password': password,
|
'password': password,
|
||||||
|
|
|
@ -460,4 +460,28 @@ class LoadConfigTest(base.Cleanup, base.BaseTestCase):
|
||||||
json.dump(config, f)
|
json.dump(config, f)
|
||||||
|
|
||||||
cfg = auth.load_config(dockercfg_path)
|
cfg = auth.load_config(dockercfg_path)
|
||||||
assert cfg == {}
|
assert cfg == {'scarlet.net': {}}
|
||||||
|
|
||||||
|
def test_load_config_identity_token(self):
|
||||||
|
folder = tempfile.mkdtemp()
|
||||||
|
registry = 'scarlet.net'
|
||||||
|
token = '1ce1cebb-503e-7043-11aa-7feb8bd4a1ce'
|
||||||
|
self.addCleanup(shutil.rmtree, folder)
|
||||||
|
dockercfg_path = os.path.join(folder, 'config.json')
|
||||||
|
auth_entry = encode_auth({'username': 'sakuya'}).decode('ascii')
|
||||||
|
config = {
|
||||||
|
'auths': {
|
||||||
|
registry: {
|
||||||
|
'auth': auth_entry,
|
||||||
|
'identitytoken': token
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
with open(dockercfg_path, 'w') as f:
|
||||||
|
json.dump(config, f)
|
||||||
|
|
||||||
|
cfg = auth.load_config(dockercfg_path)
|
||||||
|
assert registry in cfg
|
||||||
|
cfg = cfg[registry]
|
||||||
|
assert 'IdentityToken' in cfg
|
||||||
|
assert cfg['IdentityToken'] == token
|
||||||
|
|
Loading…
Reference in New Issue