@@ -17,29 +17,100 @@ import (
1717
1818func DeleteCmd (ch * cmdutil.Helper ) * cobra.Command {
1919 var force bool
20+ var name string
2021
2122 cmd := & cobra.Command {
22- Use : "delete <database> <branch> <password-id>" ,
23+ Use : "delete <database> <branch> [ <password-id>] " ,
2324 Short : "Delete a branch password" ,
24- Args : cmdutil . RequiredArgs ( "database" , "branch" , "password-id" ),
25+ Args : cobra . RangeArgs ( 2 , 3 ),
2526 Aliases : []string {"rm" },
2627 RunE : func (cmd * cobra.Command , args []string ) error {
2728 ctx := cmd .Context ()
2829 database := args [0 ]
2930 branch := args [1 ]
30- passwordId := args [2 ]
31-
31+
32+ // Validate that either password-id is provided as arg or --name flag is used
33+ var passwordId string
34+ if name != "" && len (args ) == 3 {
35+ return errors .New ("cannot specify both password-id argument and --name flag" )
36+ }
37+ if name == "" && len (args ) != 3 {
38+ return errors .New ("must provide either password-id argument or --name flag" )
39+ }
40+
3241 client , err := ch .Client ()
3342 if err != nil {
3443 return err
3544 }
45+
46+ // If using --name flag, find the password by name
47+ if name != "" {
48+ end := ch .Printer .PrintProgress (fmt .Sprintf ("Finding password %s in %s/%s" ,
49+ printer .BoldBlue (name ), printer .BoldBlue (database ), printer .BoldBlue (branch )))
50+
51+ // Fetch all passwords to find the one with matching name
52+ var allPasswords []* ps.DatabaseBranchPassword
53+ page := 1
54+ perPage := 100
55+
56+ for {
57+ passwords , err := client .Passwords .List (ctx , & ps.ListDatabaseBranchPasswordRequest {
58+ Organization : ch .Config .Organization ,
59+ Database : database ,
60+ Branch : branch ,
61+ }, ps .WithPage (page ), ps .WithPerPage (perPage ))
62+ if err != nil {
63+ end ()
64+ switch cmdutil .ErrCode (err ) {
65+ case ps .ErrNotFound :
66+ return fmt .Errorf ("branch %s does not exist in database %s (organization: %s)" ,
67+ printer .BoldBlue (branch ), printer .BoldBlue (database ), printer .BoldBlue (ch .Config .Organization ))
68+ default :
69+ return cmdutil .HandleError (err )
70+ }
71+ }
72+
73+ allPasswords = append (allPasswords , passwords ... )
74+
75+ // Check if there are more pages
76+ if len (passwords ) < perPage {
77+ break
78+ }
79+ page ++
80+ }
81+
82+ end ()
83+
84+ // Find password with matching name
85+ var foundPassword * ps.DatabaseBranchPassword
86+ for _ , password := range allPasswords {
87+ if password .Name == name {
88+ foundPassword = password
89+ break
90+ }
91+ }
92+
93+ if foundPassword == nil {
94+ return fmt .Errorf ("password with name %s does not exist in branch %s of %s (organization: %s)" ,
95+ printer .BoldBlue (name ), printer .BoldBlue (branch ), printer .BoldBlue (database ), printer .BoldBlue (ch .Config .Organization ))
96+ }
97+
98+ passwordId = foundPassword .PublicID
99+ } else {
100+ passwordId = args [2 ]
101+ }
36102
37103 if ! force {
38104 if ch .Printer .Format () != printer .Human {
39105 return fmt .Errorf ("cannot delete password with the output format %q (run with -force to override)" , ch .Printer .Format ())
40106 }
41107
42- confirmationName := fmt .Sprintf ("%s/%s/%s" , database , branch , passwordId )
108+ var confirmationName string
109+ if name != "" {
110+ confirmationName = fmt .Sprintf ("%s/%s/%s" , database , branch , name )
111+ } else {
112+ confirmationName = fmt .Sprintf ("%s/%s/%s" , database , branch , passwordId )
113+ }
43114 if ! printer .IsTTY {
44115 return fmt .Errorf ("cannot confirm deletion of password %q (run with -force to override)" , confirmationName )
45116 }
@@ -66,8 +137,15 @@ func DeleteCmd(ch *cmdutil.Helper) *cobra.Command {
66137 }
67138 }
68139
69- end := ch .Printer .PrintProgress (fmt .Sprintf ("Deleting password %s from %s/%s" ,
70- printer .BoldBlue (passwordId ), printer .BoldBlue (database ), printer .BoldBlue (branch )))
140+ var deleteMsg string
141+ if name != "" {
142+ deleteMsg = fmt .Sprintf ("Deleting password %s from %s/%s" ,
143+ printer .BoldBlue (name ), printer .BoldBlue (database ), printer .BoldBlue (branch ))
144+ } else {
145+ deleteMsg = fmt .Sprintf ("Deleting password %s from %s/%s" ,
146+ printer .BoldBlue (passwordId ), printer .BoldBlue (database ), printer .BoldBlue (branch ))
147+ }
148+ end := ch .Printer .PrintProgress (deleteMsg )
71149 defer end ()
72150
73151 err = client .Passwords .Delete (ctx , & ps.DeleteDatabaseBranchPasswordRequest {
@@ -89,8 +167,13 @@ func DeleteCmd(ch *cmdutil.Helper) *cobra.Command {
89167 end ()
90168
91169 if ch .Printer .Format () == printer .Human {
92- ch .Printer .Printf ("Password %s was successfully deleted from %s.\n " ,
93- printer .BoldBlue (passwordId ), printer .BoldBlue (branch ))
170+ if name != "" {
171+ ch .Printer .Printf ("Password %s was successfully deleted from %s.\n " ,
172+ printer .BoldBlue (name ), printer .BoldBlue (branch ))
173+ } else {
174+ ch .Printer .Printf ("Password %s was successfully deleted from %s.\n " ,
175+ printer .BoldBlue (passwordId ), printer .BoldBlue (branch ))
176+ }
94177 return nil
95178 }
96179
@@ -105,5 +188,6 @@ func DeleteCmd(ch *cmdutil.Helper) *cobra.Command {
105188 }
106189
107190 cmd .Flags ().BoolVar (& force , "force" , false , "Delete a password without confirmation" )
191+ cmd .Flags ().StringVar (& name , "name" , "" , "Delete password by name instead of ID" )
108192 return cmd
109193}
0 commit comments