From ec40ec2d127541a81253777a4d669f3b235f0217 Mon Sep 17 00:00:00 2001 From: juancwu <46619361+juancwu@users.noreply.github.com> Date: Sun, 11 Jan 2026 18:16:55 -0500 Subject: [PATCH] add delete key command --- cmd.go | 15 +++++++++++++++ db.go | 20 ++++++++++++++++++++ main.go | 25 +++++++++++++++++++++++-- 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/cmd.go b/cmd.go index d004790..56f95ae 100644 --- a/cmd.go +++ b/cmd.go @@ -56,3 +56,18 @@ func handleUpdateKey(dbPath, userPattern, hostPattern, keyPath string) error { return nil } + +func handleDeleteKey(dbPath string, id int) error { + db, err := initDB(dbPath) + if err != nil { + return err + } + defer db.Close() + + err = deleteKey(db, id) + if err != nil { + return err + } + + return nil +} diff --git a/db.go b/db.go index 7f7f53b..953922e 100644 --- a/db.go +++ b/db.go @@ -121,3 +121,23 @@ func updateKey(db *sql.DB, userPattern, hostPattern, keyPath string) error { return nil } + +func deleteKey(db *sql.DB, id int) error { + res, err := db.Exec("DELETE FROM keys WHERE id = ?;", id) + if err != nil { + return fmt.Errorf("failed to delete key: %w", err) + } + + rows, err := res.RowsAffected() + if err == nil { + if rows == 0 { + fmt.Printf("No key found with ID %d.\n", id) + } else { + fmt.Printf("Key with ID %d deleted.\n", id) + } + } else { + fmt.Println("Warning: could not confirm key deletion.", err) + } + + return nil +} diff --git a/main.go b/main.go index 02ab17c..846b905 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "flag" "fmt" "os" + "strconv" ) func main() { @@ -13,6 +14,7 @@ func main() { fmt.Fprintf(os.Stderr, " %s [flags] list-keys\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [flags] add-key \n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [flags] update-key \n", os.Args[0]) + fmt.Fprintf(os.Stderr, " %s [flags] delete-key \n", os.Args[0]) fmt.Fprintf(os.Stderr, "\nFlags:\n") flag.PrintDefaults() } @@ -65,7 +67,26 @@ func main() { os.Exit(1) } os.Exit(0) - } - startSSH(*dbPath, args) + case "delete-key": + if argc != 2 { + fmt.Println("Usage: gosh delete-key ") + os.Exit(1) + } + + id, err := strconv.ParseInt(args[1], 10, 32) + if err != nil { + fmt.Println("Error:", err) + os.Exit(1) + } + + err = handleDeleteKey(*dbPath, int(id)) + if err != nil { + fmt.Println("Error:", err) + os.Exit(1) + } + os.Exit(0) + default: + startSSH(*dbPath, args) + } }