diff options
| author | Aanand Prasad <aanand.prasad@gmail.com> | 2015-02-26 13:56:11 +0000 |
|---|---|---|
| committer | Aanand Prasad <aanand.prasad@gmail.com> | 2015-02-27 13:10:20 +0000 |
| commit | b1a858a14ddf7d49ab46209d420c0e281125ce6a (patch) | |
| tree | f9c91ef0a051a673c02c8dd2d937f376547cad2e /docker/auth | |
| parent | 5ce02b9f141c2ebe524946f2daeb518b86ce2efc (diff) | |
| download | docker-py-b1a858a14ddf7d49ab46209d420c0e281125ce6a.tar.gz | |
Update resolve_authconfig to bring it in line with Docker client
Instead of expanding the registry name we're looking for to a full URL,
strip entries in the authconfig down to just the hostname.
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
Diffstat (limited to 'docker/auth')
| -rw-r--r-- | docker/auth/auth.py | 46 |
1 files changed, 19 insertions, 27 deletions
diff --git a/docker/auth/auth.py b/docker/auth/auth.py index 8693910..90c3a6f 100644 --- a/docker/auth/auth.py +++ b/docker/auth/auth.py @@ -26,14 +26,6 @@ INDEX_URL = 'https://index.docker.io/v1/' DOCKER_CONFIG_FILENAME = '.dockercfg' -def swap_protocol(url): - if url.startswith('http://'): - return url.replace('http://', 'https://', 1) - if url.startswith('https://'): - return url.replace('https://', 'http://', 1) - return url - - def expand_registry_url(hostname, insecure=False): if hostname.startswith('http:') or hostname.startswith('https:'): return hostname @@ -68,29 +60,29 @@ def resolve_repository_name(repo_name, insecure=False): def resolve_authconfig(authconfig, registry=None): - """Return the authentication data from the given auth configuration for a - specific registry. We'll do our best to infer the correct URL for the - registry, trying both http and https schemes. Returns an empty dictionnary - if no data exists.""" + """ + Returns the authentication data from the given auth configuration for a + specific registry. As with the Docker client, legacy entries in the config + with full URLs are stripped down to hostnames before checking for a match. + Returns None if no match was found. + """ # Default to the public index server - registry = registry or INDEX_URL - - # If it's not the index server there are three cases: - # - # 1. this is a full config url -> it should be used as is - # 2. it could be a full url, but with the wrong protocol - # 3. it can be the hostname optionally with a port - # - # as there is only one auth entry which is fully qualified we need to start - # parsing and matching - if '/v1/' not in registry: - registry = os.path.join(registry, 'v1/') - if not registry.startswith('http:') and not registry.startswith('https:'): - registry = 'https://' + registry + registry = convert_to_hostname(registry) if registry else INDEX_URL if registry in authconfig: return authconfig[registry] - return authconfig.get(swap_protocol(registry), None) + + for key, config in six.iteritems(authconfig): + if convert_to_hostname(key) == registry: + return config + + return None + + +def convert_to_hostname(url): + url = url.replace('http://', '') + url = url.replace('https://', '') + return url.split('/', 1)[0] def encode_auth(auth_info): |
