private static void runDoGetGroupsTests(ExternalGroupsProvider groupsProvider, Map<String, Collection<String>> userGroupsMap) { for (Map.Entry<String, Collection<String>> userGroupMapEntry : userGroupsMap.entrySet()) { Collection<String> groups = groupsProvider.doGetGroups(new ExternalGroupsProvider.Context( userGroupMapEntry.getKey(), mock(HttpServletRequest.class))); assertThat(groups).isEqualTo(userGroupMapEntry.getValue()); } }
@Override public Collection<String> doGetGroups(Context context) { Preconditions.checkNotNull(context.getUsername()); Preconditions.checkNotNull(context.getRequest()); return userGroupsMap.get(context.getUsername()); } };
private UserDto synchronize(String userLogin, UserDetails details, HttpServletRequest request, AuthenticationEvent.Method method) { String name = details.getName(); UserIdentity.Builder userIdentityBuilder = UserIdentity.builder() .setLogin(userLogin) .setName(isEmpty(name) ? userLogin : name) .setEmail(trimToNull(details.getEmail())) .setProviderLogin(userLogin); if (externalGroupsProvider != null) { ExternalGroupsProvider.Context context = new ExternalGroupsProvider.Context(userLogin, request); Collection<String> groups = externalGroupsProvider.doGetGroups(context); userIdentityBuilder.setGroups(new HashSet<>(groups)); } return userIdentityAuthenticator.authenticate( UserIdentityAuthenticatorParameters.builder() .setUserIdentity(userIdentityBuilder.build()) .setProvider(new ExternalIdentityProvider()) .setSource(realmEventSource(method)) .setExistingEmailStrategy(ExistingEmailStrategy.FORBID) .setUpdateLoginStrategy(UpdateLoginStrategy.ALLOW) .build()); }
/** * Override this method in order to load user group information. * * @return list of groups associated with specified user, or null if such user doesn't exist * @throws RuntimeException in case of unexpected error such as connection failure * @since 5.2 */ public Collection<String> doGetGroups(Context context) { return doGetGroups(context.getUsername()); }
private UserDto synchronize(String userLogin, UserDetails details, HttpServletRequest request, AuthenticationEvent.Method method) { String name = details.getName(); UserIdentity.Builder userIdentityBuilder = UserIdentity.builder() .setLogin(userLogin) .setName(isEmpty(name) ? userLogin : name) .setEmail(trimToNull(details.getEmail())) .setProviderLogin(userLogin); if (externalGroupsProvider != null) { ExternalGroupsProvider.Context context = new ExternalGroupsProvider.Context(userLogin, request); Collection<String> groups = externalGroupsProvider.doGetGroups(context); userIdentityBuilder.setGroups(new HashSet<>(groups)); } return userRegistrar.register( UserRegistration.builder() .setUserIdentity(userIdentityBuilder.build()) .setProvider(new ExternalIdentityProvider()) .setSource(realmEventSource(method)) .setExistingEmailStrategy(ExistingEmailStrategy.FORBID) .setUpdateLoginStrategy(UpdateLoginStrategy.ALLOW) .build()); }
@Test public void doGetGroupsNoOverride() { ExternalGroupsProvider groupsProvider = new ExternalGroupsProvider() { }; String userName = "foo"; assertThat(groupsProvider.doGetGroups(userName)).isNull(); assertThat(groupsProvider.doGetGroups(new ExternalGroupsProvider.Context(userName, mock(HttpServletRequest.class)))).isNull(); }
/** * Override this method in order to load user group information. * * @return list of groups associated with specified user, or null if such user doesn't exist * @throws RuntimeException in case of unexpected error such as connection failure * @since 5.2 */ public Collection<String> doGetGroups(Context context) { return doGetGroups(context.getUsername()); }