Skip to content

Commit

Permalink
feat: filter constraints (#64)
Browse files Browse the repository at this point in the history
* feat: test filter

* feat: add support for constraints

* feat: log

* feat: const

* feat: better logs

* fix: cred

* fix: cleanup

* fix: lint
  • Loading branch information
skynet2 authored Sep 23, 2024
1 parent 7b6e4e7 commit 62cdfe7
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 9 deletions.
12 changes: 10 additions & 2 deletions presexch/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -245,11 +245,19 @@ func getMatchedCreds( //nolint:gocyclo,funlen
inputDescriptor.ID, inputDescriptor.Schema, vcc.Context, vcc.Types, mapping.Path)
}

// TODO add support for constraints: https://github.com/hyperledger/aries-framework-go/issues/2108
filtered, _, filterErr := filterConstraints(inputDescriptor.Constraints, []*verifiable.Credential{vc})
if filterErr != nil {
return nil, filterErr
}

if len(filtered) != 1 {
return nil, fmt.Errorf("input descriptor id [%s] requires exactly 1 credential, but found %d",
inputDescriptor.ID, len(filtered))
}

result = append(result, &MatchValue{
PresentationID: vp.ID,
Credential: vc,
Credential: filtered[0].credential,
DescriptorID: mapping.ID,
})
}
Expand Down
22 changes: 15 additions & 7 deletions presexch/definition.go
Original file line number Diff line number Diff line change
Expand Up @@ -834,7 +834,7 @@ func (pd *PresentationDefinition) filterCredentialsThatMatchDescriptor(creds []*
}
}

filteredByConstraints, err := filterConstraints(descriptor.Constraints, filtered)
filteredByConstraints, _, err := filterConstraints(descriptor.Constraints, filtered)
if err != nil {
return "", nil, err
}
Expand Down Expand Up @@ -905,18 +905,24 @@ func subjectIsIssuer(contents *verifiable.CredentialContents) bool {
return false
}

// nolint: gocyclo,funlen,gocognit
func filterConstraints(constraints *Constraints, creds []*verifiable.Credential) ([]constraintsFilterResult, error) {
// nolint: gocyclo,funlen,gocognit,unparam
func filterConstraints(constraints *Constraints, creds []*verifiable.Credential) (
[]constraintsFilterResult,
[]map[string]interface{},
error,
) {
var result []constraintsFilterResult

var debugCred []map[string]interface{}

if constraints == nil {
for _, credential := range creds {
result = append(result, constraintsFilterResult{
credential: credential,
})
}

return result, nil
return result, debugCred, nil
}

for _, credential := range creds {
Expand Down Expand Up @@ -948,9 +954,11 @@ func filterConstraints(constraints *Constraints, creds []*verifiable.Credential)

err = json.Unmarshal(credentialSrc, &credentialMap)
if err != nil {
return nil, err
return nil, debugCred, err
}

debugCred = append(debugCred, credentialMap)

for i, field := range constraints.Fields {
err = filterField(field, credentialMap)
if errors.Is(err, errPathNotApplicable) {
Expand All @@ -960,7 +968,7 @@ func filterConstraints(constraints *Constraints, creds []*verifiable.Credential)
}

if err != nil {
return nil, fmt.Errorf("filter field.%d: %w", i, err)
return nil, debugCred, fmt.Errorf("filter field.%d: %w", i, err)
}

applicable = true
Expand All @@ -979,7 +987,7 @@ func filterConstraints(constraints *Constraints, creds []*verifiable.Credential)
result = append(result, filterRes)
}

return result, nil
return result, debugCred, nil
}

// nolint: gocyclo, funlen
Expand Down

0 comments on commit 62cdfe7

Please sign in to comment.