mirror of
https://github.com/caddyserver/caddy.git
synced 2026-08-04 14:58:47 +00:00
caddyhttp: CEL matcher checks return type; slight refactor
As per https://github.com/caddyserver/caddy/issues/3051#issuecomment-611200414
This commit is contained in:
parent
7dfd69cdc5
commit
e5dc76b054
3 changed files with 10 additions and 7 deletions
|
|
@ -24,6 +24,7 @@ import (
|
|||
|
||||
"github.com/caddyserver/caddy/v2"
|
||||
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"github.com/google/cel-go/cel"
|
||||
"github.com/google/cel-go/checker/decls"
|
||||
"github.com/google/cel-go/common/types"
|
||||
|
|
@ -99,16 +100,16 @@ func (m *MatchExpression) Provision(_ caddy.Context) error {
|
|||
return fmt.Errorf("setting up CEL environment: %v", err)
|
||||
}
|
||||
|
||||
// parse the expression
|
||||
parsed, issues := env.Parse(m.expandedExpr)
|
||||
// parse and type-check the expression
|
||||
checked, issues := env.Compile(m.expandedExpr)
|
||||
if issues != nil && issues.Err() != nil {
|
||||
return fmt.Errorf("parsing CEL program: %s", issues.Err())
|
||||
return fmt.Errorf("compiling CEL program: %s", issues.Err())
|
||||
}
|
||||
|
||||
// type-check it
|
||||
checked, issues := env.Check(parsed)
|
||||
if issues != nil && issues.Err() != nil {
|
||||
return fmt.Errorf("type-checking CEL program: %s", issues.Err())
|
||||
// request matching is a boolean operation, so we don't really know
|
||||
// what to do if the expression returns a non-boolean type
|
||||
if !proto.Equal(checked.ResultType(), decls.Bool) {
|
||||
return fmt.Errorf("CEL request matcher expects return type of bool, not %s", checked.ResultType())
|
||||
}
|
||||
|
||||
// compile the "program"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue