Compare commits

..

2 Commits

3 changed files with 46 additions and 39 deletions

View File

@@ -17,6 +17,20 @@ var (
rpcClient *RPC.Client
)
func parseSingleArgWithOptionalVault(args []string) (vault string, arg string){
if len(args) == 1 {
vault = "root"
arg = args[0]
} else {
vault = args[0]
arg = args[1]
}
return vault, arg
}
// Create the root command
var rootCmd = &cobra.Command{
Use: "ppass",
@@ -25,11 +39,17 @@ var rootCmd = &cobra.Command{
// Create the 'list' subcommand
var listCmd = &cobra.Command{
Use: "list",
Use: "list [vault]",
Short: "List all passwords",
Args: cobra.RangeArgs(0, 1),
Run: func(cmd *cobra.Command, args []string) {
var names []string
vault := "root"
if len(args) == 1 {
vault = args[0]
}
var names []string
err := rpcClient.Call("Query.GetAllNames", &vault, &names)
if err != nil {
@@ -46,12 +66,12 @@ var listCmd = &cobra.Command{
var generateCmd = &cobra.Command{
Use: "generate",
Short: "Generate a Password",
Args: cobra.ExactArgs(1),
Args: cobra.RangeArgs(1, 2),
Run: func(cmd *cobra.Command, args []string) {
serviceName := args[0]
vault, serviceName := parseSingleArgWithOptionalVault(args)
var password *crypto.Password
np := rpc.VaultService{ Vault: "root", Service: serviceName }
np := rpc.VaultService{ Vault: vault, Service: serviceName }
err := rpcClient.Call("Query.Generate", &np, &password)
if err != nil {
@@ -65,12 +85,12 @@ var generateCmd = &cobra.Command{
var showCmd = &cobra.Command{
Use: "show",
Short: "show a Password",
Args: cobra.ExactArgs(1),
Args: cobra.RangeArgs(1, 2),
Run: func(cmd *cobra.Command, args []string) {
serviceName := args[0]
vault, serviceName := parseSingleArgWithOptionalVault(args)
var password *crypto.Password
np := rpc.VaultService{ Vault: "root", Service: serviceName }
np := rpc.VaultService{ Vault: vault, Service: serviceName }
err := rpcClient.Call("Query.Get", &np, &password)
if err != nil {
@@ -172,16 +192,7 @@ var addPeerCmd = &cobra.Command{
Short: "add a peer",
Args: cobra.RangeArgs(1, 2),
Run: func(cmd *cobra.Command, args []string) {
var vault string
var peerString string
if len(args) == 1 {
vault = "root"
peerString = args[0]
} else {
vault = args[0]
peerString = args[1]
}
vault, peerString := parseSingleArgWithOptionalVault(args)
var success *bool
np := rpc.VaultPeer{ Vault: vault, Peer: peerString }
@@ -205,16 +216,7 @@ var removePeerCmd = &cobra.Command{
Short: "remove a peer",
Args: cobra.RangeArgs(1, 2),
Run: func(cmd *cobra.Command, args []string) {
var vault string
var peerString string
if len(args) == 1 {
vault = "root"
peerString = args[0]
} else {
vault = args[0]
peerString = args[1]
}
vault, peerString := parseSingleArgWithOptionalVault(args)
var success *bool
np := rpc.VaultPeer{ Vault: vault, Peer: peerString }
@@ -238,16 +240,7 @@ var deleteCmd = &cobra.Command{
Short: "delete a Password",
Args: cobra.RangeArgs(1, 2),
Run: func(cmd *cobra.Command, args []string) {
var vault string
var serviceName string
if len(args) == 1 {
vault = "root"
serviceName = args[0]
} else {
vault = args[0]
serviceName = args[1]
}
vault, serviceName := parseSingleArgWithOptionalVault(args)
var success *bool
np := rpc.VaultService{ Vault: vault, Service: serviceName }
@@ -255,6 +248,7 @@ var deleteCmd = &cobra.Command{
if err != nil {
Logger.Error(err)
return
}
if *success {

View File

@@ -140,6 +140,9 @@ func (t *Query) Delete(np *VaultService, success *bool) error {
err := val.Delete(np.Service)
if err != nil {
*success = false
if err == storage.ErrNotFound {
return nil
}
return err
}

View File

@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"time"
"errors"
"github.com/ipfs/go-datastore/query"
pubsub "github.com/libp2p/go-libp2p-pubsub"
@@ -18,6 +19,8 @@ import (
. "github.com/k4lipso/pentapass/internal/log"
)
var ErrNotFound error = errors.New("Not found")
type Vault struct {
ID string
Datastore *crdt.Datastore
@@ -73,8 +76,15 @@ func (n *Vault) Put(k string, v string) error {
}
func (n *Vault) Delete(k string) error {
_, err := n.GetPassword(k)
if err != nil {
return ErrNotFound
}
key := ds.NewKey(k)
err := n.Datastore.Delete(n.ctx, key)
err = n.Datastore.Delete(n.ctx, key)
if err != nil {
printErr(err)