@@ -156,9 +156,8 @@ type LightningTerminal struct {
156156 rpcProxy * rpcProxy
157157 httpServer * http.Server
158158
159- sessionDB * session.DB
160- sessionServer * session.Server
161- sessionRpcServer * sessionRpcServer
159+ sessionRpcServer * sessionRpcServer
160+ sessionRpcServerStarted bool
162161
163162 restHandler http.Handler
164163 restCancel func ()
@@ -200,46 +199,27 @@ func (g *LightningTerminal) Run() error {
200199 g .cfg , g , g .validateSuperMacaroon , getAllMethodPermissions (),
201200 bufRpcListener ,
202201 )
203-
204- // Create an instance of the local Terminal Connect session store DB.
205- networkDir := path .Join (g .cfg .LitDir , g .cfg .Network )
206- g .sessionDB , err = session .NewDB (networkDir , session .DBFilename )
207- if err != nil {
208- return fmt .Errorf ("error creating session DB: %v" , err )
209- }
210-
211- // Create the gRPC server that handles adding/removing sessions and the
212- // actual mailbox server that spins up the Terminal Connect server
213- // interface.
214- g .sessionServer = session .NewServer (
215- func (opts ... grpc.ServerOption ) * grpc.Server {
216- allOpts := []grpc.ServerOption {
217- grpc .CustomCodec (grpcProxy .Codec ()), // nolint: staticcheck,
218- grpc .ChainStreamInterceptor (
219- g .rpcProxy .StreamServerInterceptor ,
220- ),
221- grpc .ChainUnaryInterceptor (
222- g .rpcProxy .UnaryServerInterceptor ,
223- ),
224- grpc .UnknownServiceHandler (
225- grpcProxy .TransparentHandler (
226- // Don't allow calls to litrpc.
227- g .rpcProxy .makeDirector (false ),
228- ),
202+ g .sessionRpcServer , err = newSessionRPCServer (& sessionRpcServerConfig {
203+ basicAuth : g .rpcProxy .basicAuth ,
204+ dbDir : path .Join (g .cfg .LitDir , g .cfg .Network ),
205+ grpcOptions : []grpc.ServerOption {
206+ grpc .CustomCodec (grpcProxy .Codec ()), // nolint: staticcheck,
207+ grpc .ChainStreamInterceptor (
208+ g .rpcProxy .StreamServerInterceptor ,
209+ ),
210+ grpc .ChainUnaryInterceptor (
211+ g .rpcProxy .UnaryServerInterceptor ,
212+ ),
213+ grpc .UnknownServiceHandler (
214+ grpcProxy .TransparentHandler (
215+ // Don't allow calls to litrpc.
216+ g .rpcProxy .makeDirector (false ),
229217 ),
230- }
231- allOpts = append (allOpts , opts ... )
232- grpcServer := grpc .NewServer (allOpts ... )
233- g .registerSubDaemonGrpcServers (grpcServer , false )
234-
235- return grpcServer
218+ ),
219+ },
220+ registerGrpcServers : func (server * grpc.Server ) {
221+ g .registerSubDaemonGrpcServers (server , false )
236222 },
237- )
238- g .sessionRpcServer = & sessionRpcServer {
239- basicAuth : g .rpcProxy .basicAuth ,
240- db : g .sessionDB ,
241- sessionServer : g .sessionServer ,
242- quit : make (chan struct {}),
243223 superMacBaker : func (ctx context.Context , rootKeyID uint64 ,
244224 recipe * session.MacaroonRecipe ) (string , error ) {
245225
@@ -248,6 +228,10 @@ func (g *LightningTerminal) Run() error {
248228 recipe .Permissions , recipe .Caveats ,
249229 )
250230 },
231+ })
232+ if err != nil {
233+ return fmt .Errorf ("could not create new session rpc " +
234+ "server: %v" , err )
251235 }
252236
253237 // Overwrite the loop and pool daemon's user agent name so it sends
@@ -387,20 +371,6 @@ func (g *LightningTerminal) Run() error {
387371 return err
388372 }
389373
390- // Now start up all previously created sessions. Since the sessions
391- // require a lnd connection in order to bake macaroons, we can only
392- // start up the sessions once the connection to lnd has been
393- // established.
394- sessions , err := g .sessionDB .ListSessions ()
395- if err != nil {
396- return fmt .Errorf ("error listing sessions: %v" , err )
397- }
398- for _ , sess := range sessions {
399- if err := g .sessionRpcServer .resumeSession (sess ); err != nil {
400- return fmt .Errorf ("error resuming sesion: %v" , err )
401- }
402- }
403-
404374 // Now block until we receive an error or the main shutdown signal.
405375 select {
406376 case err := <- g .loopServer .ErrChan :
@@ -578,6 +548,11 @@ func (g *LightningTerminal) startSubservers() error {
578548 g .poolStarted = true
579549 }
580550
551+ if err = g .sessionRpcServer .start (); err != nil {
552+ return err
553+ }
554+ g .sessionRpcServerStarted = true
555+
581556 return nil
582557}
583558
@@ -847,12 +822,12 @@ func (g *LightningTerminal) shutdown() error {
847822 }
848823 }
849824
850- g .sessionRpcServer .stop ()
851- if err := g .sessionDB .Close (); err != nil {
852- log .Errorf ("Error closing session DB: %v" , err )
853- returnErr = err
825+ if g .sessionRpcServerStarted {
826+ if err := g .sessionRpcServer .stop (); err != nil {
827+ log .Errorf ("Error closing session DB: %v" , err )
828+ returnErr = err
829+ }
854830 }
855- g .sessionServer .Stop ()
856831
857832 if g .lndClient != nil {
858833 g .lndClient .Close ()
0 commit comments