Skip to content

Commit

Permalink
Merge pull request #19 from virtru/lint-fix
Browse files Browse the repository at this point in the history
Add more linters, and fix lint errors #patch
  • Loading branch information
bleggett committed Aug 25, 2022
2 parents 46089e8 + 178e401 commit c2f022e
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 21 deletions.
9 changes: 9 additions & 0 deletions .golangci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
linters:
# Enable specific linter
# https://golangci-lint.run/usage/linters/#enabled-by-default-linters
enable:
- godox
- bodyclose
- gosec
- misspell
- exportloopref
20 changes: 8 additions & 12 deletions pdp/access-pdp.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func (pdp *AccessPDP) DetermineAccess(dataAttributes []attrs.AttributeInstance,
//If GroupBy is set, determine which entities (out of the set of entities and their respective AttributeInstances)
//will be considered for evaluation under this rule definition.
//
//If GroupBy is not set, then we always consider all entities for evaulation under a rule definition
//If GroupBy is not set, then we always consider all entities for evaluation under a rule definition
//
//If this rule simply does not apply to a given entity ID as defined by the AttributeDefinition we have,
//and the entity AttributeInstances that entity ID has, then that entity ID passed (or skipped) this rule.
Expand All @@ -138,9 +138,6 @@ func (pdp *AccessPDP) DetermineAccess(dataAttributes []attrs.AttributeInstance,
pdp.logger.Debugf("Attribute Definition's GroupBy is set to %s, filtering entities that will be considered for rule %s", attrDefinition, canonicalName)
filteredEntities = pdp.groupByFilterEntityAttributeInstances(entityAttributeSets, attrDefinition.GroupBy)
pdp.logger.Debugf("For this definition, according to GroupBy, considering %d out of %d total entities", len(filteredEntities), len(entityAttributeSets))
//TODO I wonder if we should return a "Decision == skipped" for each of these entities that would get
//excluded by grouping, just to keep things consistent. On the other hand, caller can easily figure this out
//if they care, and I don't want to introduce trinary access states :D
}

var entityRuleDecision map[string]DataRuleResult
Expand Down Expand Up @@ -214,14 +211,14 @@ func (pdp *AccessPDP) allOfRule(dataAttrsBySingleCanonicalName []attrs.Attribute
entityAttrCluster := attrs.ClusterByCanonicalName(entityAttrs)

//For every unqiue data AttributeInstance (that is, unique data attribute value) in this set of data AttributeInstances sharing the same canonical name...
for _, dataAttrVal := range dataAttrsBySingleCanonicalName {
for dvIndex, dataAttrVal := range dataAttrsBySingleCanonicalName {
dvCanonicalName := dataAttrVal.GetCanonicalName()
pdp.logger.Debugf("Evaluating all-of decision for data attr %s with value %s", dvCanonicalName, dataAttrVal.Value)
//See if
// 1. there exists an entity AttributeInstance in the set of AttributeInstances
// with the same canonical name as the data AttributeInstance in question
// 2. It has the same VALUE as the data AttributeInstance in question
found := findInstanceValueInCluster(&dataAttrVal, entityAttrCluster[dvCanonicalName])
found := findInstanceValueInCluster(&dataAttrsBySingleCanonicalName[dvIndex], entityAttrCluster[dvCanonicalName])

denialMsg := ""
//If we did not find the data AttributeInstance canonical name + value in the entity AttributeInstance set,
Expand All @@ -231,7 +228,7 @@ func (pdp *AccessPDP) allOfRule(dataAttrsBySingleCanonicalName []attrs.Attribute
pdp.logger.Warn(denialMsg)
//Append the ValueFailure to the set of entity value failures
valueFailures = append(valueFailures, ValueFailure{
DataAttribute: &dataAttrVal,
DataAttribute: &dataAttrsBySingleCanonicalName[dvIndex],
Message: denialMsg,
})
}
Expand Down Expand Up @@ -272,14 +269,14 @@ func (pdp *AccessPDP) anyOfRule(dataAttrsBySingleCanonicalName []attrs.Attribute
entityAttrCluster := attrs.ClusterByCanonicalName(entityAttrs)

//For every unqiue data AttributeInstance (that is, value) in this set of data AttributeInstance sharing the same canonical name...
for _, dataAttrVal := range dataAttrsBySingleCanonicalName {
for dvIndex, dataAttrVal := range dataAttrsBySingleCanonicalName {
pdp.logger.Debugf("Evaluating anyOf decision for data attr %s with value %s", dvCanonicalName, dataAttrVal.Value)

//See if
// 1. there exists an entity AttributeInstance in the set of AttributeInstances
// with the same canonical name as the data AttributeInstance in question
// 2. It has the same VALUE as the data AttributeInstance in question
found := findInstanceValueInCluster(&dataAttrVal, entityAttrCluster[dvCanonicalName])
found := findInstanceValueInCluster(&dataAttrsBySingleCanonicalName[dvIndex], entityAttrCluster[dvCanonicalName])

denialMsg := ""
//If we did not find the data AttributeInstance canonical name + value in the entity AttributeInstance set,
Expand All @@ -289,7 +286,7 @@ func (pdp *AccessPDP) anyOfRule(dataAttrsBySingleCanonicalName []attrs.Attribute
pdp.logger.Debug(denialMsg)

valueFailures = append(valueFailures, ValueFailure{
DataAttribute: &dataAttrVal,
DataAttribute: &dataAttrsBySingleCanonicalName[dvIndex],
Message: denialMsg,
})
}
Expand Down Expand Up @@ -332,7 +329,6 @@ func (pdp *AccessPDP) hierarchyRule(dataAttrsBySingleCanonicalName []attrs.Attri
}
//All of the data AttributeInstances in the arg have the same canonical name.


//Go through every entity's AttributeInstance set...
for entityId, entityAttrs := range entityAttributes {
//Default to DENY
Expand Down Expand Up @@ -458,7 +454,7 @@ func findInstanceValueInCluster(instance *attrs.AttributeInstance, cluster []att
//Given set of ordered/ranked values, a data singular AttributeInstance, and a set of entity AttributeInstances,
//determine if the entity AttributeInstances include a ranked value that equals or exceeds
//the rank of the data AttributeInstance value.
//For heirarchy, convention is 0 == most privileged, 1 == less privileged, etc
//For hierarchy, convention is 0 == most privileged, 1 == less privileged, etc
func entityRankGreaterThanOrEqualToDataRank(order []string, dataAttribute *attrs.AttributeInstance, entityAttributeCluster []attrs.AttributeInstance) bool {
//default to least-perm
result := false
Expand Down
14 changes: 7 additions & 7 deletions pdp/access-pdp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ func Test_AccessPDP_AnyOf_FailMissingValue(t *testing.T) {
assert.Equal(t, 1, len(decisions[entityID].Results))
assert.False(t, decisions[entityID].Results[0].Passed)
assert.Equal(t, 2, len(decisions[entityID].Results[0].ValueFailures))
assert.Equal(t, &mockDataAttrs[1], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockDataAttrs[0], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockAttrDefinitions[0], decisions[entityID].Results[0].RuleDefinition)
}

Expand Down Expand Up @@ -167,7 +167,7 @@ func Test_AccessPDP_AnyOf_FailMissingAttr(t *testing.T) {
assert.Equal(t, 1, len(decisions[entityID].Results))
assert.False(t, decisions[entityID].Results[0].Passed)
assert.Equal(t, 2, len(decisions[entityID].Results[0].ValueFailures))
assert.Equal(t, &mockDataAttrs[1], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockDataAttrs[0], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockAttrDefinitions[0], decisions[entityID].Results[0].RuleDefinition)
}

Expand Down Expand Up @@ -220,7 +220,7 @@ func Test_AccessPDP_AnyOf_FailAttrWrongNamespace(t *testing.T) {
assert.Equal(t, 1, len(decisions[entityID].Results))
assert.False(t, decisions[entityID].Results[0].Passed)
assert.Equal(t, 2, len(decisions[entityID].Results[0].ValueFailures))
assert.Equal(t, &mockDataAttrs[1], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockDataAttrs[0], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockAttrDefinitions[0], decisions[entityID].Results[0].RuleDefinition)
}

Expand Down Expand Up @@ -355,7 +355,7 @@ func Test_AccessPDP_AnyOf_NoEntityAttributes_Fails(t *testing.T) {
assert.Equal(t, 1, len(decisions[entityID].Results))
assert.False(t, decisions[entityID].Results[0].Passed)
assert.Equal(t, 2, len(decisions[entityID].Results[0].ValueFailures))
assert.Equal(t, &mockDataAttrs[1], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockDataAttrs[0], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockAttrDefinitions[0], decisions[entityID].Results[0].RuleDefinition)
}

Expand Down Expand Up @@ -591,7 +591,7 @@ func Test_AccessPDP_AllOf_FailMissingValue(t *testing.T) {
assert.Equal(t, 1, len(decisions[entityID].Results))
assert.False(t, decisions[entityID].Results[0].Passed)
assert.Equal(t, 1, len(decisions[entityID].Results[0].ValueFailures))
assert.Equal(t, &mockDataAttrs[1], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockDataAttrs[0], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockAttrDefinitions[0], decisions[entityID].Results[0].RuleDefinition)
}

Expand Down Expand Up @@ -644,7 +644,7 @@ func Test_AccessPDP_AllOf_FailMissingAttr(t *testing.T) {
assert.Equal(t, 1, len(decisions[entityID].Results))
assert.False(t, decisions[entityID].Results[0].Passed)
assert.Equal(t, 2, len(decisions[entityID].Results[0].ValueFailures))
assert.Equal(t, &mockDataAttrs[1], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockDataAttrs[0], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockAttrDefinitions[0], decisions[entityID].Results[0].RuleDefinition)
}

Expand Down Expand Up @@ -702,7 +702,7 @@ func Test_AccessPDP_AllOf_FailAttrWrongNamespace(t *testing.T) {
assert.Equal(t, 1, len(decisions[entityID].Results))
assert.False(t, decisions[entityID].Results[0].Passed)
assert.Equal(t, 2, len(decisions[entityID].Results[0].ValueFailures))
assert.Equal(t, &mockDataAttrs[1], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockDataAttrs[0], decisions[entityID].Results[0].ValueFailures[0].DataAttribute)
assert.Equal(t, &mockAttrDefinitions[0], decisions[entityID].Results[0].RuleDefinition)
}

Expand Down
4 changes: 2 additions & 2 deletions protoconv/protobufconv.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@ func DataRuleResultsToPb(results []pdp.DataRuleResult) []*pbPDP.DataRuleResult {

for _, v := range results {
var convFails []*pbPDP.ValueFailure
for _, fail := range v.ValueFailures {
convFails = append(convFails, ValueFailureToPb(&fail))
for fIdx := range v.ValueFailures {
convFails = append(convFails, ValueFailureToPb(&v.ValueFailures[fIdx]))
}
pbresults = append(pbresults, &pbPDP.DataRuleResult{Passed: v.Passed, RuleDefinition: AttributeDefinitionToPb(v.RuleDefinition), ValueFailures: convFails})
}
Expand Down

0 comments on commit c2f022e

Please sign in to comment.