From f91ea4bc19f418449c8be2b11949059e7196fc07 Mon Sep 17 00:00:00 2001 From: Daniel <dhaavi@users.noreply.github.com> Date: Mon, 8 Aug 2022 14:47:20 +0200 Subject: [PATCH] Add option to immediately export/backup generated signet --- cmd/cfg-signet.go | 46 +++++++++++++++++++++++--------------------- cmd/cmd-generate.go | 47 +++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 67 insertions(+), 26 deletions(-) diff --git a/cmd/cfg-signet.go b/cmd/cfg-signet.go index 9ef217e..9029f7c 100644 --- a/cmd/cfg-signet.go +++ b/cmd/cfg-signet.go @@ -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 + } } } diff --git a/cmd/cmd-generate.go b/cmd/cmd-generate.go index e4f9b21..09bff8f 100644 --- a/cmd/cmd-generate.go +++ b/cmd/cmd-generate.go @@ -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 }, } )