mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore: implement OIDCClaimFieldValues for idp sync mappings auto complete (#15576)
When creating IDP sync mappings, these are the values that can be selected from. These are the values that can be mapped from in org/group/role sync.
This commit is contained in:
@@ -8409,6 +8409,52 @@ func (q *FakeQuerier) ListWorkspaceAgentPortShares(_ context.Context, workspaceI
|
||||
return shares, nil
|
||||
}
|
||||
|
||||
// nolint:forcetypeassert
|
||||
func (q *FakeQuerier) OIDCClaimFieldValues(_ context.Context, args database.OIDCClaimFieldValuesParams) ([]string, error) {
|
||||
orgMembers := q.getOrganizationMemberNoLock(args.OrganizationID)
|
||||
|
||||
var values []string
|
||||
for _, link := range q.userLinks {
|
||||
if args.OrganizationID != uuid.Nil {
|
||||
inOrg := slices.ContainsFunc(orgMembers, func(organizationMember database.OrganizationMember) bool {
|
||||
return organizationMember.UserID == link.UserID
|
||||
})
|
||||
if !inOrg {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
if link.LoginType != database.LoginTypeOIDC {
|
||||
continue
|
||||
}
|
||||
|
||||
if len(link.Claims.MergedClaims) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
value, ok := link.Claims.MergedClaims[args.ClaimField]
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
switch value := value.(type) {
|
||||
case string:
|
||||
values = append(values, value)
|
||||
case []string:
|
||||
values = append(values, value...)
|
||||
case []any:
|
||||
for _, v := range value {
|
||||
if sv, ok := v.(string); ok {
|
||||
values = append(values, sv)
|
||||
}
|
||||
}
|
||||
default:
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
return slice.Unique(values), nil
|
||||
}
|
||||
|
||||
func (q *FakeQuerier) OIDCClaimFields(_ context.Context, organizationID uuid.UUID) ([]string, error) {
|
||||
orgMembers := q.getOrganizationMemberNoLock(organizationID)
|
||||
|
||||
@@ -8427,10 +8473,7 @@ func (q *FakeQuerier) OIDCClaimFields(_ context.Context, organizationID uuid.UUI
|
||||
continue
|
||||
}
|
||||
|
||||
for k := range link.Claims.IDTokenClaims {
|
||||
fields = append(fields, k)
|
||||
}
|
||||
for k := range link.Claims.UserInfoClaims {
|
||||
for k := range link.Claims.MergedClaims {
|
||||
fields = append(fields, k)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user