33import static io .kafbat .ui .model .rbac .provider .Provider .Name .COGNITO ;
44
55import com .google .common .collect .Sets ;
6+ import io .kafbat .ui .config .auth .OAuthProperties ;
67import io .kafbat .ui .model .rbac .Role ;
78import io .kafbat .ui .model .rbac .provider .Provider ;
89import io .kafbat .ui .service .rbac .AccessControlService ;
910import java .util .Collections ;
1011import java .util .List ;
1112import java .util .Map ;
13+ import java .util .Optional ;
1214import java .util .Set ;
1315import java .util .stream .Collectors ;
1416import lombok .extern .slf4j .Slf4j ;
1517import org .springframework .security .oauth2 .core .user .DefaultOAuth2User ;
18+ import org .springframework .util .Assert ;
1619import reactor .core .publisher .Mono ;
1720
1821@ Slf4j
1922public class CognitoAuthorityExtractor implements ProviderAuthorityExtractor {
2023
24+ public static final String ROLES_FIELD_PARAM_NAME = "roles-field" ;
2125 private static final String COGNITO_GROUPS_ATTRIBUTE_NAME = "cognito:groups" ;
2226
2327 @ Override
@@ -38,7 +42,7 @@ public Mono<Set<String>> extract(AccessControlService acs, Object value, Map<Str
3842 }
3943
4044 var usernameRoles = extractUsernameRoles (acs , principal );
41- var groupRoles = extractGroupRoles (acs , principal );
45+ var groupRoles = extractGroupRoles (acs , principal , additionalParams );
4246
4347 return Mono .just (Sets .union (usernameRoles , groupRoles ));
4448 }
@@ -59,8 +63,15 @@ private Set<String> extractUsernameRoles(AccessControlService acs, DefaultOAuth2
5963 return rolesByUsername ;
6064 }
6165
62- private Set <String > extractGroupRoles (AccessControlService acs , DefaultOAuth2User principal ) {
63- List <String > groups = principal .getAttribute (COGNITO_GROUPS_ATTRIBUTE_NAME );
66+ private Set <String > extractGroupRoles (AccessControlService acs , DefaultOAuth2User principal ,
67+ Map <String , Object > additionalParams ) {
68+ var provider = (OAuthProperties .OAuth2Provider ) additionalParams .get ("provider" );
69+ Assert .notNull (provider , "provider is null" );
70+
71+ var rolesFieldName = Optional .ofNullable (provider .getCustomParams ().get (ROLES_FIELD_PARAM_NAME ))
72+ .orElse (COGNITO_GROUPS_ATTRIBUTE_NAME );
73+
74+ List <String > groups = principal .getAttribute (rolesFieldName );
6475 if (groups == null ) {
6576 log .debug ("Cognito groups param is not present" );
6677 return Collections .emptySet ();
0 commit comments