diff --git a/cmd/cosign/cli/clean.go b/cmd/cosign/cli/clean.go index 7635e4889fa..c210cdda029 100644 --- a/cmd/cosign/cli/clean.go +++ b/cmd/cosign/cli/clean.go @@ -51,7 +51,7 @@ func Clean() *cobra.Command { func CleanCmd(ctx context.Context, regOpts options.RegistryOptions, cleanType, imageRef string, force bool) error { if !force { - ok, err := cosign.ConfirmPrompt(prompt(cleanType)) + ok, err := cosign.ConfirmPrompt(prompt(cleanType), true /*destructive*/) if err != nil { return err } diff --git a/cmd/cosign/cli/fulcio/fulcio.go b/cmd/cosign/cli/fulcio/fulcio.go index 78f33e9bda6..3bd039a22f0 100644 --- a/cmd/cosign/cli/fulcio/fulcio.go +++ b/cmd/cosign/cli/fulcio/fulcio.go @@ -155,7 +155,7 @@ func NewSigner(ctx context.Context, ko options.KeyOpts) (*Signer, error) { fmt.Fprintln(os.Stderr, "Non-interactive mode detected, using device flow.") flow = FlowDevice default: - ok, err := cosign.ConfirmPrompt(PrivacyStatementConfirmation) + ok, err := cosign.ConfirmPrompt(PrivacyStatementConfirmation, false /*destructive*/) if err != nil { return nil, err } diff --git a/cmd/cosign/cli/options/root.go b/cmd/cosign/cli/options/root.go index a21b9ade26c..d8e3e99bee5 100644 --- a/cmd/cosign/cli/options/root.go +++ b/cmd/cosign/cli/options/root.go @@ -46,5 +46,5 @@ func (o *RootOptions) AddFlags(cmd *cobra.Command) { "timeout for commands") cmd.PersistentFlags().BoolVarP(&o.SkipConfirmation, "yes", "y", false, - "skip confirmation prompts") + "skip confirmation prompts for non-destructive operations") } diff --git a/pkg/cosign/common.go b/pkg/cosign/common.go index 198364873ae..cb936033e57 100644 --- a/pkg/cosign/common.go +++ b/pkg/cosign/common.go @@ -43,8 +43,11 @@ func FileExists(filename string) bool { return !info.IsDir() } -func ConfirmPrompt(msg string) (bool, error) { - if skipConfirmation { +// ConfirmPrompt prompts the user for confirmation for an action. Supports skipping +// the confirmation prompt when the global skipConfirmation is set, and when the +// action is non-destructive. +func ConfirmPrompt(msg string, destructive bool) (bool, error) { + if skipConfirmation && !destructive { return skipConfirmation, nil }