Add option to immediately export/backup generated signet
This commit is contained in:
parent
48163a56ce
commit
f91ea4bc19
2 changed files with 67 additions and 26 deletions
|
@ -12,7 +12,7 @@ import (
|
|||
)
|
||||
|
||||
//nolint:gocognit
|
||||
func newSignet(name, scheme string) (*jess.Signet, error) {
|
||||
func newSignet(name, scheme string, saveToTrustStore bool) (*jess.Signet, error) {
|
||||
// get name
|
||||
name = strings.TrimSpace(name)
|
||||
if name == "" {
|
||||
|
@ -110,28 +110,30 @@ func newSignet(name, scheme string) (*jess.Signet, error) {
|
|||
Created: time.Now(),
|
||||
}
|
||||
|
||||
// write signet
|
||||
err = trustStore.StoreSignet(signet)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if saveToTrustStore {
|
||||
// write signet
|
||||
err = trustStore.StoreSignet(signet)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// export as recipient
|
||||
switch scheme {
|
||||
case jess.SignetSchemePassword, jess.SignetSchemeKey:
|
||||
// is secret, no recipient
|
||||
default:
|
||||
rcpt, err := signet.AsRecipient()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = rcpt.StoreKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = trustStore.StoreSignet(rcpt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
// export as recipient
|
||||
switch scheme {
|
||||
case jess.SignetSchemePassword, jess.SignetSchemeKey:
|
||||
// is secret, no recipient
|
||||
default:
|
||||
rcpt, err := signet.AsRecipient()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = rcpt.StoreKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = trustStore.StoreSignet(rcpt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
|
@ -8,11 +10,13 @@ func init() {
|
|||
rootCmd.AddCommand(generateCmd)
|
||||
generateCmd.Flags().StringVarP(&generateFlagName, "name", "l", "", "specify signet name/label")
|
||||
generateCmd.Flags().StringVarP(&generateFlagScheme, "scheme", "t", "", "specify signet scheme/tool")
|
||||
generateCmd.Flags().BoolVarP(&generateFlagTextOnly, "textonly", "", false, "do not save to trust store and only output directly as text")
|
||||
}
|
||||
|
||||
var (
|
||||
generateFlagName string
|
||||
generateFlagScheme string
|
||||
generateFlagName string
|
||||
generateFlagScheme string
|
||||
generateFlagTextOnly bool
|
||||
|
||||
generateCmd = &cobra.Command{
|
||||
Use: "generate",
|
||||
|
@ -21,8 +25,43 @@ var (
|
|||
Args: cobra.NoArgs,
|
||||
PreRunE: requireTrustStore,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
_, err := newSignet(generateFlagName, generateFlagScheme)
|
||||
return err
|
||||
// Generate new signet
|
||||
signet, err := newSignet(generateFlagName, generateFlagScheme, !generateFlagTextOnly)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Output as text if not saved to trust store.
|
||||
if generateFlagTextOnly {
|
||||
// Make text backup.
|
||||
backup, err := signet.Backup(false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Convert to recipient and serialize key.
|
||||
rcpt, err := signet.AsRecipient()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = rcpt.StoreKey()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Make text export.
|
||||
export, err := rcpt.Export(false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Write output.
|
||||
fmt.Printf("Generated %s key with ID %s and name %q\n", signet.Scheme, signet.ID, signet.Info.Name)
|
||||
fmt.Printf("Backup (private key): %s\n", backup)
|
||||
fmt.Printf("Export (public key): %s\n", export)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue