diff --git a/cmd/indra/seed_serve.go b/cmd/indra/seed_serve.go index 9672aac3..85c5348a 100644 --- a/cmd/indra/seed_serve.go +++ b/cmd/indra/seed_serve.go @@ -103,9 +103,6 @@ var seedServeCommand = &cobra.Command{ }, false) - storage.Shutdown() - os.Exit(0) - // // RPC // diff --git a/pkg/rpc/server.go b/pkg/rpc/server.go index c5d5c673..640de4e5 100644 --- a/pkg/rpc/server.go +++ b/pkg/rpc/server.go @@ -11,8 +11,8 @@ func init() { var ( server *grpc.Server - startupErrors = make(chan error) - isReady = make(chan bool) + startupErrors = make(chan error, 128) + isReady = make(chan bool, 1) ) func RunWith(ctx context.Context, r func(srv *grpc.Server)) { diff --git a/pkg/storage/cmd.go b/pkg/storage/cmd.go index c2d70109..af4113cd 100644 --- a/pkg/storage/cmd.go +++ b/pkg/storage/cmd.go @@ -2,9 +2,12 @@ package storage import ( "errors" + "fmt" "github.com/spf13/viper" + "golang.org/x/term" "os" "strings" + "syscall" ) var ( @@ -64,6 +67,20 @@ func configureKey() { return } + if viper.GetBool(storeAskPassFlag) { + + log.I.Ln("prompting user for key") + + var password []byte + + fmt.Print("Enter Encryption Key: ") + password, err = term.ReadPassword(int(syscall.Stdin)) + + key.Decode(string(password)) + + return + } + log.I.Ln("no keyfile found, generating a new key") isNewKey = true diff --git a/pkg/storage/key.go b/pkg/storage/key.go index a9559d98..e3627ab7 100644 --- a/pkg/storage/key.go +++ b/pkg/storage/key.go @@ -3,6 +3,7 @@ package storage import ( "crypto/rand" "github.com/btcsuite/btcd/btcutil/base58" + "strings" ) type Key [32]byte @@ -15,8 +16,11 @@ func (k Key) Encode() string { return base58.Encode(k[:]) } -func (k Key) Decode(key string) { - base58.Decode(key) +func (k *Key) Decode(key string) { + + key = strings.TrimSpace(key) + + copy(k[:], base58.Decode(key)) } func KeyGen() (Key, error) { diff --git a/pkg/storage/service.go b/pkg/storage/service.go index 3a8f303a..dd4bb08f 100644 --- a/pkg/storage/service.go +++ b/pkg/storage/service.go @@ -60,14 +60,11 @@ func Run(ctx context.Context) { opts = badger.DefaultOptions(viper.GetString(storeFilePathFlag)) opts.EncryptionKey = key.Bytes() opts.IndexCacheSize = 128 << 20 - opts.WithLoggingLevel(badger.WARNING) + opts.Logger = nil db, err = badger.Open(opts) if err != nil { - - check(err) - startupErrors <- err return }