@@ -139,36 +139,60 @@ func (s Store) List(_ context.Context) ([]Credential, error) {
139
139
return nil , err
140
140
}
141
141
142
- credsByContext := make (map [string ][]Credential )
143
- allCreds := make ([]Credential , 0 )
144
- for serverAddress , authCfg := range list {
145
- if authCfg .ServerAddress == "" {
146
- authCfg .ServerAddress = serverAddress // Not sure why we have to do this, but we do.
142
+ if len (s .credCtxs ) > 0 && s .credCtxs [0 ] == AllCredentialContexts {
143
+ allCreds := make ([]Credential , len (list ))
144
+ for serverAddress := range list {
145
+ ac , err := store .Get (serverAddress )
146
+ if err != nil {
147
+ return nil , err
148
+ }
149
+ ac .ServerAddress = serverAddress
150
+
151
+ cred , err := credentialFromDockerAuthConfig (ac )
152
+ if err != nil {
153
+ return nil , err
154
+ }
155
+ allCreds = append (allCreds , cred )
147
156
}
148
157
149
- c , err := credentialFromDockerAuthConfig (authCfg )
158
+ return allCreds , nil
159
+ }
160
+
161
+ serverAddressesByContext := make (map [string ][]string )
162
+ for serverAddress := range list {
163
+ _ , ctx , err := toolNameAndCtxFromAddress (serverAddress )
150
164
if err != nil {
151
165
return nil , err
152
166
}
153
167
154
- allCreds = append (allCreds , c )
155
-
156
- if credsByContext [c .Context ] == nil {
157
- credsByContext [c .Context ] = []Credential {c }
168
+ if serverAddressesByContext [ctx ] == nil {
169
+ serverAddressesByContext [ctx ] = []string {serverAddress }
158
170
} else {
159
- credsByContext [ c . Context ] = append (credsByContext [ c . Context ], c )
171
+ serverAddressesByContext [ ctx ] = append (serverAddressesByContext [ ctx ], serverAddress )
160
172
}
161
173
}
162
174
163
- if len (s .credCtxs ) > 0 && s .credCtxs [0 ] == AllCredentialContexts {
164
- return allCreds , nil
165
- }
166
-
167
175
// Go through the contexts in reverse order so that higher priority contexts override lower ones.
168
176
credsByName := make (map [string ]Credential )
169
177
for i := len (s .credCtxs ) - 1 ; i >= 0 ; i -- {
170
- for _ , c := range credsByContext [s.credCtxs [i ]] {
171
- credsByName [c .ToolName ] = c
178
+ for _ , serverAddress := range serverAddressesByContext [s.credCtxs [i ]] {
179
+ ac , err := store .Get (serverAddress )
180
+ if err != nil {
181
+ return nil , err
182
+ }
183
+ ac .ServerAddress = serverAddress
184
+
185
+ cred , err := credentialFromDockerAuthConfig (ac )
186
+ if err != nil {
187
+ return nil , err
188
+ }
189
+
190
+ toolName , _ , err := toolNameAndCtxFromAddress (serverAddress )
191
+ if err != nil {
192
+ return nil , err
193
+ }
194
+
195
+ credsByName [toolName ] = cred
172
196
}
173
197
}
174
198
0 commit comments