firewall+rules: map with privacy flags

We change the rule mapping to accept the newly added privacy flags. Peer
and channel restrictions can be controlled with privacy flags.
This commit is contained in:
bitromortac 2023-11-20 15:11:54 +01:00
parent cb542a5015
commit 1636bb2bd6
No known key found for this signature in database
GPG key ID: 1965063FC13BEBE2
10 changed files with 138 additions and 69 deletions

View file

@ -224,12 +224,7 @@ func (r *RuleEnforcer) handleRequest(ctx context.Context,
return nil, fmt.Errorf("could not extract ID from macaroon")
}
groupID, err := r.sessionDB.GetGroupID(sessionID)
if err != nil {
return nil, err
}
rules, err := r.collectEnforcers(ri, groupID)
rules, err := r.collectEnforcers(ri, sessionID)
if err != nil {
return nil, fmt.Errorf("error parsing rules: %v", err)
}
@ -269,12 +264,7 @@ func (r *RuleEnforcer) handleResponse(ctx context.Context,
return nil, fmt.Errorf("could not extract ID from macaroon")
}
groupID, err := r.sessionDB.GetGroupID(sessionID)
if err != nil {
return nil, err
}
enforcers, err := r.collectEnforcers(ri, groupID)
enforcers, err := r.collectEnforcers(ri, sessionID)
if err != nil {
return nil, fmt.Errorf("error parsing rules: %v", err)
}
@ -308,12 +298,7 @@ func (r *RuleEnforcer) handleErrorResponse(ctx context.Context,
return nil, fmt.Errorf("could not extract ID from macaroon")
}
groupID, err := r.sessionDB.GetGroupID(sessionID)
if err != nil {
return nil, err
}
enforcers, err := r.collectEnforcers(ri, groupID)
enforcers, err := r.collectEnforcers(ri, sessionID)
if err != nil {
return nil, fmt.Errorf("error parsing rules: %v", err)
}
@ -338,8 +323,8 @@ func (r *RuleEnforcer) handleErrorResponse(ctx context.Context,
// collectRule initialises and returns all the Rules that need to be enforced
// for the given request.
func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo, groupID session.ID) (
[]rules.Enforcer, error) {
func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo,
sessionID session.ID) ([]rules.Enforcer, error) {
ruleEnforcers := make(
[]rules.Enforcer, 0,
@ -349,7 +334,7 @@ func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo, groupID session.ID) (
for rule, value := range ri.Rules.FeatureRules[ri.MetaInfo.Feature] {
r, err := r.initRule(
ri.RequestID, rule, []byte(value), ri.MetaInfo.Feature,
groupID, false, ri.WithPrivacy,
sessionID, false, ri.WithPrivacy,
)
if err != nil {
return nil, err
@ -363,30 +348,40 @@ func (r *RuleEnforcer) collectEnforcers(ri *RequestInfo, groupID session.ID) (
// initRule initialises a rule.Rule with any required config values.
func (r *RuleEnforcer) initRule(reqID uint64, name string, value []byte,
featureName string, groupID session.ID, sessionRule,
privacy bool) (rules.Enforcer, error) {
featureName string, sessionID session.ID,
sessionRule, privacy bool) (rules.Enforcer, error) {
ruleValues, err := r.ruleMgrs.InitRuleValues(name, value)
if err != nil {
return nil, err
}
session, err := r.sessionDB.GetSessionByID(sessionID)
if err != nil {
return nil, err
}
if privacy {
privMap := r.newPrivMap(groupID)
ruleValues, err = ruleValues.PseudoToReal(privMap)
privMap := r.newPrivMap(session.GroupID)
ruleValues, err = ruleValues.PseudoToReal(
privMap, session.PrivacyFlags,
)
if err != nil {
return nil, fmt.Errorf("could not prepare rule "+
"value: %v", err)
}
}
allActionsDB := r.actionsDB.GetActionsReadDB(groupID, featureName)
allActionsDB := r.actionsDB.GetActionsReadDB(
session.GroupID, featureName,
)
actionsDB := allActionsDB.GroupFeatureActionsDB()
rulesDB := r.ruleDB.GetKVStores(name, groupID, featureName)
rulesDB := r.ruleDB.GetKVStores(name, session.GroupID, featureName)
if sessionRule {
actionsDB = allActionsDB.GroupActionsDB()
rulesDB = r.ruleDB.GetKVStores(name, groupID, "")
rulesDB = r.ruleDB.GetKVStores(name, session.GroupID, "")
}
cfg := &rules.ConfigImpl{