Compare commits
5 Commits
a3f2a5ee6d
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
de0589761e
|
|||
|
6880401ac8
|
|||
| 4ee522c26c | |||
| b19eb8f422 | |||
| 817a14704b |
@@ -1,8 +1,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
|
||||||
"os"
|
"os"
|
||||||
|
RPC "net/rpc"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
@@ -12,9 +12,25 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
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
|
// Create the root command
|
||||||
var rootCmd = &cobra.Command{
|
var rootCmd = &cobra.Command{
|
||||||
Use: "ppass",
|
Use: "ppass",
|
||||||
@@ -23,22 +39,18 @@ 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) {
|
||||||
//all, _ := cmd.Flags().GetBool("all")
|
vault := "root"
|
||||||
dbPath, _ := cmd.Flags().GetString("db")
|
|
||||||
|
|
||||||
client, err := rpc.Receive(dbPath)
|
if len(args) == 1 {
|
||||||
|
vault = args[0]
|
||||||
if err != nil {
|
|
||||||
Logger.Errorf("dialing: %s\n", err)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var names []string
|
var names []string
|
||||||
vault := "root"
|
err := rpcClient.Call("Query.GetAllNames", &vault, &names)
|
||||||
err = client.Call("Query.GetAllNames", &vault, &names)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logger.Error(err)
|
Logger.Error(err)
|
||||||
@@ -54,21 +66,13 @@ 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) {
|
||||||
dbPath, _ := cmd.Flags().GetString("db")
|
vault, serviceName := parseSingleArgWithOptionalVault(args)
|
||||||
client, err := rpc.Receive(dbPath)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
Logger.Errorf("dialing: %s\n", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
serviceName := args[0]
|
|
||||||
|
|
||||||
var password *crypto.Password
|
var password *crypto.Password
|
||||||
np := rpc.VaultService{ Vault: "root", Service: serviceName }
|
np := rpc.VaultService{ Vault: vault, Service: serviceName }
|
||||||
err = client.Call("Query.Generate", &np, &password)
|
err := rpcClient.Call("Query.Generate", &np, &password)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logger.Error(err)
|
Logger.Error(err)
|
||||||
@@ -81,21 +85,13 @@ 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) {
|
||||||
dbPath, _ := cmd.Flags().GetString("db")
|
vault, serviceName := parseSingleArgWithOptionalVault(args)
|
||||||
client, err := rpc.Receive(dbPath)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
Logger.Errorf("dialing: %s\n", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
serviceName := args[0]
|
|
||||||
|
|
||||||
var password *crypto.Password
|
var password *crypto.Password
|
||||||
np := rpc.VaultService{ Vault: "root", Service: serviceName }
|
np := rpc.VaultService{ Vault: vault, Service: serviceName }
|
||||||
err = client.Call("Query.Get", &np, &password)
|
err := rpcClient.Call("Query.Get", &np, &password)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logger.Error(err)
|
Logger.Error(err)
|
||||||
@@ -116,18 +112,10 @@ var addVaultCmd = &cobra.Command{
|
|||||||
Short: "add a vault",
|
Short: "add a vault",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
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]
|
vault := args[0]
|
||||||
|
|
||||||
var placeholder int
|
var placeholder int
|
||||||
err = client.Call("Query.AddVault", &vault, &placeholder)
|
err := rpcClient.Call("Query.AddVault", &vault, &placeholder)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logger.Error(err)
|
Logger.Error(err)
|
||||||
@@ -143,18 +131,10 @@ var deleteVaultCmd = &cobra.Command{
|
|||||||
Short: "delete a vault",
|
Short: "delete a vault",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
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]
|
vault := args[0]
|
||||||
|
|
||||||
var placeholder int
|
var placeholder int
|
||||||
err = client.Call("Query.DeleteVault", &vault, &placeholder)
|
err := rpcClient.Call("Query.DeleteVault", &vault, &placeholder)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logger.Error(err)
|
Logger.Error(err)
|
||||||
@@ -169,16 +149,8 @@ var listVaultsCmd = &cobra.Command{
|
|||||||
Use: "list",
|
Use: "list",
|
||||||
Short: "list all vaults",
|
Short: "list all vaults",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
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
|
var reply []string
|
||||||
err = client.Call("Query.ListVaults", 0, &reply)
|
err := rpcClient.Call("Query.ListVaults", 0, &reply)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logger.Error(err)
|
Logger.Error(err)
|
||||||
@@ -202,16 +174,14 @@ var infoCmd = &cobra.Command{
|
|||||||
Use: "info",
|
Use: "info",
|
||||||
Short: "print your own peerstring",
|
Short: "print your own peerstring",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
dbPath, _ := cmd.Flags().GetString("db")
|
var result *string
|
||||||
client, err := rpc.Receive(dbPath)
|
err := rpcClient.Call("Query.GetPeerString", 0, &result)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logger.Errorf("dialing: %s\n", err)
|
Logger.Error(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var result *string
|
|
||||||
err = client.Call("Query.GetPeerString", 0, &result)
|
|
||||||
Logger.Info(*result)
|
Logger.Info(*result)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -222,28 +192,11 @@ 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) {
|
||||||
dbPath, _ := cmd.Flags().GetString("db")
|
vault, peerString := parseSingleArgWithOptionalVault(args)
|
||||||
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]
|
|
||||||
}
|
|
||||||
|
|
||||||
var success *bool
|
var success *bool
|
||||||
np := rpc.VaultPeer{ Vault: vault, Peer: peerString }
|
np := rpc.VaultPeer{ Vault: vault, Peer: peerString }
|
||||||
err = client.Call("Query.AddPeer", &np, &success)
|
err := rpcClient.Call("Query.AddPeer", &np, &success)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logger.Error(err)
|
Logger.Error(err)
|
||||||
@@ -263,28 +216,11 @@ 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) {
|
||||||
dbPath, _ := cmd.Flags().GetString("db")
|
vault, peerString := parseSingleArgWithOptionalVault(args)
|
||||||
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]
|
|
||||||
}
|
|
||||||
|
|
||||||
var success *bool
|
var success *bool
|
||||||
np := rpc.VaultPeer{ Vault: vault, Peer: peerString }
|
np := rpc.VaultPeer{ Vault: vault, Peer: peerString }
|
||||||
err = client.Call("Query.DeletePeer", &np, &success)
|
err := rpcClient.Call("Query.DeletePeer", &np, &success)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logger.Error(err)
|
Logger.Error(err)
|
||||||
@@ -304,31 +240,15 @@ 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) {
|
||||||
dbPath, _ := cmd.Flags().GetString("db")
|
vault, serviceName := parseSingleArgWithOptionalVault(args)
|
||||||
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]
|
|
||||||
}
|
|
||||||
|
|
||||||
var success *bool
|
var success *bool
|
||||||
np := rpc.VaultService{ Vault: vault, Service: serviceName }
|
np := rpc.VaultService{ Vault: vault, Service: serviceName }
|
||||||
err = client.Call("Query.Delete", &np, &success)
|
err := rpcClient.Call("Query.Delete", &np, &success)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logger.Error(err)
|
Logger.Error(err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if *success {
|
if *success {
|
||||||
@@ -339,9 +259,9 @@ var deleteCmd = &cobra.Command{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func init() {
|
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")
|
rootCmd.MarkPersistentFlagRequired("db")
|
||||||
|
|
||||||
peerCmd.AddCommand(addPeerCmd)
|
peerCmd.AddCommand(addPeerCmd)
|
||||||
@@ -361,7 +281,18 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
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 {
|
if err := rootCmd.Execute(); err != nil {
|
||||||
Logger.Error(err)
|
Logger.Error(err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -211,7 +221,7 @@ func CreateVault(ID string, storageHandler *StorageHandler) (*Vault, error) {
|
|||||||
ID, //== topicName
|
ID, //== topicName
|
||||||
func(ctx context.Context, id peer.ID, msg *pubsub.Message) bool {
|
func(ctx context.Context, id peer.ID, msg *pubsub.Message) bool {
|
||||||
if id == storageHandler.Host.ID() {
|
if id == storageHandler.Host.ID() {
|
||||||
return false
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Debugf("PubSubmsg TOPIC: %s, PEER: %s\n", ID, id)
|
Logger.Debugf("PubSubmsg TOPIC: %s, PEER: %s\n", ID, id)
|
||||||
|
|||||||
Reference in New Issue
Block a user