@@ -30,6 +30,7 @@ var _ mid.RequestInterceptor = (*RuleEnforcer)(nil)
3030type RuleEnforcer struct {
3131 ruleDB firewalldb.RulesDB
3232 actionsDB firewalldb.ActionReadDBGetter
33+ sessionIDIndexDB session.IDToGroupIndex
3334 markActionErrored func (reqID uint64 , reason string ) error
3435 newPrivMap firewalldb.NewPrivacyMapDB
3536
@@ -50,8 +51,9 @@ type featurePerms func(ctx context.Context) (map[string]map[string]bool, error)
5051
5152// NewRuleEnforcer constructs a new RuleEnforcer instance.
5253func NewRuleEnforcer (ruleDB firewalldb.RulesDB ,
53- actionsDB firewalldb.ActionReadDBGetter , getFeaturePerms featurePerms ,
54- permsMgr * perms.Manager , nodeID [33 ]byte ,
54+ actionsDB firewalldb.ActionReadDBGetter ,
55+ sessionIDIndex session.IDToGroupIndex ,
56+ getFeaturePerms featurePerms , permsMgr * perms.Manager , nodeID [33 ]byte ,
5557 routerClient lndclient.RouterClient ,
5658 lndClient lndclient.LightningClient , ruleMgrs rules.ManagerSet ,
5759 markActionErrored func (reqID uint64 , reason string ) error ,
@@ -68,6 +70,7 @@ func NewRuleEnforcer(ruleDB firewalldb.RulesDB,
6870 ruleMgrs : ruleMgrs ,
6971 markActionErrored : markActionErrored ,
7072 newPrivMap : privMap ,
73+ sessionIDIndexDB : sessionIDIndex ,
7174 }
7275}
7376
@@ -221,7 +224,12 @@ func (r *RuleEnforcer) handleRequest(ctx context.Context,
221224 return nil , fmt .Errorf ("could not extract ID from macaroon" )
222225 }
223226
224- rules , err := r .collectEnforcers (ri , sessionID )
227+ groupID , err := r .sessionIDIndexDB .GetGroupID (sessionID )
228+ if err != nil {
229+ return nil , err
230+ }
231+
232+ rules , err := r .collectEnforcers (ri , groupID )
225233 if err != nil {
226234 return nil , fmt .Errorf ("error parsing rules: %v" , err )
227235 }
@@ -261,7 +269,12 @@ func (r *RuleEnforcer) handleResponse(ctx context.Context,
261269 return nil , fmt .Errorf ("could not extract ID from macaroon" )
262270 }
263271
264- enforcers , err := r .collectEnforcers (ri , sessionID )
272+ groupID , err := r .sessionIDIndexDB .GetGroupID (sessionID )
273+ if err != nil {
274+ return nil , err
275+ }
276+
277+ enforcers , err := r .collectEnforcers (ri , groupID )
265278 if err != nil {
266279 return nil , fmt .Errorf ("error parsing rules: %v" , err )
267280 }
@@ -295,7 +308,12 @@ func (r *RuleEnforcer) handleErrorResponse(ctx context.Context,
295308 return nil , fmt .Errorf ("could not extract ID from macaroon" )
296309 }
297310
298- enforcers , err := r .collectEnforcers (ri , sessionID )
311+ groupID , err := r .sessionIDIndexDB .GetGroupID (sessionID )
312+ if err != nil {
313+ return nil , err
314+ }
315+
316+ enforcers , err := r .collectEnforcers (ri , groupID )
299317 if err != nil {
300318 return nil , fmt .Errorf ("error parsing rules: %v" , err )
301319 }
@@ -320,7 +338,7 @@ func (r *RuleEnforcer) handleErrorResponse(ctx context.Context,
320338
321339// collectRule initialises and returns all the Rules that need to be enforced
322340// for the given request.
323- func (r * RuleEnforcer ) collectEnforcers (ri * RequestInfo , sessionID session.ID ) (
341+ func (r * RuleEnforcer ) collectEnforcers (ri * RequestInfo , groupID session.ID ) (
324342 []rules.Enforcer , error ) {
325343
326344 ruleEnforcers := make (
@@ -331,7 +349,7 @@ func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo, sessionID session.ID) (
331349 for rule , value := range ri .Rules .FeatureRules [ri .MetaInfo .Feature ] {
332350 r , err := r .initRule (
333351 ri .RequestID , rule , []byte (value ), ri .MetaInfo .Feature ,
334- sessionID , false , ri .WithPrivacy ,
352+ groupID , false , ri .WithPrivacy ,
335353 )
336354 if err != nil {
337355 return nil , err
@@ -345,7 +363,7 @@ func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo, sessionID session.ID) (
345363
346364// initRule initialises a rule.Rule with any required config values.
347365func (r * RuleEnforcer ) initRule (reqID uint64 , name string , value []byte ,
348- featureName string , sessionID session.ID , sessionRule ,
366+ featureName string , groupID session.ID , sessionRule ,
349367 privacy bool ) (rules.Enforcer , error ) {
350368
351369 ruleValues , err := r .ruleMgrs .InitRuleValues (name , value )
@@ -354,21 +372,21 @@ func (r *RuleEnforcer) initRule(reqID uint64, name string, value []byte,
354372 }
355373
356374 if privacy {
357- privMap := r .newPrivMap (sessionID )
375+ privMap := r .newPrivMap (groupID )
358376 ruleValues , err = ruleValues .PseudoToReal (privMap )
359377 if err != nil {
360378 return nil , fmt .Errorf ("could not prepare rule " +
361379 "value: %v" , err )
362380 }
363381 }
364382
365- allActionsDB := r .actionsDB .GetActionsReadDB (sessionID , featureName )
383+ allActionsDB := r .actionsDB .GetActionsReadDB (groupID , featureName )
366384 actionsDB := allActionsDB .GroupFeatureActionsDB ()
367- rulesDB := r .ruleDB .GetKVStores (name , sessionID , featureName )
385+ rulesDB := r .ruleDB .GetKVStores (name , groupID , featureName )
368386
369387 if sessionRule {
370388 actionsDB = allActionsDB .GroupActionsDB ()
371- rulesDB = r .ruleDB .GetKVStores (name , sessionID , "" )
389+ rulesDB = r .ruleDB .GetKVStores (name , groupID , "" )
372390 }
373391
374392 cfg := & rules.ConfigImpl {
0 commit comments