From b32e0ced4501e5148df5e726111291ac5452691d Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Fri, 20 Apr 2018 03:06:06 -0400 Subject: [PATCH] lnd+walletunlocker: remove macaroon dependency from UnlockerService --- lnd.go | 44 +++++++++++++++------------------- walletunlocker/service.go | 24 +------------------ walletunlocker/service_test.go | 12 +++++----- 3 files changed, 26 insertions(+), 54 deletions(-) diff --git a/lnd.go b/lnd.go index f17cf7bc..909e7931 100644 --- a/lnd.go +++ b/lnd.go @@ -195,18 +195,6 @@ func lndMain() error { } proxyOpts := []grpc.DialOption{grpc.WithTransportCredentials(cCreds)} - var macaroonService *macaroons.Service - if !cfg.NoMacaroons { - // Create the macaroon authentication/authorization service. - macaroonService, err = macaroons.NewService(macaroonDatabaseDir, - macaroons.IPLockChecker) - if err != nil { - srvrLog.Errorf("unable to create macaroon service: %v", err) - return err - } - defer macaroonService.Close() - } - var ( privateWalletPw = []byte("hello") publicWalletPw = []byte("public") @@ -216,11 +204,11 @@ func lndMain() error { // We wait until the user provides a password over RPC. In case lnd is // started with the --noencryptwallet flag, we use the default password - // "hello" for wallet encryption. + // for wallet encryption. if !cfg.NoEncryptWallet { walletInitParams, err := waitForWalletPassword( cfg.RPCListeners, cfg.RESTListeners, serverOpts, - proxyOpts, tlsConf, macaroonService, + proxyOpts, tlsConf, ) if err != nil { return err @@ -238,12 +226,20 @@ func lndMain() error { } } + var macaroonService *macaroons.Service if !cfg.NoMacaroons { + // Create the macaroon authentication/authorization service. + macaroonService, err = macaroons.NewService(macaroonDatabaseDir, + macaroons.IPLockChecker) + if err != nil { + srvrLog.Errorf("unable to create macaroon service: %v", err) + return err + } + defer macaroonService.Close() + // Try to unlock the macaroon store with the private password. - // Ignore ErrAlreadyUnlocked since it could be unlocked by the - // wallet unlocker. err = macaroonService.CreateUnlock(&privateWalletPw) - if err != nil && err != macaroons.ErrAlreadyUnlocked { + if err != nil { srvrLog.Error(err) return err } @@ -879,12 +875,9 @@ type WalletUnlockParams struct { // waitForWalletPassword will spin up gRPC and REST endpoints for the // WalletUnlocker server, and block until a password is provided by // the user to this RPC server. -func waitForWalletPassword( - grpcEndpoints, restEndpoints []string, - serverOpts []grpc.ServerOption, - proxyOpts []grpc.DialOption, - tlsConf *tls.Config, - macaroonService *macaroons.Service) (*WalletUnlockParams, error) { +func waitForWalletPassword(grpcEndpoints, restEndpoints []string, + serverOpts []grpc.ServerOption, proxyOpts []grpc.DialOption, + tlsConf *tls.Config) (*WalletUnlockParams, error) { // Set up a new PasswordService, which will listen // for passwords provided over RPC. @@ -894,8 +887,9 @@ func waitForWalletPassword( if registeredChains.PrimaryChain() == litecoinChain { chainConfig = cfg.Litecoin } - pwService := walletunlocker.New(macaroonService, - chainConfig.ChainDir, activeNetParams.Params) + pwService := walletunlocker.New( + chainConfig.ChainDir, activeNetParams.Params, + ) lnrpc.RegisterWalletUnlockerServer(grpcServer, pwService) // Use a WaitGroup so we can be sure the instructions on how to input the diff --git a/walletunlocker/service.go b/walletunlocker/service.go index 3ade642f..fa5750c3 100644 --- a/walletunlocker/service.go +++ b/walletunlocker/service.go @@ -8,7 +8,6 @@ import ( "github.com/lightningnetwork/lnd/aezeed" "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnwallet/btcwallet" - "github.com/lightningnetwork/lnd/macaroons" "github.com/roasbeef/btcd/chaincfg" "github.com/roasbeef/btcwallet/wallet" "golang.org/x/net/context" @@ -67,13 +66,10 @@ type UnlockerService struct { chainDir string netParams *chaincfg.Params - authSvc *macaroons.Service } // New creates and returns a new UnlockerService. -func New(authSvc *macaroons.Service, chainDir string, - params *chaincfg.Params) *UnlockerService { - +func New(chainDir string, params *chaincfg.Params) *UnlockerService { return &UnlockerService{ InitMsgs: make(chan *WalletInitMsg, 1), UnlockMsgs: make(chan *WalletUnlockMsg, 1), @@ -216,15 +212,6 @@ func (u *UnlockerService) InitWallet(ctx context.Context, return nil, err } - // Attempt to create a password for the macaroon service. - if u.authSvc != nil { - err = u.authSvc.CreateUnlock(&password) - if err != nil { - return nil, fmt.Errorf("unable to create/unlock "+ - "macaroon store: %v", err) - } - } - // With the cipher seed deciphered, and the auth service created, we'll // now send over the wallet password and the seed. This will allow the // daemon to initialize itself and startup. @@ -277,15 +264,6 @@ func (u *UnlockerService) UnlockWallet(ctx context.Context, return nil, err } - // Attempt to create a password for the macaroon service. - if u.authSvc != nil { - err = u.authSvc.CreateUnlock(&password) - if err != nil { - return nil, fmt.Errorf("unable to create/unlock "+ - "macaroon store: %v", err) - } - } - walletUnlockMsg := &WalletUnlockMsg{ Passphrase: password, RecoveryWindow: recoveryWindow, diff --git a/walletunlocker/service_test.go b/walletunlocker/service_test.go index 5a69a71d..b8ccf04e 100644 --- a/walletunlocker/service_test.go +++ b/walletunlocker/service_test.go @@ -67,7 +67,7 @@ func TestGenSeed(t *testing.T) { defer func() { os.RemoveAll(testDir) }() - service := walletunlocker.New(nil, testDir, testNetParams) + service := walletunlocker.New(testDir, testNetParams) // Now that the service has been created, we'll ask it to generate a // new seed for us given a test passphrase. @@ -108,7 +108,7 @@ func TestGenSeedGenerateEntropy(t *testing.T) { defer func() { os.RemoveAll(testDir) }() - service := walletunlocker.New(nil, testDir, testNetParams) + service := walletunlocker.New(testDir, testNetParams) // Now that the service has been created, we'll ask it to generate a // new seed for us given a test passphrase. Note that we don't actually @@ -148,7 +148,7 @@ func TestGenSeedInvalidEntropy(t *testing.T) { defer func() { os.RemoveAll(testDir) }() - service := walletunlocker.New(nil, testDir, testNetParams) + service := walletunlocker.New(testDir, testNetParams) // Now that the service has been created, we'll ask it to generate a // new seed for us given a test passphrase. However, we'll be using an @@ -186,7 +186,7 @@ func TestInitWallet(t *testing.T) { }() // Create new UnlockerService. - service := walletunlocker.New(nil, testDir, testNetParams) + service := walletunlocker.New(testDir, testNetParams) // Once we have the unlocker service created, we'll now instantiate a // new cipher seed instance. @@ -287,7 +287,7 @@ func TestCreateWalletInvalidEntropy(t *testing.T) { }() // Create new UnlockerService. - service := walletunlocker.New(nil, testDir, testNetParams) + service := walletunlocker.New(testDir, testNetParams) // We'll attempt to init the wallet with an invalid cipher seed and // passphrase. @@ -320,7 +320,7 @@ func TestUnlockWallet(t *testing.T) { }() // Create new UnlockerService. - service := walletunlocker.New(nil, testDir, testNetParams) + service := walletunlocker.New(testDir, testNetParams) ctx := context.Background() req := &lnrpc.UnlockWalletRequest{