Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 5 additions & 33 deletions cmd/notation/cert/generateTest.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ import (
"github.com/notaryproject/notation-go/dir"
"github.com/notaryproject/notation/cmd/notation/internal/truststore"
"github.com/notaryproject/notation/internal/osutil"
"github.com/notaryproject/notation/internal/slices"
"github.com/notaryproject/notation/pkg/configutil"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
Expand Down Expand Up @@ -111,21 +109,11 @@ func generateTestCert(opts *certGenerateTestOpts) error {
}
fmt.Println("wrote certificate:", certPath)

// update config
signingKeys, err := configutil.LoadSigningkeysOnce()
if err != nil {
return err
}
isDefault := opts.isDefault
keySuite := config.KeySuite{
Name: name,
X509KeyPair: &config.X509KeyPair{
KeyPath: keyPath,
CertificatePath: certPath,
},
// update signingkeys.json config
exec := func(s *config.SigningKeys) error {
return s.Add(opts.name, keyPath, certPath, opts.isDefault)
}
err = addKeyToSigningKeys(signingKeys, keySuite, isDefault)
if err != nil {
if err := config.LoadExecSaveSigningKeys(exec); err != nil {
return err
}

Expand All @@ -134,14 +122,9 @@ func generateTestCert(opts *certGenerateTestOpts) error {
return err
}

// Save to the SigningKeys.json
if err := signingKeys.Save(); err != nil {
return err
}

// write out
fmt.Printf("%s: added to the key list\n", name)
if isDefault {
if opts.isDefault {
fmt.Printf("%s: mark as default signing key\n", name)
}
return nil
Expand Down Expand Up @@ -169,14 +152,3 @@ func generateSelfSignedCert(privateKey *rsa.PrivateKey, name string) (testhelper
rsaCertTuple := testhelper.GetRSASelfSignedCertTupleWithPK(privateKey, name)
return rsaCertTuple, generateCertPEM(&rsaCertTuple), nil
}

func addKeyToSigningKeys(signingKeys *config.SigningKeys, key config.KeySuite, markDefault bool) error {
if slices.Contains(signingKeys.Keys, key.Name) {
return fmt.Errorf("signing key with name %q already exists", key.Name)
}
signingKeys.Keys = append(signingKeys.Keys, key)
if markDefault {
signingKeys.Default = key.Name
}
return nil
}
131 changes: 27 additions & 104 deletions cmd/notation/key.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,12 @@ import (
"context"
"errors"
"fmt"
"github.com/notaryproject/notation-go/config"
"os"

"github.com/notaryproject/notation-go/config"
"github.com/notaryproject/notation-go/dir"
"github.com/notaryproject/notation-go/log"
"github.com/notaryproject/notation-go/plugin"
"github.com/notaryproject/notation/internal/cmd"
"github.com/notaryproject/notation/internal/ioutil"
"github.com/notaryproject/notation/internal/slices"
"github.com/notaryproject/notation/pkg/configutil"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
Expand Down Expand Up @@ -166,120 +162,55 @@ func keyDeleteCommand(opts *keyDeleteOpts) *cobra.Command {
func addKey(ctx context.Context, opts *keyAddOpts) error {
// set log level
ctx = opts.LoggingFlagOpts.SetLoggerLevel(ctx)
logger := log.GetLogger(ctx)

signingKeys, err := configutil.LoadSigningkeysOnce()
pluginConfig, err := cmd.ParseFlagPluginConfig(opts.pluginConfig)
if err != nil {
return err
}
var key config.KeySuite
name := opts.name
if name == "" {
return errors.New("key name cannot be empty")
}
pluginName := opts.plugin
if pluginName != "" {
logger.Debugf("Adding key with name %v and plugin name %v", name, pluginName)
key, err = addExternalKey(ctx, opts, pluginName, name)
if err != nil {
return err
}
} else {
return errors.New("plugin name cannot be empty")
}

isDefault := opts.isDefault
err = addKeyCore(signingKeys, key, isDefault)
if err != nil {
return err
// core process
exec := func(s *config.SigningKeys) error {
return s.AddPlugin(ctx, opts.name, opts.id, opts.plugin, pluginConfig, opts.isDefault)
}

if err := signingKeys.Save(); err != nil {
if err := config.LoadExecSaveSigningKeys(exec); err != nil {
return err
}

// write out
logger.Debugf("Added key with name %s - {%+v}", key.Name, key.ExternalKey)
if isDefault {
fmt.Printf("%s: marked as default\n", key.Name)
if opts.isDefault {
fmt.Printf("%s: marked as default\n", opts.name)
} else {
fmt.Println(key.Name)
fmt.Println(opts.name)
}

return nil
}

func addExternalKey(ctx context.Context, opts *keyAddOpts, pluginName, keyName string) (config.KeySuite, error) {
id := opts.id
if id == "" {
return config.KeySuite{}, errors.New("missing key id")
}
mgr := plugin.NewCLIManager(dir.PluginFS())
// Check existence of plugin with name pluginName
_, err := mgr.Get(ctx, pluginName)
if err != nil {
return config.KeySuite{}, err
}
pluginConfig, err := cmd.ParseFlagPluginConfig(opts.pluginConfig)
if err != nil {
return config.KeySuite{}, err
}

return config.KeySuite{
Name: keyName,
ExternalKey: &config.ExternalKey{
ID: id,
PluginName: pluginName,
PluginConfig: pluginConfig,
},
}, nil
}

func addKeyCore(signingKeys *config.SigningKeys, key config.KeySuite, markDefault bool) error {
if slices.Contains(signingKeys.Keys, key.Name) {
return fmt.Errorf("signing key with name %q already exists", key.Name)
}
signingKeys.Keys = append(signingKeys.Keys, key)
if markDefault {
signingKeys.Default = key.Name
}
return nil
}

func updateKey(ctx context.Context, opts *keyUpdateOpts) error {
// set log level
ctx = opts.LoggingFlagOpts.SetLoggerLevel(ctx)
logger := log.GetLogger(ctx)

// initialize
name := opts.name
// core process
signingKeys, err := configutil.LoadSigningkeysOnce()
if err != nil {
return err
}
if !slices.Contains(signingKeys.Keys, name) {
return errors.New(name + ": not found")
}
if !opts.isDefault {
logger.Warn("--default flag is not set, command did not take effect")
return nil
}
if signingKeys.Default != name {
signingKeys.Default = name
if err := signingKeys.Save(); err != nil {
return err
}

// core process
exec := func(s *config.SigningKeys) error {
return s.UpdateDefault(opts.name)
}
if err := config.LoadExecSaveSigningKeys(exec); err != nil {
return err
}

// write out
fmt.Printf("%s: marked as default\n", name)
fmt.Printf("%s: marked as default\n", opts.name)
return nil
}

func listKeys() error {
// core process
signingKeys, err := configutil.LoadSigningkeysOnce()
signingKeys, err := config.LoadSigningKeys()
if err != nil {
return err
}
Expand All @@ -294,26 +225,18 @@ func deleteKeys(ctx context.Context, opts *keyDeleteOpts) error {
logger := log.GetLogger(ctx)

// core process
signingKeys, err := configutil.LoadSigningkeysOnce()
if err != nil {
return err
}

prevDefault := signingKeys.Default
var deletedNames []string
for _, name := range opts.names {
idx := slices.Index(signingKeys.Keys, name)
if idx < 0 {
logger.Warnf("Key %s not found, command did not take effect", name)
return errors.New(name + ": not found")
}
signingKeys.Keys = slices.Delete(signingKeys.Keys, idx)
deletedNames = append(deletedNames, name)
if prevDefault == name {
signingKeys.Default = ""
var prevDefault string
exec := func(s *config.SigningKeys) error {
prevDefault = *s.Default
var err error
deletedNames, err = s.Remove(opts.names...)
if err != nil {
logger.Errorf("Keys deletion failed to complete with error: %v", err)
}
return err
}
if err := signingKeys.Save(); err != nil {
if err := config.LoadExecSaveSigningKeys(exec); err != nil {
return err
}

Expand Down
Binary file added cmd/notation/notation
Binary file not shown.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ go 1.19
require (
github.com/docker/docker-credential-helpers v0.7.0
github.com/notaryproject/notation-core-go v1.0.0-rc.1
github.com/notaryproject/notation-go v1.0.0-rc.1.0.20230202184312-32d23721c08f
github.com/notaryproject/notation-go v1.0.0-rc.1.0.20230203031935-510def1a3f48
github.com/opencontainers/go-digest v1.0.0
github.com/opencontainers/image-spec v1.1.0-rc2
github.com/sirupsen/logrus v1.9.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/notaryproject/notation-core-go v1.0.0-rc.1 h1:ACi0gr6mD1bzp9+gu3P0meJ/N6iWHlyM9zgtdnooNAA=
github.com/notaryproject/notation-core-go v1.0.0-rc.1/go.mod h1:n8Gbvl9sKa00KptkKEL5XKUyMTIALe74QipKauE2rj4=
github.com/notaryproject/notation-go v1.0.0-rc.1.0.20230202184312-32d23721c08f h1:gobhG+XfoLJE4mn1+PyKrrdl3Xx77c3EG3u8Jcosz4g=
github.com/notaryproject/notation-go v1.0.0-rc.1.0.20230202184312-32d23721c08f/go.mod h1:B/26FcjJ9GVXm1j7z+/pWKck80LdFi3KiX4Zu7gixB8=
github.com/notaryproject/notation-go v1.0.0-rc.1.0.20230203031935-510def1a3f48 h1:MHjaRqAn+uCBYkDuIGaVo91CnJY9MlTcZdYFfoE4yek=
github.com/notaryproject/notation-go v1.0.0-rc.1.0.20230203031935-510def1a3f48/go.mod h1:B/26FcjJ9GVXm1j7z+/pWKck80LdFi3KiX4Zu7gixB8=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034=
Expand Down
4 changes: 2 additions & 2 deletions internal/ioutil/print.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ func newTabWriter(w io.Writer) *tabwriter.Writer {
return tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
}

func PrintKeyMap(w io.Writer, target string, v []config.KeySuite) error {
func PrintKeyMap(w io.Writer, target *string, v []config.KeySuite) error {
tw := newTabWriter(w)
fmt.Fprintln(tw, "NAME\tKEY PATH\tCERTIFICATE PATH\tID\tPLUGIN NAME\t")
for _, key := range v {
name := key.Name
if key.Name == target {
if target != nil && key.Name == *target {
name = "* " + name
}
kp := key.X509KeyPair
Expand Down
27 changes: 0 additions & 27 deletions internal/slices/slices.go

This file was deleted.

65 changes: 0 additions & 65 deletions internal/slices/slices_test.go

This file was deleted.

Loading