@@ -156,9 +156,8 @@ type LightningTerminal struct {
156
156
rpcProxy * rpcProxy
157
157
httpServer * http.Server
158
158
159
- sessionDB * session.DB
160
- sessionServer * session.Server
161
- sessionRpcServer * sessionRpcServer
159
+ sessionRpcServer * sessionRpcServer
160
+ sessionRpcServerStarted bool
162
161
163
162
restHandler http.Handler
164
163
restCancel func ()
@@ -200,46 +199,27 @@ func (g *LightningTerminal) Run() error {
200
199
g .cfg , g , g .validateSuperMacaroon , getAllMethodPermissions (),
201
200
bufRpcListener ,
202
201
)
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 ),
229
217
),
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 )
236
222
},
237
- )
238
- g .sessionRpcServer = & sessionRpcServer {
239
- basicAuth : g .rpcProxy .basicAuth ,
240
- db : g .sessionDB ,
241
- sessionServer : g .sessionServer ,
242
- quit : make (chan struct {}),
243
223
superMacBaker : func (ctx context.Context , rootKeyID uint64 ,
244
224
recipe * session.MacaroonRecipe ) (string , error ) {
245
225
@@ -248,6 +228,10 @@ func (g *LightningTerminal) Run() error {
248
228
recipe .Permissions , recipe .Caveats ,
249
229
)
250
230
},
231
+ })
232
+ if err != nil {
233
+ return fmt .Errorf ("could not create new session rpc " +
234
+ "server: %v" , err )
251
235
}
252
236
253
237
// Overwrite the loop and pool daemon's user agent name so it sends
@@ -387,20 +371,6 @@ func (g *LightningTerminal) Run() error {
387
371
return err
388
372
}
389
373
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
-
404
374
// Now block until we receive an error or the main shutdown signal.
405
375
select {
406
376
case err := <- g .loopServer .ErrChan :
@@ -578,6 +548,11 @@ func (g *LightningTerminal) startSubservers() error {
578
548
g .poolStarted = true
579
549
}
580
550
551
+ if err = g .sessionRpcServer .start (); err != nil {
552
+ return err
553
+ }
554
+ g .sessionRpcServerStarted = true
555
+
581
556
return nil
582
557
}
583
558
@@ -847,12 +822,12 @@ func (g *LightningTerminal) shutdown() error {
847
822
}
848
823
}
849
824
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
+ }
854
830
}
855
- g .sessionServer .Stop ()
856
831
857
832
if g .lndClient != nil {
858
833
g .lndClient .Close ()
0 commit comments