Skip to content

Commit

Permalink
fix: rouge options surrounding hard PKI
Browse files Browse the repository at this point in the history
Signed-off-by: Christopher Phillips <christopher.phillips@anchore.com>
  • Loading branch information
spiffcs committed Jan 20, 2023
1 parent 738b869 commit f5797e3
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 6 deletions.
10 changes: 8 additions & 2 deletions cmd/syft/cli/attest.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const (
)

//nolint:dupl
func Attest(v *viper.Viper, app *config.Application, ro *options.RootOptions, po *options.PackagesOptions) *cobra.Command {
func Attest(v *viper.Viper, app *config.Application, ro *options.RootOptions, po *options.PackagesOptions, ao *options.AttestOptions) *cobra.Command {
cmd := &cobra.Command{
Use: "attest --output [FORMAT] <IMAGE>",
Short: "Generate an SBOM as an attestation for the given [SOURCE] container image",
Expand Down Expand Up @@ -50,11 +50,17 @@ func Attest(v *viper.Viper, app *config.Application, ro *options.RootOptions, po
},
}

// syft attest is an enhancment of the packages command, so it should have the same flags
// syft attest is an enhancement of the packages command, so it should have the same flags
err := po.AddFlags(cmd, v)
if err != nil {
log.Fatal(err)
}

// syft attest has its own options not included as part of the packages command
err = ao.AddFlags(cmd, v)
if err != nil {
log.Fatal(err)
}

return cmd
}
11 changes: 10 additions & 1 deletion cmd/syft/cli/attest/attest.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,18 @@ func execWorker(app *config.Application, si source.Input, writer sbom.Writer) <-
}

args := []string{"attest", si.UserInput, "--type", "custom", "--predicate", f.Name()}
if app.Attest.Key != "" {
args = append(args, "--key", app.Attest.Key)
}

execCmd := exec.Command(cmd, args...)
execCmd.Env = os.Environ()
execCmd.Env = append(execCmd.Env, "COSIGN_EXPERIMENTAL=1")
if app.Attest.Key != "" {
execCmd.Env = append(execCmd.Env, fmt.Sprintf("COSIGN_PASSWORD=%s", app.Attest.Password))
} else {
// no key provided, use cosign's keyless mode
execCmd.Env = append(execCmd.Env, "COSIGN_EXPERIMENTAL=1")
}

// bus adapter for ui to hook into stdout via an os pipe
r, w, err := os.Pipe()
Expand Down
3 changes: 2 additions & 1 deletion cmd/syft/cli/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,13 @@ func New() (*cobra.Command, error) {
// we also need the command to have information about the `root` options because of this alias
ro := &options.RootOptions{}
po := &options.PackagesOptions{}
ao := &options.AttestOptions{}
packagesCmd := Packages(v, app, ro, po)

// root options are also passed to the attestCmd so that a user provided config location can be discovered
poweruserCmd := PowerUser(v, app, ro)
convertCmd := Convert(v, app, ro, po)
attestCmd := Attest(v, app, ro, po)
attestCmd := Attest(v, app, ro, po, ao)

// rootCmd is currently an alias for the packages command
rootCmd := &cobra.Command{
Expand Down
6 changes: 4 additions & 2 deletions internal/config/attest.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ package config
import "github.com/spf13/viper"

type attest struct {
key string `yaml:"key" json:"key" mapstructure:"key"`
Key string `yaml:"key" json:"key" mapstructure:"key"`
Password string `yaml:"password" json:"password" mapstructure:"password"`
}

func (cfg attest) loadDefaultValues(v *viper.Viper) {
v.SetDefault("attest.key", "key.pub")
v.SetDefault("attest.key", "")
v.SetDefault("attest.password", "")
}

0 comments on commit f5797e3

Please sign in to comment.