@@ -14,47 +14,67 @@ func newDeleteCommand(ctx *Context) *cobra.Command {
14
14
var user string
15
15
var passwordType PasswordType = "plain"
16
16
var dryRun bool
17
+ var id string
17
18
var cmd = & cobra.Command {
18
19
Use : "delete" ,
19
20
Short : "deletes an existing password" ,
20
21
RunE : func (cmd * cobra.Command , args []string ) error {
21
- reader := bufio .NewReader (cmd .InOrStdin ())
22
- if len (machine ) == 0 {
23
- fmt .Fprintf (cmd .OutOrStdout (), "Machine: " )
24
- line , err := reader .ReadString ('\n' )
25
- if err != nil {
26
- return fmt .Errorf ("ReadString() failed: %s" , err )
27
- }
28
- machine = strings .TrimSuffix (line , "\n " )
29
- }
30
- if len (user ) == 0 {
31
- fmt .Fprintf (cmd .OutOrStdout (), "User: " )
32
- line , err := reader .ReadString ('\n' )
33
- if err != nil {
34
- return fmt .Errorf ("ReadString() failed: %s" , err )
35
- }
36
- user = strings .TrimSuffix (line , "\n " )
37
- }
38
-
39
22
transaction , err := ctx .Database .Begin ()
40
23
if err != nil {
41
24
return fmt .Errorf ("db.Begin() failed: %s" , err )
42
25
}
43
26
44
27
defer transaction .Rollback ()
45
- query , err := transaction .Prepare ("delete from passwords where machine=? and service=? and user=? and type=?" )
46
- if err != nil {
47
- return fmt .Errorf ("db.Prepare() failed: %s" , err )
48
- }
49
28
50
- result , err := query .Exec (machine , service , user , passwordType )
51
- if err != nil {
52
- return fmt .Errorf ("db.Exec() failed: %s" , err )
53
- }
29
+ var affected int64
30
+ if len (id ) > 0 {
31
+ query , err := transaction .Prepare ("delete from passwords where id=?" )
32
+ if err != nil {
33
+ return fmt .Errorf ("db.Prepare() failed: %s" , err )
34
+ }
54
35
55
- affected , err := result .RowsAffected ()
56
- if err != nil {
57
- return fmt .Errorf ("result.RowsAffected() failed: %s" , err )
36
+ result , err := query .Exec (id )
37
+ if err != nil {
38
+ return fmt .Errorf ("db.Exec() failed: %s" , err )
39
+ }
40
+
41
+ affected , err = result .RowsAffected ()
42
+ if err != nil {
43
+ return fmt .Errorf ("result.RowsAffected() failed: %s" , err )
44
+ }
45
+ } else {
46
+ reader := bufio .NewReader (cmd .InOrStdin ())
47
+ if len (machine ) == 0 {
48
+ fmt .Fprintf (cmd .OutOrStdout (), "Machine: " )
49
+ line , err := reader .ReadString ('\n' )
50
+ if err != nil {
51
+ return fmt .Errorf ("ReadString() failed: %s" , err )
52
+ }
53
+ machine = strings .TrimSuffix (line , "\n " )
54
+ }
55
+ if len (user ) == 0 {
56
+ fmt .Fprintf (cmd .OutOrStdout (), "User: " )
57
+ line , err := reader .ReadString ('\n' )
58
+ if err != nil {
59
+ return fmt .Errorf ("ReadString() failed: %s" , err )
60
+ }
61
+ user = strings .TrimSuffix (line , "\n " )
62
+ }
63
+
64
+ query , err := transaction .Prepare ("delete from passwords where machine=? and service=? and user=? and type=?" )
65
+ if err != nil {
66
+ return fmt .Errorf ("db.Prepare() failed: %s" , err )
67
+ }
68
+
69
+ result , err := query .Exec (machine , service , user , passwordType )
70
+ if err != nil {
71
+ return fmt .Errorf ("db.Exec() failed: %s" , err )
72
+ }
73
+
74
+ affected , err = result .RowsAffected ()
75
+ if err != nil {
76
+ return fmt .Errorf ("result.RowsAffected() failed: %s" , err )
77
+ }
58
78
}
59
79
if dryRun {
60
80
fmt .Fprintf (cmd .OutOrStdout (), "Would delete %v password\n " , affected )
@@ -72,6 +92,7 @@ func newDeleteCommand(ctx *Context) *cobra.Command {
72
92
cmd .Flags ().StringVarP (& user , "user" , "u" , "" , "user (default: ask)" )
73
93
cmd .Flags ().VarP (& passwordType , "type" , "t" , `password type ("plain" or "totp")` )
74
94
cmd .Flags ().BoolVarP (& dryRun , "dry-run" , "n" , false , `do everything except actually perform the database action (default: false)` )
95
+ cmd .Flags ().StringVarP (& id , "id" , "i" , "" , `unique identifier (default: '')` )
75
96
76
97
return cmd
77
98
}
0 commit comments