Skip to content

Commit b1c9204

Browse files
g-linvilleibuildthecloud
authored andcommitted
fix: credentials: only decrypt credentials in the context(s) needed
Signed-off-by: Grant Linville <[email protected]>
1 parent 164d6a4 commit b1c9204

File tree

2 files changed

+45
-27
lines changed

2 files changed

+45
-27
lines changed

pkg/credentials/store.go

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -139,36 +139,60 @@ func (s Store) List(_ context.Context) ([]Credential, error) {
139139
return nil, err
140140
}
141141

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)
147156
}
148157

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)
150164
if err != nil {
151165
return nil, err
152166
}
153167

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}
158170
} else {
159-
credsByContext[c.Context] = append(credsByContext[c.Context], c)
171+
serverAddressesByContext[ctx] = append(serverAddressesByContext[ctx], serverAddress)
160172
}
161173
}
162174

163-
if len(s.credCtxs) > 0 && s.credCtxs[0] == AllCredentialContexts {
164-
return allCreds, nil
165-
}
166-
167175
// Go through the contexts in reverse order so that higher priority contexts override lower ones.
168176
credsByName := make(map[string]Credential)
169177
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
172196
}
173197
}
174198

pkg/credentials/toolstore.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (h *toolCredentialStore) GetAll() (map[string]types.AuthConfig, error) {
5050
return nil, err
5151
}
5252

53-
newCredAddresses := make(map[string]string, len(serverAddresses))
53+
result = make(map[string]types.AuthConfig, len(serverAddresses))
5454
for serverAddress, val := range serverAddresses {
5555
// If the serverAddress contains a port, we need to put it back in the right spot.
5656
// For some reason, even when a credential is stored properly as http://hostname:8080///credctx,
@@ -80,16 +80,10 @@ func (h *toolCredentialStore) GetAll() (map[string]types.AuthConfig, error) {
8080
}
8181
}
8282

83-
newCredAddresses[toolNameWithCtx(toolName, ctx)] = val
84-
delete(serverAddresses, serverAddress)
85-
}
86-
87-
for serverAddress := range newCredAddresses {
88-
ac, err := h.Get(serverAddress)
89-
if err != nil {
90-
return nil, err
83+
result[toolNameWithCtx(toolName, ctx)] = types.AuthConfig{
84+
Username: val,
85+
ServerAddress: serverAddress,
9186
}
92-
result[serverAddress] = ac
9387
}
9488

9589
return result, nil

0 commit comments

Comments
 (0)