|
|
@@ -235,20 +235,33 @@ func parseJwt(cfg *config.Config, token string) *authTypes.AuthenticatedUser {
|
|
|
}
|
|
|
|
|
|
func parseGroupClaim(groupClaim string, claims jwt.MapClaims, sep string) string {
|
|
|
- usergroup := ""
|
|
|
- if val, ok := claims[groupClaim]; ok {
|
|
|
- if array, ok := val.([]any); ok {
|
|
|
- groups := make([]string, len(array))
|
|
|
- for i, v := range array {
|
|
|
- groups[i] = fmt.Sprintf("%s", v)
|
|
|
- }
|
|
|
- if sep == "" {
|
|
|
- sep = " "
|
|
|
- }
|
|
|
- usergroup = strings.Join(groups, sep)
|
|
|
- } else {
|
|
|
- usergroup = fmt.Sprintf("%s", val)
|
|
|
+ val, ok := claims[groupClaim]
|
|
|
+ if !ok {
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+
|
|
|
+ array, isArray := val.([]any)
|
|
|
+ if isArray {
|
|
|
+ return joinJWTGroupArray(array, groupClaim, sep)
|
|
|
+ }
|
|
|
+
|
|
|
+ return fmt.Sprintf("%s", val)
|
|
|
+}
|
|
|
+
|
|
|
+func joinJWTGroupArray(arrayVal []any, groupClaim string, sep string) string {
|
|
|
+ if sep == "" {
|
|
|
+ sep = " "
|
|
|
+ }
|
|
|
+
|
|
|
+ groups := make([]string, 0, len(arrayVal))
|
|
|
+ for _, element := range arrayVal {
|
|
|
+ groupName, isString := element.(string)
|
|
|
+ if !isString {
|
|
|
+ log.Warnf("Skipping non-string group entry in JWT claim %v: %v", groupClaim, element)
|
|
|
+ continue
|
|
|
}
|
|
|
+ groups = append(groups, groupName)
|
|
|
}
|
|
|
- return usergroup
|
|
|
+
|
|
|
+ return strings.Join(groups, sep)
|
|
|
}
|