add support for pomerium.request.headers for set_request_headers (#5563)

* add support for pomerium.request.headers for set_request_headers

* add peg grammar
This commit is contained in:
Caleb Doxsey 2025-04-07 10:32:03 -06:00 committed by GitHub
parent 5f95dd32db
commit a1eb75a8fe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 338 additions and 15 deletions

View file

@ -0,0 +1,61 @@
package headertemplate_test
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/pomerium/pomerium/internal/headertemplate"
)
func TestRender(t *testing.T) {
t.Parallel()
for _, tc := range []struct {
in string
expect string
}{
{"x $$ y $$ z", "x $ y $ z"},
{`${x.y.z}`, `<x,y,z>`},
{`${ x . y . z }`, `<x,y,z>`},
{`${x["y"].z}`, `<x,y,z>`},
{`${x["`, `${x["`},
{`${`, `${`},
{`${}`, `${}`},
{`${x["\\"]}`, `<x,\>`},
{`${x["\""]}`, `<x,">`},
{`${pomerium.access_token}`, `<pomerium,access_token>`},
{`$pomerium.access_token`, `<pomerium,access_token>`},
{`${pomerium.client_cert_fingerprint}`, `<pomerium,client_cert_fingerprint>`},
{`$pomerium.client_cert_fingerprint`, `<pomerium,client_cert_fingerprint>`},
{`${pomerium.id_token}`, `<pomerium,id_token>`},
{`$pomerium.id_token`, `<pomerium,id_token>`},
{`${pomerium.jwt}`, `<pomerium,jwt>`},
{`$pomerium.jwt`, `<pomerium,jwt>`},
{`${pomerium.request.headers["X-Access-Token"]}`, `<pomerium,request,headers,X-Access-Token>`},
{`$pomerium.request.headers.X-Access-Token`, `<pomerium,request,headers,X-Access-Token>`},
} {
actual := headertemplate.Render(tc.in, func(ref []string) string {
return "<" + strings.Join(ref, ",") + ">"
})
assert.Equal(t, tc.expect, actual)
}
assert.Equal(t, "x $ y $ z", headertemplate.Render("x $$ y $$ z", func(_ []string) string {
return ""
}))
assert.Equal(t, "before JWT after", headertemplate.Render("before $pomerium.jwt after", func(ref []string) string {
assert.Equal(t, []string{"pomerium", "jwt"}, ref)
return "JWT"
}))
assert.Equal(t, "before JWT after", headertemplate.Render("before ${ pomerium . jwt } after", func(ref []string) string {
assert.Equal(t, []string{"pomerium", "jwt"}, ref)
return "JWT"
}))
assert.Equal(t, "before JWT after", headertemplate.Render("before ${ pomerium . jwt } after", func(ref []string) string {
assert.Equal(t, []string{"pomerium", "jwt"}, ref)
return "JWT"
}))
}