Kaydet (Commit) 1e939be5 authored tarafından Joffrey F's avatar Joffrey F Kaydeden (comit) GitHub

Merge pull request #1210 from docker/identity-token-support

Add support for identity tokens in config file
...@@ -174,6 +174,15 @@ def parse_auth(entries, raise_on_error=False): ...@@ -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): ...@@ -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): ...@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment