Skip to content

Commit 21983ba

Browse files
committed
rules: thread context through
1 parent 0503cfd commit 21983ba

12 files changed

+47
-42
lines changed

firewall/rule_enforcer.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ func (r *RuleEnforcer) handleRequest(ctx context.Context,
238238
return nil, fmt.Errorf("could not extract ID from macaroon")
239239
}
240240

241-
rules, err := r.collectEnforcers(ri, sessionID)
241+
rules, err := r.collectEnforcers(ctx, ri, sessionID)
242242
if err != nil {
243243
return nil, fmt.Errorf("error parsing rules: %v", err)
244244
}
@@ -294,7 +294,7 @@ func (r *RuleEnforcer) handleResponse(ctx context.Context,
294294
return nil, fmt.Errorf("could not extract ID from macaroon")
295295
}
296296

297-
enforcers, err := r.collectEnforcers(ri, sessionID)
297+
enforcers, err := r.collectEnforcers(ctx, ri, sessionID)
298298
if err != nil {
299299
return nil, fmt.Errorf("error parsing rules: %v", err)
300300
}
@@ -328,7 +328,7 @@ func (r *RuleEnforcer) handleErrorResponse(ctx context.Context,
328328
return nil, fmt.Errorf("could not extract ID from macaroon")
329329
}
330330

331-
enforcers, err := r.collectEnforcers(ri, sessionID)
331+
enforcers, err := r.collectEnforcers(ctx, ri, sessionID)
332332
if err != nil {
333333
return nil, fmt.Errorf("error parsing rules: %v", err)
334334
}
@@ -353,7 +353,7 @@ func (r *RuleEnforcer) handleErrorResponse(ctx context.Context,
353353

354354
// collectRule initialises and returns all the Rules that need to be enforced
355355
// for the given request.
356-
func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo,
356+
func (r *RuleEnforcer) collectEnforcers(ctx context.Context, ri *RequestInfo,
357357
sessionID session.ID) ([]rules.Enforcer, error) {
358358

359359
ruleEnforcers := make(
@@ -363,8 +363,8 @@ func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo,
363363

364364
for rule, value := range ri.Rules.FeatureRules[ri.MetaInfo.Feature] {
365365
r, err := r.initRule(
366-
ri.RequestID, rule, []byte(value), ri.MetaInfo.Feature,
367-
sessionID, false, ri.WithPrivacy,
366+
ctx, ri.RequestID, rule, []byte(value),
367+
ri.MetaInfo.Feature, sessionID, false, ri.WithPrivacy,
368368
)
369369
if err != nil {
370370
return nil, err
@@ -377,8 +377,8 @@ func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo,
377377
}
378378

379379
// initRule initialises a rule.Rule with any required config values.
380-
func (r *RuleEnforcer) initRule(reqID uint64, name string, value []byte,
381-
featureName string, sessionID session.ID,
380+
func (r *RuleEnforcer) initRule(ctx context.Context, reqID uint64, name string,
381+
value []byte, featureName string, sessionID session.ID,
382382
sessionRule, privacy bool) (rules.Enforcer, error) {
383383

384384
ruleValues, err := r.ruleMgrs.InitRuleValues(name, value)
@@ -425,5 +425,5 @@ func (r *RuleEnforcer) initRule(reqID uint64, name string, value []byte,
425425
LndConnID: r.lndConnID,
426426
}
427427

428-
return r.ruleMgrs.InitEnforcer(cfg, name, ruleValues)
428+
return r.ruleMgrs.InitEnforcer(ctx, cfg, name, ruleValues)
429429
}

rules/chan_policy_bounds.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ func (b *ChanPolicyBoundsMgr) Stop() error {
3939
// values and config.
4040
//
4141
// NOTE: This is part of the Manager interface.
42-
func (b *ChanPolicyBoundsMgr) NewEnforcer(_ Config, values Values) (Enforcer,
43-
error) {
42+
func (b *ChanPolicyBoundsMgr) NewEnforcer(_ context.Context, _ Config,
43+
values Values) (Enforcer, error) {
4444

4545
bounds, ok := values.(*ChanPolicyBounds)
4646
if !ok {

rules/channel_constraints.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ func (m *ChanConstraintMgr) Stop() error {
3838
// values and config.
3939
//
4040
// NOTE: This is part of the Manager interface.
41-
func (m *ChanConstraintMgr) NewEnforcer(_ Config, values Values) (Enforcer,
42-
error) {
41+
func (m *ChanConstraintMgr) NewEnforcer(_ context.Context, _ Config,
42+
values Values) (Enforcer, error) {
4343

4444
bounds, ok := values.(*ChannelConstraint)
4545
if !ok {

rules/channel_restrictions.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ func (c *ChannelRestrictMgr) Stop() error {
6060
// values and config.
6161
//
6262
// NOTE: This is part of the Manager interface.
63-
func (c *ChannelRestrictMgr) NewEnforcer(cfg Config, values Values) (Enforcer,
64-
error) {
63+
func (c *ChannelRestrictMgr) NewEnforcer(ctx context.Context, cfg Config,
64+
values Values) (Enforcer, error) {
6565

6666
channels, ok := values.(*ChannelRestrict)
6767
if !ok {
@@ -72,7 +72,8 @@ func (c *ChannelRestrictMgr) NewEnforcer(cfg Config, values Values) (Enforcer,
7272
chanMap := make(map[uint64]bool, len(channels.DenyList))
7373
for _, chanID := range channels.DenyList {
7474
chanMap[chanID] = true
75-
if err := c.maybeUpdateChannelMaps(cfg, chanID); err != nil {
75+
err := c.maybeUpdateChannelMaps(ctx, cfg, chanID)
76+
if err != nil {
7677
return nil, err
7778
}
7879
}
@@ -118,8 +119,8 @@ func (c *ChannelRestrictMgr) EmptyValue() Values {
118119

119120
// maybeUpdateChannelMaps updates the ChannelRestrictMgrs set of known channels
120121
// iff the channel given by the caller is not found in the current map set.
121-
func (c *ChannelRestrictMgr) maybeUpdateChannelMaps(cfg Config,
122-
chanID uint64) error {
122+
func (c *ChannelRestrictMgr) maybeUpdateChannelMaps(ctx context.Context,
123+
cfg Config, chanID uint64) error {
123124

124125
c.mu.Lock()
125126
defer c.mu.Unlock()
@@ -133,7 +134,7 @@ func (c *ChannelRestrictMgr) maybeUpdateChannelMaps(cfg Config,
133134

134135
// Fetch a list of our open channels from LND.
135136
lnd := cfg.GetLndClient()
136-
chans, err := lnd.ListChannels(context.Background(), false, false)
137+
chans, err := lnd.ListChannels(ctx, false, false)
137138
if err != nil {
138139
return err
139140
}

rules/channel_restrictions_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func TestChannelRestrictCheckRequest(t *testing.T) {
5353
},
5454
},
5555
}
56-
enf, err := mgr.NewEnforcer(cfg, &ChannelRestrict{
56+
enf, err := mgr.NewEnforcer(ctx, cfg, &ChannelRestrict{
5757
DenyList: []uint64{
5858
chanID1, chanID2,
5959
},

rules/history_limit.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ func (h *HistoryLimitMgr) Stop() error {
3838
// values and config.
3939
//
4040
// NOTE: This is part of the Manager interface.
41-
func (h *HistoryLimitMgr) NewEnforcer(_ Config, values Values) (Enforcer,
42-
error) {
41+
func (h *HistoryLimitMgr) NewEnforcer(_ context.Context, _ Config,
42+
values Values) (Enforcer, error) {
4343

4444
limit, ok := values.(*HistoryLimit)
4545
if !ok {

rules/interfaces.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import (
1616
type Manager interface {
1717
// NewEnforcer constructs a new rule enforcer using the passed values
1818
// and config.
19-
NewEnforcer(cfg Config, values Values) (Enforcer, error)
19+
NewEnforcer(ctx context.Context, cfg Config, values Values) (Enforcer,
20+
error)
2021

2122
// NewValueFromProto converts the given proto value into a Value object.
2223
NewValueFromProto(p *litrpc.RuleValue) (Values, error)

rules/manager_set.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package rules
22

33
import (
4+
"context"
45
"encoding/json"
56
"fmt"
67

@@ -32,7 +33,7 @@ func NewRuleManagerSet() ManagerSet {
3233

3334
// InitEnforcer gets the appropriate rule Manager for the given name and uses it
3435
// to create an appropriate rule Enforcer.
35-
func (m ManagerSet) InitEnforcer(cfg Config, name string,
36+
func (m ManagerSet) InitEnforcer(ctx context.Context, cfg Config, name string,
3637
values Values) (Enforcer, error) {
3738

3839
mgr, ok := m[name]
@@ -41,7 +42,7 @@ func (m ManagerSet) InitEnforcer(cfg Config, name string,
4142
name)
4243
}
4344

44-
return mgr.NewEnforcer(cfg, values)
45+
return mgr.NewEnforcer(ctx, cfg, values)
4546
}
4647

4748
// GetAllRules returns a map of names of all the rules supported by rule

rules/onchain_budget.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ func (o *OnChainBudgetMgr) Stop() error {
6363
// passed values and config.
6464
//
6565
// NOTE: This is part of the Manager interface.
66-
func (o *OnChainBudgetMgr) NewEnforcer(cfg Config, values Values) (Enforcer,
67-
error) {
66+
func (o *OnChainBudgetMgr) NewEnforcer(_ context.Context, cfg Config,
67+
values Values) (Enforcer, error) {
6868

6969
budget, ok := values.(*OnChainBudget)
7070
if !ok {

rules/peer_restrictions.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ func (c *PeerRestrictMgr) Stop() error {
5353
// values and config.
5454
//
5555
// NOTE: This is part of the Manager interface.
56-
func (c *PeerRestrictMgr) NewEnforcer(cfg Config, values Values) (Enforcer,
57-
error) {
56+
func (c *PeerRestrictMgr) NewEnforcer(ctx context.Context, cfg Config,
57+
values Values) (Enforcer, error) {
5858

5959
peers, ok := values.(*PeerRestrict)
6060
if !ok {
@@ -65,7 +65,7 @@ func (c *PeerRestrictMgr) NewEnforcer(cfg Config, values Values) (Enforcer,
6565
peerMap := make(map[string]bool, len(peers.DenyList))
6666
for _, peerID := range peers.DenyList {
6767
peerMap[peerID] = true
68-
if err := c.maybeUpdateMaps(cfg, peerID); err != nil {
68+
if err := c.maybeUpdateMaps(ctx, cfg, peerID); err != nil {
6969
return nil, err
7070
}
7171
}
@@ -112,8 +112,8 @@ func (c *PeerRestrictMgr) EmptyValue() Values {
112112

113113
// maybeUpdateMaps updates the managers peer-to-channel and channel-to-peer maps
114114
// if the given peer ID is unknown to the manager.
115-
func (c *PeerRestrictMgr) maybeUpdateMaps(cfg peerRestrictCfg,
116-
id string) error {
115+
func (c *PeerRestrictMgr) maybeUpdateMaps(ctx context.Context,
116+
cfg peerRestrictCfg, id string) error {
117117

118118
c.mu.Lock()
119119
defer c.mu.Unlock()
@@ -122,15 +122,17 @@ func (c *PeerRestrictMgr) maybeUpdateMaps(cfg peerRestrictCfg,
122122
return nil
123123
}
124124

125-
return c.updateMapsUnsafe(cfg)
125+
return c.updateMapsUnsafe(ctx, cfg)
126126
}
127127

128128
// updateMapsUnsafe updates the manager's peer-to-channel and channel-to-peer
129129
// maps. It is not thread safe and so must only be called if the manager's
130130
// mutex is being held.
131-
func (c *PeerRestrictMgr) updateMapsUnsafe(cfg peerRestrictCfg) error {
131+
func (c *PeerRestrictMgr) updateMapsUnsafe(ctx context.Context,
132+
cfg peerRestrictCfg) error {
133+
132134
lnd := cfg.GetLndClient()
133-
chans, err := lnd.ListChannels(context.Background(), false, false)
135+
chans, err := lnd.ListChannels(ctx, false, false)
134136
if err != nil {
135137
return err
136138
}
@@ -152,8 +154,8 @@ func (c *PeerRestrictMgr) updateMapsUnsafe(cfg peerRestrictCfg) error {
152154
return nil
153155
}
154156

155-
func (c *PeerRestrictMgr) getPeerFromChanPoint(cfg peerRestrictCfg,
156-
cp string) (string, bool, error) {
157+
func (c *PeerRestrictMgr) getPeerFromChanPoint(ctx context.Context,
158+
cfg peerRestrictCfg, cp string) (string, bool, error) {
157159

158160
c.mu.Lock()
159161
defer c.mu.Unlock()
@@ -163,7 +165,7 @@ func (c *PeerRestrictMgr) getPeerFromChanPoint(cfg peerRestrictCfg,
163165
return peer, ok, nil
164166
}
165167

166-
err := c.updateMapsUnsafe(cfg)
168+
err := c.updateMapsUnsafe(ctx, cfg)
167169
if err != nil {
168170
return "", false, err
169171
}
@@ -295,7 +297,7 @@ func (c *PeerRestrictEnforcer) checkers() map[string]mid.RoundTripChecker {
295297
point := fmt.Sprintf("%s:%d", txid, index)
296298

297299
peerID, ok, err := c.mgr.getPeerFromChanPoint(
298-
c.cfg, point,
300+
ctx, c.cfg, point,
299301
)
300302
if err != nil {
301303
return err

0 commit comments

Comments
 (0)