mirror of
https://github.com/pomerium/pomerium.git
synced 2025-06-24 13:38:17 +02:00
ppl: support special characters in claim keys
This commit is contained in:
parent
3b2cc6720a
commit
af7f841b71
2 changed files with 29 additions and 0 deletions
|
@ -86,4 +86,28 @@ allow:
|
|||
require.Equal(t, A{true, A{ReasonClaimOK}, M{}}, res["allow"])
|
||||
require.Equal(t, A{false, A{}}, res["deny"])
|
||||
})
|
||||
t.Run("special keys", func(t *testing.T) {
|
||||
res, err := evaluate(t, `
|
||||
allow:
|
||||
and:
|
||||
- claim/example.com/key: value
|
||||
`,
|
||||
[]dataBrokerRecord{
|
||||
&session.Session{
|
||||
Id: "SESSION_ID",
|
||||
UserId: "USER_ID",
|
||||
Claims: map[string]*structpb.ListValue{
|
||||
"example.com/key": {Values: []*structpb.Value{structpb.NewStringValue("value")}},
|
||||
},
|
||||
},
|
||||
&user.User{
|
||||
Id: "USER_ID",
|
||||
Email: "test@example.com",
|
||||
},
|
||||
},
|
||||
Input{Session: InputSession{ID: "SESSION_ID"}})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, A{true, A{ReasonClaimOK}, M{}}, res["allow"])
|
||||
require.Equal(t, A{false, A{}}, res["deny"])
|
||||
})
|
||||
}
|
||||
|
|
|
@ -176,7 +176,12 @@ func ObjectGet() *ast.Rule {
|
|||
return ast.MustParseRule(`
|
||||
# object_get is like object.get, but supports converting "/" in keys to separate lookups
|
||||
# rego doesn't support recursion, so we hard code a limited number of /'s
|
||||
|
||||
object_get(obj, key, def) = value {
|
||||
undefined := "10a0fd35-0f1a-4e5b-97ce-631e89e1bafa"
|
||||
value = object.get(obj, key, undefined)
|
||||
value != undefined
|
||||
} else = value {
|
||||
segments := split(replace(key, ".", "/"), "/")
|
||||
count(segments) == 2
|
||||
o1 := object.get(obj, segments[0], {})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue