github.com/kubri/kubri@v0.5.1-0.20240317001612-bda2aaef967e/pkg/cmd/keys_import.go (about)

     1  package cmd
     2  
     3  import (
     4  	"os"
     5  
     6  	"github.com/spf13/cobra"
     7  
     8  	"github.com/kubri/kubri/pkg/crypto/dsa"
     9  	"github.com/kubri/kubri/pkg/crypto/ed25519"
    10  	"github.com/kubri/kubri/pkg/crypto/pgp"
    11  	"github.com/kubri/kubri/pkg/crypto/rsa"
    12  	"github.com/kubri/kubri/pkg/secret"
    13  )
    14  
    15  func keysImportCmd() *cobra.Command {
    16  	var force bool
    17  
    18  	cmd := &cobra.Command{
    19  		Use:       "import (dsa|ed25519|pgp|rsa) <path>",
    20  		Short:     "Import private keys",
    21  		Long:      "Import private keys for signing update packages. If keys already exist, this is a no-op.",
    22  		Aliases:   []string{"i"},
    23  		Args:      cobra.ExactArgs(2),
    24  		ValidArgs: []string{"dsa", "ed25519", "pgp", "rsa"},
    25  		RunE: func(_ *cobra.Command, args []string) error {
    26  			b, err := os.ReadFile(args[1])
    27  			if err != nil {
    28  				return err
    29  			}
    30  
    31  			switch args[0] {
    32  			case "dsa":
    33  				_, err = dsa.UnmarshalPrivateKey(b)
    34  			case "ed25519":
    35  				_, err = ed25519.UnmarshalPrivateKey(b)
    36  			case "pgp":
    37  				_, err = pgp.UnmarshalPrivateKey(b)
    38  			case "rsa":
    39  				_, err = rsa.UnmarshalPrivateKey(b)
    40  			}
    41  			if err != nil {
    42  				return err
    43  			}
    44  
    45  			key := args[0] + "_key"
    46  
    47  			if force {
    48  				_ = secret.Delete(key)
    49  			}
    50  
    51  			return secret.Put(key, b)
    52  		},
    53  	}
    54  
    55  	cmd.Flags().BoolVarP(&force, "force", "f", false, "overwrite existing key")
    56  
    57  	return cmd
    58  }