Compare commits

...

5 Commits

3 changed files with 74 additions and 130 deletions

View File

@@ -1,8 +1,8 @@
package main
import (
"flag"
"os"
RPC "net/rpc"
"github.com/spf13/cobra"
@@ -12,9 +12,25 @@ import (
)
var (
dbPath = flag.String("db", "./db", "db file path")
dbPath string
debug bool
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",
@@ -23,22 +39,18 @@ 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) {
//all, _ := cmd.Flags().GetBool("all")
dbPath, _ := cmd.Flags().GetString("db")
vault := "root"
client, err := rpc.Receive(dbPath)
if err != nil {
Logger.Errorf("dialing: %s\n", err)
return
if len(args) == 1 {
vault = args[0]
}
var names []string
vault := "root"
err = client.Call("Query.GetAllNames", &vault, &names)
err := rpcClient.Call("Query.GetAllNames", &vault, &names)
if err != nil {
Logger.Error(err)
@@ -54,21 +66,13 @@ 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) {
dbPath, _ := cmd.Flags().GetString("db")
client, err := rpc.Receive(dbPath)
if err != nil {
Logger.Errorf("dialing: %s\n", err)
return
}
serviceName := args[0]
vault, serviceName := parseSingleArgWithOptionalVault(args)
var password *crypto.Password
np := rpc.VaultService{ Vault: "root", Service: serviceName }
err = client.Call("Query.Generate", &np, &password)
np := rpc.VaultService{ Vault: vault, Service: serviceName }
err := rpcClient.Call("Query.Generate", &np, &password)
if err != nil {
Logger.Error(err)
@@ -81,21 +85,13 @@ 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) {
dbPath, _ := cmd.Flags().GetString("db")
client, err := rpc.Receive(dbPath)
if err != nil {
Logger.Errorf("dialing: %s\n", err)
return
}
serviceName := args[0]
vault, serviceName := parseSingleArgWithOptionalVault(args)
var password *crypto.Password
np := rpc.VaultService{ Vault: "root", Service: serviceName }
err = client.Call("Query.Get", &np, &password)
np := rpc.VaultService{ Vault: vault, Service: serviceName }
err := rpcClient.Call("Query.Get", &np, &password)
if err != nil {
Logger.Error(err)
@@ -116,18 +112,10 @@ var addVaultCmd = &cobra.Command{
Short: "add a vault",
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
dbPath, _ := cmd.Flags().GetString("db")
client, err := rpc.Receive(dbPath)
if err != nil {
Logger.Errorf("dialing: %s\n", err)
return
}
vault := args[0]
var placeholder int
err = client.Call("Query.AddVault", &vault, &placeholder)
err := rpcClient.Call("Query.AddVault", &vault, &placeholder)
if err != nil {
Logger.Error(err)
@@ -143,18 +131,10 @@ var deleteVaultCmd = &cobra.Command{
Short: "delete a vault",
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
dbPath, _ := cmd.Flags().GetString("db")
client, err := rpc.Receive(dbPath)
if err != nil {
Logger.Errorf("dialing: %s\n", err)
return
}
vault := args[0]
var placeholder int
err = client.Call("Query.DeleteVault", &vault, &placeholder)
err := rpcClient.Call("Query.DeleteVault", &vault, &placeholder)
if err != nil {
Logger.Error(err)
@@ -169,16 +149,8 @@ var listVaultsCmd = &cobra.Command{
Use: "list",
Short: "list all vaults",
Run: func(cmd *cobra.Command, args []string) {
dbPath, _ := cmd.Flags().GetString("db")
client, err := rpc.Receive(dbPath)
if err != nil {
Logger.Errorf("dialing: %s\n", err)
return
}
var reply []string
err = client.Call("Query.ListVaults", 0, &reply)
err := rpcClient.Call("Query.ListVaults", 0, &reply)
if err != nil {
Logger.Error(err)
@@ -202,16 +174,14 @@ var infoCmd = &cobra.Command{
Use: "info",
Short: "print your own peerstring",
Run: func(cmd *cobra.Command, args []string) {
dbPath, _ := cmd.Flags().GetString("db")
client, err := rpc.Receive(dbPath)
var result *string
err := rpcClient.Call("Query.GetPeerString", 0, &result)
if err != nil {
Logger.Errorf("dialing: %s\n", err)
Logger.Error(err)
return
}
var result *string
err = client.Call("Query.GetPeerString", 0, &result)
Logger.Info(*result)
},
}
@@ -222,28 +192,11 @@ var addPeerCmd = &cobra.Command{
Short: "add a peer",
Args: cobra.RangeArgs(1, 2),
Run: func(cmd *cobra.Command, args []string) {
dbPath, _ := cmd.Flags().GetString("db")
client, err := rpc.Receive(dbPath)
if err != nil {
Logger.Errorf("dialing: %s\n", err)
return
}
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 }
err = client.Call("Query.AddPeer", &np, &success)
err := rpcClient.Call("Query.AddPeer", &np, &success)
if err != nil {
Logger.Error(err)
@@ -263,28 +216,11 @@ var removePeerCmd = &cobra.Command{
Short: "remove a peer",
Args: cobra.RangeArgs(1, 2),
Run: func(cmd *cobra.Command, args []string) {
dbPath, _ := cmd.Flags().GetString("db")
client, err := rpc.Receive(dbPath)
if err != nil {
Logger.Errorf("dialing: %s\n", err)
return
}
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 }
err = client.Call("Query.DeletePeer", &np, &success)
err := rpcClient.Call("Query.DeletePeer", &np, &success)
if err != nil {
Logger.Error(err)
@@ -304,31 +240,15 @@ var deleteCmd = &cobra.Command{
Short: "delete a Password",
Args: cobra.RangeArgs(1, 2),
Run: func(cmd *cobra.Command, args []string) {
dbPath, _ := cmd.Flags().GetString("db")
client, err := rpc.Receive(dbPath)
if err != nil {
Logger.Errorf("dialing: %s\n", err)
return
}
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 }
err = client.Call("Query.Delete", &np, &success)
err := rpcClient.Call("Query.Delete", &np, &success)
if err != nil {
Logger.Error(err)
return
}
if *success {
@@ -339,9 +259,9 @@ var deleteCmd = &cobra.Command{
},
}
func init() {
rootCmd.PersistentFlags().String("db", "", "db path")
rootCmd.PersistentFlags().StringVar(&dbPath, "db", "", "db path")
rootCmd.PersistentFlags().BoolVar(&debug, "debug", false, "enable debug mode")
rootCmd.MarkPersistentFlagRequired("db")
peerCmd.AddCommand(addPeerCmd)
@@ -361,7 +281,18 @@ func init() {
}
func main() {
InitLogger(false)
cobra.OnInitialize(func() {
var tmpClient *RPC.Client
tmpClient, err := rpc.Receive(dbPath)
rpcClient = tmpClient
if err != nil {
Logger.Fatalf("dialing: %s\n", err)
return
}
InitLogger(debug)
})
if err := rootCmd.Execute(); err != nil {
Logger.Error(err)
os.Exit(1)

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)
@@ -211,7 +221,7 @@ func CreateVault(ID string, storageHandler *StorageHandler) (*Vault, error) {
ID, //== topicName
func(ctx context.Context, id peer.ID, msg *pubsub.Message) bool {
if id == storageHandler.Host.ID() {
return false
return true
}
Logger.Debugf("PubSubmsg TOPIC: %s, PEER: %s\n", ID, id)