package cli import ( "context" "fmt" "github.com/urfave/cli/v3" "git.morlana.online/f.weber/vault-tui/internal/vault" ) func deleteCommand() *cli.Command { return &cli.Command{ Name: "delete", Usage: "delete a secret (soft-delete for KV v2; irreversible for KV v1/cubbyhole)", ArgsUsage: "", Flags: []cli.Flag{ &cli.BoolFlag{Name: "destroy", Usage: "KV v2: permanently destroy instead of soft-delete (irreversible)"}, &cli.BoolFlag{Name: "metadata", Usage: "KV v2: delete all versions and metadata (irreversible)"}, &cli.IntSliceFlag{Name: "versions", Usage: "KV v2: specific versions to target (default: current)"}, }, Action: func(ctx context.Context, cmd *cli.Command) error { a, err := appFrom(ctx) if err != nil { return err } if cmd.Args().Len() == 0 { return fmt.Errorf("usage: vault-tui delete ") } if _, err := a.EnsureLoggedIn(ctx, cmd.String("token")); err != nil { return err } svc := a.Service() if svc.ReadOnly { return fmt.Errorf("refusing to delete: vault-tui is in read-only mode (pass --write to override)") } mount, rel, err := splitMountPath(ctx, svc, cmd.Args().First()) if err != nil { return err } op := vault.OpSoftDelete if mount.Kind != vault.EngineKVv2 { op = vault.OpDeleteV1 } else if cmd.Bool("metadata") { op = vault.OpDeleteMetadata } else if cmd.Bool("destroy") { op = vault.OpDestroy } ack, err := svc.KV.Delete(ctx, mount, rel, op, cmd.IntSlice("versions")) if err != nil { return err } fmt.Printf("deleted %s (op=%v)\n", ack.Path, ack.Op) return nil }, } }