fix: replace checker.NewMapIterator with newMapIterator for HTTPHeaders and URLValues

Signed-off-by: Jason Cameron <jason.cameron@stanwith.me>
This commit is contained in:
Jason Cameron
2026-02-18 12:47:15 -05:00
committed by Jason Cameron
parent 8e9b641280
commit 33ea6c714f
3 changed files with 5 additions and 11 deletions

View File

@@ -5,7 +5,6 @@ import (
"reflect"
"strings"
"github.com/TecharoHQ/anubis/lib/policy/checker"
"github.com/google/cel-go/common/types"
"github.com/google/cel-go/common/types/ref"
"github.com/google/cel-go/common/types/traits"
@@ -68,7 +67,7 @@ func (h HTTPHeaders) Get(key ref.Val) ref.Val {
}
func (h HTTPHeaders) Iterator() traits.Iterator {
return checker.NewMapIterator(h.Header)
return newMapIterator(h.Header)
}
func (h HTTPHeaders) IsZeroValue() bool {

View File

@@ -0,0 +1,60 @@
package expressions
import (
"errors"
"maps"
"reflect"
"slices"
"github.com/google/cel-go/common/types"
"github.com/google/cel-go/common/types/ref"
"github.com/google/cel-go/common/types/traits"
)
var ErrNotImplemented = errors.New("expressions: not implemented")
type stringSliceIterator struct {
keys []string
idx int
}
func (s *stringSliceIterator) Value() any {
return s
}
func (s *stringSliceIterator) ConvertToNative(typeDesc reflect.Type) (any, error) {
return nil, ErrNotImplemented
}
func (s *stringSliceIterator) ConvertToType(typeValue ref.Type) ref.Val {
return types.NewErr("can't convert from %q to %q", types.IteratorType, typeValue)
}
func (s *stringSliceIterator) Equal(other ref.Val) ref.Val {
return types.NewErr("can't compare %q to %q", types.IteratorType, other.Type())
}
func (s *stringSliceIterator) Type() ref.Type {
return types.IteratorType
}
func (s *stringSliceIterator) HasNext() ref.Val {
return types.Bool(s.idx < len(s.keys))
}
func (s *stringSliceIterator) Next() ref.Val {
if s.HasNext() != types.True {
return nil
}
val := s.keys[s.idx]
s.idx++
return types.String(val)
}
func newMapIterator(m map[string][]string) traits.Iterator {
return &stringSliceIterator{
keys: slices.Collect(maps.Keys(m)),
idx: 0,
}
}

View File

@@ -1,19 +1,15 @@
package expressions
import (
"errors"
"net/url"
"reflect"
"strings"
"github.com/TecharoHQ/anubis/lib/policy/checker"
"github.com/google/cel-go/common/types"
"github.com/google/cel-go/common/types/ref"
"github.com/google/cel-go/common/types/traits"
)
var ErrNotImplemented = errors.New("expressions: not implemented")
// URLValues is a type wrapper to expose url.Values into CEL programs.
type URLValues struct {
url.Values
@@ -71,7 +67,7 @@ func (u URLValues) Get(key ref.Val) ref.Val {
}
func (u URLValues) Iterator() traits.Iterator {
return checker.NewMapIterator(u.Values)
return newMapIterator(u.Values)
}
func (u URLValues) IsZeroValue() bool {