@@ -2,15 +2,13 @@ package gateway
22
33import (
44 "fmt"
5- "strings"
65
7- "github.com/open-policy-agent/opa/ast"
86 gateway_v1 "sigs.k8s.io/gateway-api/apis/v1"
97
108 icgv1alpha1 "github.com/pomerium/ingress-controller/apis/gateway/v1alpha1"
9+ "github.com/pomerium/ingress-controller/internal/policy"
1110 "github.com/pomerium/ingress-controller/model"
1211 pb "github.com/pomerium/pomerium/pkg/grpc/config"
13- "github.com/pomerium/pomerium/pkg/policy"
1412)
1513
1614func applyFilters (
@@ -107,27 +105,25 @@ func applyExtensionFilter(
107105
108106// PolicyFilter applies a Pomerium policy defined by the PolicyFilter CRD.
109107type PolicyFilter struct {
110- rego string
108+ ppl * string
109+ rego []string
111110}
112111
113112// NewPolicyFilter parses a PolicyFilter CRD object, returning an error if the object is not valid.
114113func NewPolicyFilter (obj * icgv1alpha1.PolicyFilter ) (* PolicyFilter , error ) {
115- src , err := policy .GenerateRegoFromReader (strings .NewReader (obj .Spec .PPL ))
114+ var err error
115+ filter := new (PolicyFilter )
116+ filter .ppl , filter .rego , err = policy .Parse (obj .Spec .PPL )
116117 if err != nil {
117- return nil , fmt . Errorf ( "couldn't parse policy: %w" , err )
118+ return nil , err
118119 }
119-
120- _ , err = ast .ParseModule ("policy.rego" , src )
121- if err != nil && strings .Contains (err .Error (), "package expected" ) {
122- _ , err = ast .ParseModule ("policy.rego" , "package pomerium.policy\n \n " + src )
123- }
124- if err != nil {
125- return nil , fmt .Errorf ("internal error: %w" , err )
126- }
127- return & PolicyFilter {src }, nil
120+ return filter , nil
128121}
129122
130123// ApplyToRoute applies this policy filter to a Pomerium route proto.
131124func (f * PolicyFilter ) ApplyToRoute (r * pb.Route ) {
132- r .Policies = append (r .Policies , & pb.Policy {Rego : []string {f .rego }})
125+ r .Policies = append (r .Policies , & pb.Policy {
126+ Rego : f .rego ,
127+ SourcePpl : f .ppl ,
128+ })
133129}
0 commit comments