diff --git a/config/config.go b/config/config.go index 094f8b8..80fee82 100644 --- a/config/config.go +++ b/config/config.go @@ -88,9 +88,14 @@ func getAppDir() (string, error) { _, err := os.Stat(dir) if err != nil { if os.IsNotExist(err) { - oserr := os.Mkdir(dir, 0700) - if oserr != nil { - return "", oserr + err := os.Mkdir(dir, 0700) + if err != nil { + return "", err + } + err = ioutil.WriteFile(dir+"/config.toml", + []byte(DefaultFileContent()), 0644) + if err != nil { + return "", err } } else { return "", err diff --git a/config/default.go b/config/default.go index 0070cb4..24596d1 100644 --- a/config/default.go +++ b/config/default.go @@ -1,6 +1,10 @@ package config -import "fmt" +import ( + "fmt" + "os/user" + "path" +) func DefaultFileContent() string { cfg := NewDefault() @@ -35,5 +39,22 @@ pool_capacity = %[11]d } func NewDefault() *Config { - return &Config{} + usr, _ := user.Current() + return &Config{ + Logger: Logger{ + Type: "production", + Dest: path.Join(usr.HomeDir, ".lntop/lntop.log"), + }, + Network: Network{ + Name: "lnd", + Type: "lnd", + Address: "//127.0.0.1:10009", + Cert: path.Join(usr.HomeDir, ".lnd/tls.cert"), + Macaroon: path.Join(usr.HomeDir, ".lnd/data/chain/bitcoin/mainnet/admin.macaroon"), + MacaroonTimeOut: 60, + MaxMsgRecvSize: 52428800, + ConnTimeout: 1000000, + PoolCapacity: 3, + }, + } } diff --git a/network/backend/backend.go b/network/backend/backend.go index 7f3b8c6..e2c68cb 100644 --- a/network/backend/backend.go +++ b/network/backend/backend.go @@ -8,6 +8,8 @@ import ( ) type Backend interface { + Ping() error + SubscribeInvoice(context.Context, chan *models.Invoice) error SubscribeChannels(context.Context, chan *models.ChannelUpdate) error diff --git a/network/backend/lnd/lnd.go b/network/backend/lnd/lnd.go index 552b695..4253528 100644 --- a/network/backend/lnd/lnd.go +++ b/network/backend/lnd/lnd.go @@ -41,6 +41,15 @@ func (l Backend) NodeName() string { return l.cfg.Name } +func (l Backend) Ping() error { + clt, err := l.Client(context.Background()) + if err != nil { + return err + } + defer clt.Close() + return nil +} + func (l Backend) Info(ctx context.Context) (*models.Info, error) { clt, err := l.Client(ctx) if err != nil { diff --git a/network/backend/mock/mock.go b/network/backend/mock/mock.go index b404bb0..46b0097 100644 --- a/network/backend/mock/mock.go +++ b/network/backend/mock/mock.go @@ -22,6 +22,10 @@ type Backend struct { sync.RWMutex } +func (b *Backend) Ping() error { + return nil +} + func (b *Backend) Info(ctx context.Context) (*models.Info, error) { return nil, nil } diff --git a/network/network.go b/network/network.go index 15f5170..c175cc8 100644 --- a/network/network.go +++ b/network/network.go @@ -26,5 +26,10 @@ func New(c *config.Network, logger logging.Logger) (*Network, error) { } } + err = b.Ping() + if err != nil { + return nil, err + } + return &Network{b}, nil }