apply pr feedback

This commit is contained in:
Fabio Bozzo
2024-09-17 14:15:36 +02:00
parent 94a0d4d56e
commit 16ba4b392d
3 changed files with 25 additions and 4 deletions

View File

@@ -232,7 +232,7 @@ func statementToIPLD(statement Statement) (datamodel.Node, error) {
if err != nil {
return nil, err
}
err = listBuilder.AssembleValue().AssignString(statement.pattern)
err = listBuilder.AssembleValue().AssignString(string(statement.pattern))
if err != nil {
return nil, err
}

View File

@@ -112,7 +112,7 @@ func matchStatement(statement Statement, node ipld.Node) bool {
if err != nil {
return false
}
return globMatch(s.pattern, v)
return s.pattern.match(v)
}
case KindAll:
if s, ok := statement.(quantifier); ok {

View File

@@ -3,6 +3,8 @@ package policy
// https://github.com/ucan-wg/delegation/blob/4094d5878b58f5d35055a3b93fccda0b8329ebae/README.md#policy
import (
"errors"
"github.com/ipld/go-ipld-prime"
"github.com/ucan-wg/go-ucan/capability/policy/selector"
@@ -87,9 +89,23 @@ func Or(stmts ...Statement) Statement {
return connective{kind: KindOr, statements: stmts}
}
type wildcardPattern string
func parseWildcardPattern(pattern string) (wildcardPattern, error) {
if !validateGlobPattern(pattern) {
return "", errors.New("invalid wildcard pattern")
}
return wildcardPattern(pattern), nil
}
func (wp wildcardPattern) match(str string) bool {
return globMatch(string(wp), str)
}
type wildcard struct {
selector selector.Selector
pattern string
pattern wildcardPattern
}
func (n wildcard) Kind() string {
@@ -97,7 +113,12 @@ func (n wildcard) Kind() string {
}
func Like(selector selector.Selector, pattern string) (Statement, error) {
return wildcard{selector: selector, pattern: pattern}, nil
parsedPattern, err := parseWildcardPattern(pattern)
if err != nil {
return nil, err
}
return wildcard{selector: selector, pattern: parsedPattern}, nil
}
type quantifier struct {