github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/crypto/keys/client/delete.go (about) 1 package client 2 3 import ( 4 "context" 5 "errors" 6 "flag" 7 8 "github.com/gnolang/gno/tm2/pkg/commands" 9 "github.com/gnolang/gno/tm2/pkg/crypto/keys" 10 ) 11 12 type DeleteCfg struct { 13 RootCfg *BaseCfg 14 15 Yes bool 16 Force bool 17 } 18 19 func NewDeleteCmd(rootCfg *BaseCfg, io commands.IO) *commands.Command { 20 cfg := &DeleteCfg{ 21 RootCfg: rootCfg, 22 } 23 24 return commands.NewCommand( 25 commands.Metadata{ 26 Name: "delete", 27 ShortUsage: "delete [flags] <key-name>", 28 ShortHelp: "deletes a key from the keybase", 29 }, 30 cfg, 31 func(_ context.Context, args []string) error { 32 return execDelete(cfg, args, io) 33 }, 34 ) 35 } 36 37 func (c *DeleteCfg) RegisterFlags(fs *flag.FlagSet) { 38 fs.BoolVar( 39 &c.Yes, 40 "yes", 41 false, 42 "skip confirmation prompt", 43 ) 44 45 fs.BoolVar( 46 &c.Force, 47 "force", 48 false, 49 "remove key unconditionally", 50 ) 51 } 52 53 func execDelete(cfg *DeleteCfg, args []string, io commands.IO) error { 54 if len(args) != 1 { 55 return flag.ErrHelp 56 } 57 58 nameOrBech32 := args[0] 59 60 kb, err := keys.NewKeyBaseFromDir(cfg.RootCfg.Home) 61 if err != nil { 62 return err 63 } 64 65 info, err := kb.GetByNameOrAddress(nameOrBech32) 66 if err != nil { 67 return err 68 } 69 70 if info.GetType() == keys.TypeLedger || info.GetType() == keys.TypeOffline { 71 if !cfg.Yes { 72 if err := confirmDeletion(io); err != nil { 73 return err 74 } 75 } 76 77 if err := kb.Delete(nameOrBech32, "", true); err != nil { 78 return err 79 } 80 io.ErrPrintln("Public key reference deleted") 81 82 return nil 83 } 84 85 // skip passphrase check if run with --force 86 skipPass := cfg.Force 87 var oldpass string 88 if !skipPass { 89 msg := "DANGER - enter password to permanently delete key:" 90 if oldpass, err = io.GetPassword(msg, cfg.RootCfg.InsecurePasswordStdin); err != nil { 91 return err 92 } 93 } 94 95 err = kb.Delete(nameOrBech32, oldpass, skipPass) 96 if err != nil { 97 return err 98 } 99 io.ErrPrintln("Key deleted") 100 101 return nil 102 } 103 104 func confirmDeletion(io commands.IO) error { 105 answer, err := io.GetConfirmation("Key reference will be deleted. Continue?") 106 if err != nil { 107 return err 108 } 109 110 if !answer { 111 return errors.New("aborted") 112 } 113 114 return nil 115 }