Skip to content

Commit f1e307e

Browse files
committed
change image for f in credentialsProvider, print image on credential prompt
Signed-off-by: David Fridrich <[email protected]>
1 parent c95f77e commit f1e307e

File tree

9 files changed

+43
-40
lines changed

9 files changed

+43
-40
lines changed

cmd/prompt/prompt.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ import (
1313

1414
"knative.dev/func/pkg/docker"
1515
"knative.dev/func/pkg/docker/creds"
16+
fn "knative.dev/func/pkg/functions"
1617
)
1718

18-
func NewPromptForCredentials(in io.Reader, out, errOut io.Writer) func(registry string) (docker.Credentials, error) {
19+
func NewPromptForCredentials(in io.Reader, out, errOut io.Writer) func(f fn.Function, registry string) (docker.Credentials, error) {
1920
firstTime := true
20-
return func(registry string) (docker.Credentials, error) {
21+
return func(f fn.Function, registry string) (docker.Credentials, error) {
2122
var result docker.Credentials
22-
2323
if firstTime {
2424
firstTime = false
25-
fmt.Fprintf(out, "Please provide credentials for image registry (%s).\n", registry)
25+
fmt.Fprintf(out, "Please provide credentials for image '%s'.\n", f.Build.Image)
2626
} else {
27-
fmt.Fprintln(out, "Incorrect credentials, please try again.")
27+
fmt.Fprintf(out, "Incorrect credentials for image '%s'. Please make sure the image name is correct and try again.\n", f.Build.Image)
2828
}
2929

3030
var qs = []*survey.Question{

cmd/prompt/prompt_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/hinshun/vt10x"
1515

1616
"knative.dev/func/pkg/docker"
17+
fn "knative.dev/func/pkg/functions"
1718
)
1819

1920
const (
@@ -71,7 +72,7 @@ func Test_NewPromptForCredentials(t *testing.T) {
7172
for _, tt := range tests {
7273
t.Run(tt.name, func(t *testing.T) {
7374
credPrompt := NewPromptForCredentials(tt.in, tt.out, tt.errOut)
74-
cred, err := credPrompt("example.com")
75+
cred, err := credPrompt(fn.Function{}, "example.com")
7576
if err != nil {
7677
t.Fatal(err)
7778
}

pkg/docker/creds/credentials.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ import (
2323
"github.com/google/go-containerregistry/pkg/v1/remote/transport"
2424

2525
"knative.dev/func/pkg/docker"
26+
fn "knative.dev/func/pkg/functions"
2627
)
2728

28-
type CredentialsCallback func(registry string) (docker.Credentials, error)
29+
type CredentialsCallback func(f fn.Function, registry string) (docker.Credentials, error)
2930

3031
var ErrUnauthorized = errors.New("bad credentials")
3132

@@ -175,7 +176,7 @@ func NewCredentialsProvider(configPath string, opts ...Opt) docker.CredentialsPr
175176

176177
if _, err := os.Stat(c.authFilePath); err == nil {
177178
defaultCredentialLoaders = append(defaultCredentialLoaders,
178-
func(registry string) (docker.Credentials, error) {
179+
func(f fn.Function, registry string) (docker.Credentials, error) {
179180
return getCredentialsByCredentialHelper(c.authFilePath, registry)
180181
})
181182
}
@@ -185,12 +186,12 @@ func NewCredentialsProvider(configPath string, opts ...Opt) docker.CredentialsPr
185186
if err == nil {
186187
dockerConfigPath := filepath.Join(home, ".docker", "config.json")
187188
defaultCredentialLoaders = append(defaultCredentialLoaders,
188-
func(registry string) (docker.Credentials, error) {
189+
func(f fn.Function, registry string) (docker.Credentials, error) {
189190
return getCredentialsByCredentialHelper(dockerConfigPath, registry)
190191
})
191192
}
192193
defaultCredentialLoaders = append(defaultCredentialLoaders,
193-
func(registry string) (docker.Credentials, error) {
194+
func(f fn.Function, registry string) (docker.Credentials, error) {
194195
creds, err := dockerConfig.GetCredentials(sys, registry)
195196
if err != nil {
196197
return docker.Credentials{}, err
@@ -204,7 +205,7 @@ func NewCredentialsProvider(configPath string, opts ...Opt) docker.CredentialsPr
204205
}, nil
205206
})
206207
defaultCredentialLoaders = append(defaultCredentialLoaders,
207-
func(registry string) (docker.Credentials, error) {
208+
func(f fn.Function, registry string) (docker.Credentials, error) {
208209
// Fallback onto default docker config locations
209210
emptySys := &containersTypes.SystemContext{}
210211
creds, err := dockerConfig.GetCredentials(emptySys, registry)
@@ -217,7 +218,7 @@ func NewCredentialsProvider(configPath string, opts ...Opt) docker.CredentialsPr
217218
}, nil
218219
})
219220
defaultCredentialLoaders = append(defaultCredentialLoaders,
220-
func(registry string) (docker.Credentials, error) { // empty credentials provider for unsecured registries
221+
func(f fn.Function, registry string) (docker.Credentials, error) { // empty credentials provider for unsecured registries
221222
return docker.Credentials{}, nil
222223
})
223224

@@ -226,11 +227,11 @@ func NewCredentialsProvider(configPath string, opts ...Opt) docker.CredentialsPr
226227
return c.getCredentials
227228
}
228229

229-
func (c *credentialsProvider) getCredentials(ctx context.Context, image string) (docker.Credentials, error) {
230+
func (c *credentialsProvider) getCredentials(ctx context.Context, f fn.Function) (docker.Credentials, error) {
230231
var err error
231232
result := docker.Credentials{}
232233

233-
ref, err := name.ParseReference(image)
234+
ref, err := name.ParseReference(f.Build.Image)
234235
if err != nil {
235236
return docker.Credentials{}, fmt.Errorf("cannot parse the image reference: %w", err)
236237
}
@@ -239,16 +240,15 @@ func (c *credentialsProvider) getCredentials(ctx context.Context, image string)
239240

240241
for _, load := range c.credentialLoaders {
241242

242-
result, err = load(registry)
243+
result, err = load(f, registry)
243244

244245
if err != nil {
245246
if errors.Is(err, ErrCredentialsNotFound) {
246247
continue
247248
}
248249
return docker.Credentials{}, err
249250
}
250-
251-
err = c.verifyCredentials(ctx, image, result)
251+
err = c.verifyCredentials(ctx, f.Build.Image, result)
252252
if err == nil {
253253
return result, nil
254254
} else {
@@ -264,12 +264,12 @@ func (c *credentialsProvider) getCredentials(ctx context.Context, image string)
264264
}
265265

266266
for {
267-
result, err = c.promptForCredentials(registry)
267+
result, err = c.promptForCredentials(f, registry)
268268
if err != nil {
269269
return docker.Credentials{}, err
270270
}
271271

272-
err = c.verifyCredentials(ctx, image, result)
272+
err = c.verifyCredentials(ctx, f.Build.Image, result)
273273
if err == nil {
274274
err = setCredentialsByCredentialHelper(c.authFilePath, registry, result.Username, result.Password)
275275
if err != nil {
@@ -369,6 +369,7 @@ func setCredentialHelperToConfig(confFilePath, helper string) error {
369369
return nil
370370
}
371371

372+
// registry argument is just the registry part (eg. index.docker.io)
372373
func getCredentialsByCredentialHelper(confFilePath, registry string) (docker.Credentials, error) {
373374
result := docker.Credentials{}
374375

pkg/docker/creds/credentials_test.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131

3232
"knative.dev/func/pkg/docker"
3333
"knative.dev/func/pkg/docker/creds"
34+
"knative.dev/func/pkg/functions"
3435
. "knative.dev/func/pkg/testing"
3536
)
3637

@@ -434,7 +435,7 @@ func TestNewCredentialsProvider(t *testing.T) {
434435
creds.WithPromptForCredentials(tt.args.promptUser),
435436
creds.WithVerifyCredentials(tt.args.verifyCredentials),
436437
creds.WithAdditionalCredentialLoaders(tt.args.additionalLoaders...))
437-
got, err := credentialsProvider(context.Background(), tt.args.registry+"/someorg/someimage:sometag")
438+
got, err := credentialsProvider(context.Background(), functions.Function{Build: functions.BuildSpec{Image: tt.args.registry + "/someorg/someimage:sometag"}})
438439
if err != nil {
439440
t.Errorf("unexpected error: %v", err)
440441
return
@@ -456,7 +457,7 @@ func TestNewCredentialsProviderEmptyCreds(t *testing.T) {
456457
t.Fatal("unreachable")
457458
return nil
458459
}))
459-
c, err := credentialsProvider(context.Background(), "localhost:5555/someorg/someimage:sometag")
460+
c, err := credentialsProvider(context.Background(), functions.Function{Build: functions.BuildSpec{Image: "localhost:5555/someorg/someimage:sometag"}})
460461
if err != nil {
461462
t.Error(err)
462463
}
@@ -472,9 +473,9 @@ func TestCredentialsProviderSavingFromUserInput(t *testing.T) {
472473
setUpMockHelper("docker-credential-mock", helper)(t)
473474

474475
var pwdCbkInvocations int
475-
pwdCbk := func(r string) (Credentials, error) {
476+
pwdCbk := func(_ functions.Function, r string) (Credentials, error) {
476477
pwdCbkInvocations++
477-
return correctPwdCallback(r)
478+
return correctPwdCallback(functions.Function{}, r)
478479
}
479480

480481
chooseNoStore := func(available []string) (string, error) {
@@ -499,7 +500,7 @@ func TestCredentialsProviderSavingFromUserInput(t *testing.T) {
499500
creds.WithPromptForCredentials(pwdCbk),
500501
creds.WithVerifyCredentials(correctVerifyCbk),
501502
creds.WithPromptForCredentialStore(chooseNoStore))
502-
_, err := credentialsProvider(context.Background(), "docker.io/someorg/someimage:sometag")
503+
_, err := credentialsProvider(context.Background(), functions.Function{Build: functions.BuildSpec{Image: "docker.io/someorg/someimage:sometag"}})
503504
if err != nil {
504505
t.Errorf("unexpected error: %v", err)
505506
return
@@ -519,7 +520,7 @@ func TestCredentialsProviderSavingFromUserInput(t *testing.T) {
519520
creds.WithPromptForCredentials(pwdCbk),
520521
creds.WithVerifyCredentials(correctVerifyCbk),
521522
creds.WithPromptForCredentialStore(chooseMockStore))
522-
_, err = credentialsProvider(context.Background(), "docker.io/someorg/someimage:sometag")
523+
_, err = credentialsProvider(context.Background(), functions.Function{Build: functions.BuildSpec{Image: "docker.io/someorg/someimage:sometag"}})
523524
if err != nil {
524525
t.Errorf("unexpected error: %v", err)
525526
return
@@ -542,7 +543,7 @@ func TestCredentialsProviderSavingFromUserInput(t *testing.T) {
542543
creds.WithPromptForCredentials(pwdCbkThatShallNotBeCalled(t)),
543544
creds.WithVerifyCredentials(correctVerifyCbk),
544545
creds.WithPromptForCredentialStore(shallNotBeInvoked))
545-
_, err = credentialsProvider(context.Background(), "docker.io/someorg/someimage:sometag")
546+
_, err = credentialsProvider(context.Background(), functions.Function{Build: functions.BuildSpec{Image: "docker.io/someorg/someimage:sometag"}})
546547
if err != nil {
547548
t.Errorf("unexpected error: %v", err)
548549
return
@@ -606,7 +607,7 @@ func TestCredentialsWithoutHome(t *testing.T) {
606607
creds.WithVerifyCredentials(tt.args.verifyCredentials),
607608
)
608609

609-
got, err := credentialsProvider(context.Background(), tt.args.registry+"/someorg/someimage:sometag")
610+
got, err := credentialsProvider(context.Background(), functions.Function{Build: functions.BuildSpec{Image: tt.args.registry + "/someorg/someimage:sometag"}})
610611

611612
// ASSERT
612613
if err != nil {
@@ -766,7 +767,7 @@ func TestCredentialsHomePermissions(t *testing.T) {
766767
creds.WithVerifyCredentials(tt.args.verifyCredentials),
767768
)
768769

769-
got, err := credentialsProvider(context.Background(), tt.args.registry+"/someorg/someimage:sometag")
770+
got, err := credentialsProvider(context.Background(), functions.Function{Build: functions.BuildSpec{Image: tt.args.registry + "/someorg/someimage:sometag"}})
770771
if err != nil {
771772
t.Errorf("%v", err)
772773
return
@@ -861,27 +862,27 @@ func withPopulatedFuncAuthConfig(t *testing.T) {
861862

862863
func pwdCbkThatShallNotBeCalled(t *testing.T) creds.CredentialsCallback {
863864
t.Helper()
864-
return func(registry string) (Credentials, error) {
865+
return func(f functions.Function, registry string) (Credentials, error) {
865866
return Credentials{}, errors.New("this pwd cbk code shall not be called")
866867
}
867868
}
868869

869-
func pwdCbkFirstWrongThenCorrect(t *testing.T) func(registry string) (Credentials, error) {
870+
func pwdCbkFirstWrongThenCorrect(t *testing.T) func(f functions.Function, registry string) (Credentials, error) {
870871
t.Helper()
871872
var firstInvocation bool
872-
return func(registry string) (Credentials, error) {
873+
return func(f functions.Function, registry string) (Credentials, error) {
873874
if registry != "index.docker.io" && registry != "quay.io" {
874875
return Credentials{}, fmt.Errorf("unexpected registry: %s", registry)
875876
}
876877
if firstInvocation {
877878
firstInvocation = false
878879
return Credentials{Username: dockerIoUser, Password: "badPwd"}, nil
879880
}
880-
return correctPwdCallback(registry)
881+
return correctPwdCallback(functions.Function{}, registry)
881882
}
882883
}
883884

884-
func correctPwdCallback(registry string) (Credentials, error) {
885+
func correctPwdCallback(_ functions.Function, registry string) (Credentials, error) {
885886
if registry == "index.docker.io" {
886887
return Credentials{Username: dockerIoUser, Password: dockerIoUserPwd}, nil
887888
}

pkg/docker/pusher.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ type Credentials struct {
3838
Password string
3939
}
4040

41-
type CredentialsProvider func(ctx context.Context, image string) (Credentials, error)
41+
type CredentialsProvider func(ctx context.Context, f fn.Function) (Credentials, error)
4242

4343
// PusherDockerClient is sub-interface of client.CommonAPIClient required by pusher.
4444
type PusherDockerClient interface {
@@ -81,7 +81,7 @@ func WithVerbose(verbose bool) Opt {
8181
}
8282
}
8383

84-
func EmptyCredentialsProvider(ctx context.Context, registry string) (Credentials, error) {
84+
func EmptyCredentialsProvider(ctx context.Context, f fn.Function) (Credentials, error) {
8585
return Credentials{}, nil
8686
}
8787

@@ -113,7 +113,7 @@ func GetRegistry(img string) (string, error) {
113113

114114
// Push the image index of the function.
115115
func (n *Pusher) Push(ctx context.Context, f fn.Function) (string, error) {
116-
credentials, err := n.credentialsProvider(ctx, f.Build.Image)
116+
credentials, err := n.credentialsProvider(ctx, f)
117117
if err != nil {
118118
return "", fmt.Errorf("failed to get credentials: %w", err)
119119
}

pkg/docker/pusher_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ const (
8080
imageRepoDigest = "sha256:00af51d125f3092e157a7f8a717029412dc9d266c017e89cecdfeccb4cc3d7a7"
8181
)
8282

83-
var testCredProvider = docker.CredentialsProvider(func(ctx context.Context, registry string) (docker.Credentials, error) {
83+
var testCredProvider = docker.CredentialsProvider(func(ctx context.Context, f fn.Function) (docker.Credentials, error) {
8484
return docker.Credentials{
8585
Username: testUser,
8686
Password: testPwd,

pkg/k8s/openshift.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func GetOpenShiftDockerCredentialLoaders() []creds.CredentialsCallback {
114114
}
115115

116116
return []creds.CredentialsCallback{
117-
func(registry string) (docker.Credentials, error) {
117+
func(f fn.Function, registry string) (docker.Credentials, error) {
118118
if registry == openShiftRegistryHostPort {
119119
return credentials, nil
120120
}

pkg/pipelines/tekton/pipelines_pac_provider.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func (pp *PipelinesProvider) createClusterPACResources(ctx context.Context, f fn
182182
registry = authn.DefaultAuthKey
183183
}
184184

185-
creds, err := pp.credentialsProvider(ctx, img)
185+
creds, err := pp.credentialsProvider(ctx, f)
186186
if err != nil {
187187
return err
188188
}

pkg/pipelines/tekton/pipelines_provider.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func (pp *PipelinesProvider) Run(ctx context.Context, f fn.Function) (string, fn
182182
return "", f, fmt.Errorf("problem in resolving image registry name: %v", err)
183183
}
184184

185-
creds, err := pp.credentialsProvider(ctx, image)
185+
creds, err := pp.credentialsProvider(ctx, f)
186186
if err != nil {
187187
return "", f, err
188188
}

0 commit comments

Comments
 (0)