diff --git a/config.go b/config.go index b99ab1d8..aa482c00 100644 --- a/config.go +++ b/config.go @@ -17,6 +17,7 @@ import ( "github.com/lightninglabs/faraday" "github.com/lightninglabs/faraday/chain" "github.com/lightninglabs/faraday/frdrpcserver" + "github.com/lightninglabs/lightning-terminal/autopilotserver" mid "github.com/lightninglabs/lightning-terminal/rpcmiddleware" "github.com/lightninglabs/lndclient" "github.com/lightninglabs/loop/loopd" @@ -185,6 +186,8 @@ type Config struct { RPCMiddleware *mid.Config `group:"RPC middleware options" namespace:"rpcmiddleware"` + Autopilot *autopilotserver.Config `group:"Autopilot server options" namespace:"autopilot"` + // faradayRpcConfig is a subset of faraday's full configuration that is // passed into faraday's RPC server. faradayRpcConfig *frdrpcserver.Config @@ -325,6 +328,9 @@ func defaultConfig() *Config { Pool: &poolDefaultConfig, RPCMiddleware: mid.DefaultConfig(), FirstLNCConnDeadline: defaultFirstLNCConnTimeout, + Autopilot: &autopilotserver.Config{ + PingCadence: time.Hour, + }, } } diff --git a/terminal.go b/terminal.go index adfa6205..d194cc77 100644 --- a/terminal.go +++ b/terminal.go @@ -22,6 +22,7 @@ import ( "github.com/lightninglabs/faraday/frdrpc" "github.com/lightninglabs/faraday/frdrpcserver" "github.com/lightninglabs/lightning-terminal/accounts" + "github.com/lightninglabs/lightning-terminal/autopilotserver" "github.com/lightninglabs/lightning-terminal/firewall" "github.com/lightninglabs/lightning-terminal/firewalldb" "github.com/lightninglabs/lightning-terminal/litrpc" @@ -64,6 +65,9 @@ import ( ) const ( + MainnetServer = "autopilot.lightning.finance:12010" + TestnetServer = "test.autopilot.lightning.finance:12010" + defaultServerTimeout = 10 * time.Second defaultConnectTimeout = 15 * time.Second defaultStartupTimeout = 5 * time.Second @@ -156,6 +160,8 @@ type LightningTerminal struct { faradayServer *frdrpcserver.RPCServer faradayStarted bool + autopilotClient autopilotserver.Autopilot + ruleMgrs rules.ManagerSet loopServer *loopd.Daemon @@ -261,6 +267,35 @@ func (g *LightningTerminal) Run() error { return fmt.Errorf("error creating session DB: %v", err) } + if !g.cfg.Autopilot.Disable { + if g.cfg.Autopilot.Address == "" && + len(g.cfg.Autopilot.DialOpts) == 0 { + + switch g.cfg.Network { + case "mainnet": + g.cfg.Autopilot.Address = MainnetServer + case "testnet": + g.cfg.Autopilot.Address = TestnetServer + default: + return errors.New("no autopilot server " + + "address specified") + } + } + + g.cfg.Autopilot.LitVersion = autopilotserver.Version{ + Major: uint32(appMajor), + Minor: uint32(appMinor), + Patch: uint32(appPatch), + } + + g.autopilotClient, err = autopilotserver.NewClient( + g.cfg.Autopilot, + ) + if err != nil { + return err + } + } + g.sessionRpcServer, err = newSessionRPCServer(&sessionRpcServerConfig{ basicAuth: g.rpcProxy.basicAuth, dbDir: filepath.Join(g.cfg.LitDir, g.cfg.Network), @@ -649,6 +684,21 @@ func (g *LightningTerminal) startSubservers() error { } g.macaroonServiceStarted = true + if !g.cfg.Autopilot.Disable { + withLndVersion := func(cfg *autopilotserver.Config) { + cfg.LndVersion = autopilotserver.Version{ + Major: g.lndClient.Version.AppMajor, + Minor: g.lndClient.Version.AppMinor, + Patch: g.lndClient.Version.AppPatch, + } + } + + if err = g.autopilotClient.Start(withLndVersion); err != nil { + return fmt.Errorf("could not start the autopilot "+ + "client: %v", err) + } + } + log.Infof("Starting LiT session server") if err = g.sessionRpcServer.start(); err != nil { return err @@ -970,6 +1020,10 @@ func (g *LightningTerminal) shutdown() error { } } + if g.autopilotClient != nil { + g.autopilotClient.Stop() + } + if g.sessionRpcServerStarted { if err := g.sessionRpcServer.stop(); err != nil { log.Errorf("Error closing session DB: %v", err)