diff --git a/docker/auth.py b/docker/auth.py index 5f34ac08..6a07ea20 100644 --- a/docker/auth.py +++ b/docker/auth.py @@ -303,12 +303,14 @@ class AuthConfig(dict): auth_data[k] = self._resolve_authconfig_credstore( k, self.creds_store ) + auth_data[convert_to_hostname(k)] = auth_data[k] # credHelpers entries take priority over all others for reg, store_name in self.cred_helpers.items(): auth_data[reg] = self._resolve_authconfig_credstore( reg, store_name ) + auth_data[convert_to_hostname(reg)] = auth_data[reg] return auth_data diff --git a/tests/unit/auth_test.py b/tests/unit/auth_test.py index d46da503..aac89109 100644 --- a/tests/unit/auth_test.py +++ b/tests/unit/auth_test.py @@ -530,11 +530,21 @@ class CredstoreTest(unittest.TestCase): 'Password': 'izayoi', 'ServerAddress': 'https://gensokyo.jp/v2', }, + 'gensokyo.jp': { + 'Username': 'sakuya', + 'Password': 'izayoi', + 'ServerAddress': 'https://gensokyo.jp/v2', + }, 'https://default.com/v2': { 'Username': 'user', 'Password': 'hunter2', 'ServerAddress': 'https://default.com/v2', }, + 'default.com': { + 'Username': 'user', + 'Password': 'hunter2', + 'ServerAddress': 'https://default.com/v2', + }, } def test_get_all_credentials_with_empty_credhelper(self): @@ -548,11 +558,21 @@ class CredstoreTest(unittest.TestCase): 'Password': 'izayoi', 'ServerAddress': 'https://gensokyo.jp/v2', }, + 'gensokyo.jp': { + 'Username': 'sakuya', + 'Password': 'izayoi', + 'ServerAddress': 'https://gensokyo.jp/v2', + }, 'https://default.com/v2': { 'Username': 'user', 'Password': 'hunter2', 'ServerAddress': 'https://default.com/v2', }, + 'default.com': { + 'Username': 'user', + 'Password': 'hunter2', + 'ServerAddress': 'https://default.com/v2', + }, 'registry1.io': None, } @@ -571,11 +591,21 @@ class CredstoreTest(unittest.TestCase): 'Password': 'izayoi', 'ServerAddress': 'https://gensokyo.jp/v2', }, + 'gensokyo.jp': { + 'Username': 'sakuya', + 'Password': 'izayoi', + 'ServerAddress': 'https://gensokyo.jp/v2', + }, 'https://default.com/v2': { 'Username': 'user', 'Password': 'hunter2', 'ServerAddress': 'https://default.com/v2', }, + 'default.com': { + 'Username': 'user', + 'Password': 'hunter2', + 'ServerAddress': 'https://default.com/v2', + }, } def test_get_all_credentials_with_auths_entries(self): @@ -591,11 +621,21 @@ class CredstoreTest(unittest.TestCase): 'Password': 'izayoi', 'ServerAddress': 'https://gensokyo.jp/v2', }, + 'gensokyo.jp': { + 'Username': 'sakuya', + 'Password': 'izayoi', + 'ServerAddress': 'https://gensokyo.jp/v2', + }, 'https://default.com/v2': { 'Username': 'user', 'Password': 'hunter2', 'ServerAddress': 'https://default.com/v2', }, + 'default.com': { + 'Username': 'user', + 'Password': 'hunter2', + 'ServerAddress': 'https://default.com/v2', + }, 'registry1.io': { 'ServerAddress': 'registry1.io', 'Username': 'reimu', @@ -603,6 +643,62 @@ class CredstoreTest(unittest.TestCase): }, } + def test_get_all_credentials_with_empty_auths_entry(self): + self.authconfig.add_auth('default.com', {}) + + assert self.authconfig.get_all_credentials() == { + 'https://gensokyo.jp/v2': { + 'Username': 'sakuya', + 'Password': 'izayoi', + 'ServerAddress': 'https://gensokyo.jp/v2', + }, + 'gensokyo.jp': { + 'Username': 'sakuya', + 'Password': 'izayoi', + 'ServerAddress': 'https://gensokyo.jp/v2', + }, + 'https://default.com/v2': { + 'Username': 'user', + 'Password': 'hunter2', + 'ServerAddress': 'https://default.com/v2', + }, + 'default.com': { + 'Username': 'user', + 'Password': 'hunter2', + 'ServerAddress': 'https://default.com/v2', + }, + } + + def test_get_all_credentials_credstore_overrides_auth_entry(self): + self.authconfig.add_auth('default.com', { + 'Username': 'shouldnotsee', + 'Password': 'thisentry', + 'ServerAddress': 'https://default.com/v2', + }) + + assert self.authconfig.get_all_credentials() == { + 'https://gensokyo.jp/v2': { + 'Username': 'sakuya', + 'Password': 'izayoi', + 'ServerAddress': 'https://gensokyo.jp/v2', + }, + 'gensokyo.jp': { + 'Username': 'sakuya', + 'Password': 'izayoi', + 'ServerAddress': 'https://gensokyo.jp/v2', + }, + 'https://default.com/v2': { + 'Username': 'user', + 'Password': 'hunter2', + 'ServerAddress': 'https://default.com/v2', + }, + 'default.com': { + 'Username': 'user', + 'Password': 'hunter2', + 'ServerAddress': 'https://default.com/v2', + }, + } + def test_get_all_credentials_helpers_override_default(self): self.authconfig['credHelpers'] = { 'https://default.com/v2': 'truesecret', @@ -616,11 +712,21 @@ class CredstoreTest(unittest.TestCase): 'Password': 'izayoi', 'ServerAddress': 'https://gensokyo.jp/v2', }, + 'gensokyo.jp': { + 'Username': 'sakuya', + 'Password': 'izayoi', + 'ServerAddress': 'https://gensokyo.jp/v2', + }, 'https://default.com/v2': { 'Username': 'reimu', 'Password': 'hakurei', 'ServerAddress': 'https://default.com/v2', }, + 'default.com': { + 'Username': 'reimu', + 'Password': 'hakurei', + 'ServerAddress': 'https://default.com/v2', + }, } def test_get_all_credentials_3_sources(self): @@ -642,11 +748,21 @@ class CredstoreTest(unittest.TestCase): 'Password': 'izayoi', 'ServerAddress': 'https://gensokyo.jp/v2', }, + 'gensokyo.jp': { + 'Username': 'sakuya', + 'Password': 'izayoi', + 'ServerAddress': 'https://gensokyo.jp/v2', + }, 'https://default.com/v2': { 'Username': 'user', 'Password': 'hunter2', 'ServerAddress': 'https://default.com/v2', }, + 'default.com': { + 'Username': 'user', + 'Password': 'hunter2', + 'ServerAddress': 'https://default.com/v2', + }, 'registry1.io': { 'ServerAddress': 'registry1.io', 'Username': 'reimu',