chore: include merged claims into the database (#15570)

Merging happens before IDP sync. Storing this will make some SQL queries
much simplier.
This commit is contained in:
Steven Masley
2024-11-18 11:58:19 -06:00
committed by GitHub
parent 097b84f27b
commit 4fedc7cf3d
3 changed files with 14 additions and 0 deletions
+3
View File
@@ -214,6 +214,9 @@ func (p AgentIDNamePair) Value() (driver.Value, error) {
type UserLinkClaims struct {
IDTokenClaims map[string]interface{} `json:"id_token_claims"`
UserInfoClaims map[string]interface{} `json:"user_info_claims"`
// MergeClaims are computed in Golang. It is the result of merging
// the IDTokenClaims and UserInfoClaims. UserInfoClaims take precedence.
MergedClaims map[string]interface{} `json:"merged_claims"`
}
func (a *UserLinkClaims) Scan(src interface{}) error {
+1
View File
@@ -1326,6 +1326,7 @@ func (api *API) userOIDC(rw http.ResponseWriter, r *http.Request) {
UserClaims: database.UserLinkClaims{
IDTokenClaims: idtokenClaims,
UserInfoClaims: userInfoClaims,
MergedClaims: mergedClaims,
},
}).SetInitAuditRequest(func(params *audit.RequestParams) (*audit.Request[database.User], func()) {
return audit.InitRequest[database.User](rw, params)
@@ -64,6 +64,16 @@ func TestUserLinks(t *testing.T) {
"number": float64(2),
},
},
MergedClaims: map[string]interface{}{
"sub": "123",
"groups": []interface{}{
"foo", "bar",
},
"number": float64(2),
"struct": map[string]interface{}{
"number": float64(2),
},
},
}
updated, err := crypt.UpdateUserLink(ctx, database.UpdateUserLinkParams{