@@ -30,6 +30,7 @@ var _ mid.RequestInterceptor = (*RuleEnforcer)(nil)
30
30
type RuleEnforcer struct {
31
31
ruleDB firewalldb.RulesDB
32
32
actionsDB firewalldb.ActionReadDBGetter
33
+ sessionIDIndexDB session.IDToGroupIndex
33
34
markActionErrored func (reqID uint64 , reason string ) error
34
35
newPrivMap firewalldb.NewPrivacyMapDB
35
36
@@ -50,8 +51,9 @@ type featurePerms func(ctx context.Context) (map[string]map[string]bool, error)
50
51
51
52
// NewRuleEnforcer constructs a new RuleEnforcer instance.
52
53
func 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 ,
55
57
routerClient lndclient.RouterClient ,
56
58
lndClient lndclient.LightningClient , ruleMgrs rules.ManagerSet ,
57
59
markActionErrored func (reqID uint64 , reason string ) error ,
@@ -68,6 +70,7 @@ func NewRuleEnforcer(ruleDB firewalldb.RulesDB,
68
70
ruleMgrs : ruleMgrs ,
69
71
markActionErrored : markActionErrored ,
70
72
newPrivMap : privMap ,
73
+ sessionIDIndexDB : sessionIDIndex ,
71
74
}
72
75
}
73
76
@@ -221,7 +224,12 @@ func (r *RuleEnforcer) handleRequest(ctx context.Context,
221
224
return nil , fmt .Errorf ("could not extract ID from macaroon" )
222
225
}
223
226
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 )
225
233
if err != nil {
226
234
return nil , fmt .Errorf ("error parsing rules: %v" , err )
227
235
}
@@ -261,7 +269,12 @@ func (r *RuleEnforcer) handleResponse(ctx context.Context,
261
269
return nil , fmt .Errorf ("could not extract ID from macaroon" )
262
270
}
263
271
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 )
265
278
if err != nil {
266
279
return nil , fmt .Errorf ("error parsing rules: %v" , err )
267
280
}
@@ -295,7 +308,12 @@ func (r *RuleEnforcer) handleErrorResponse(ctx context.Context,
295
308
return nil , fmt .Errorf ("could not extract ID from macaroon" )
296
309
}
297
310
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 )
299
317
if err != nil {
300
318
return nil , fmt .Errorf ("error parsing rules: %v" , err )
301
319
}
@@ -320,7 +338,7 @@ func (r *RuleEnforcer) handleErrorResponse(ctx context.Context,
320
338
321
339
// collectRule initialises and returns all the Rules that need to be enforced
322
340
// for the given request.
323
- func (r * RuleEnforcer ) collectEnforcers (ri * RequestInfo , sessionID session.ID ) (
341
+ func (r * RuleEnforcer ) collectEnforcers (ri * RequestInfo , groupID session.ID ) (
324
342
[]rules.Enforcer , error ) {
325
343
326
344
ruleEnforcers := make (
@@ -331,7 +349,7 @@ func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo, sessionID session.ID) (
331
349
for rule , value := range ri .Rules .FeatureRules [ri .MetaInfo .Feature ] {
332
350
r , err := r .initRule (
333
351
ri .RequestID , rule , []byte (value ), ri .MetaInfo .Feature ,
334
- sessionID , false , ri .WithPrivacy ,
352
+ groupID , false , ri .WithPrivacy ,
335
353
)
336
354
if err != nil {
337
355
return nil , err
@@ -345,7 +363,7 @@ func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo, sessionID session.ID) (
345
363
346
364
// initRule initialises a rule.Rule with any required config values.
347
365
func (r * RuleEnforcer ) initRule (reqID uint64 , name string , value []byte ,
348
- featureName string , sessionID session.ID , sessionRule ,
366
+ featureName string , groupID session.ID , sessionRule ,
349
367
privacy bool ) (rules.Enforcer , error ) {
350
368
351
369
ruleValues , err := r .ruleMgrs .InitRuleValues (name , value )
@@ -354,21 +372,21 @@ func (r *RuleEnforcer) initRule(reqID uint64, name string, value []byte,
354
372
}
355
373
356
374
if privacy {
357
- privMap := r .newPrivMap (sessionID )
375
+ privMap := r .newPrivMap (groupID )
358
376
ruleValues , err = ruleValues .PseudoToReal (privMap )
359
377
if err != nil {
360
378
return nil , fmt .Errorf ("could not prepare rule " +
361
379
"value: %v" , err )
362
380
}
363
381
}
364
382
365
- allActionsDB := r .actionsDB .GetActionsReadDB (sessionID , featureName )
383
+ allActionsDB := r .actionsDB .GetActionsReadDB (groupID , featureName )
366
384
actionsDB := allActionsDB .GroupFeatureActionsDB ()
367
- rulesDB := r .ruleDB .GetKVStores (name , sessionID , featureName )
385
+ rulesDB := r .ruleDB .GetKVStores (name , groupID , featureName )
368
386
369
387
if sessionRule {
370
388
actionsDB = allActionsDB .GroupActionsDB ()
371
- rulesDB = r .ruleDB .GetKVStores (name , sessionID , "" )
389
+ rulesDB = r .ruleDB .GetKVStores (name , groupID , "" )
372
390
}
373
391
374
392
cfg := & rules.ConfigImpl {
0 commit comments