Compare commits

..

2 Commits

3 changed files with 46 additions and 39 deletions

View File

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

View File

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

View File

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