148 SynchronizationResult syncResult =
new SynchronizationResult() {
151 public String getStatus() {
152 return String.format(
"%d imported groups, %d updated groups, %d removed groups", getAdded(), getUpdated(), getRemoved());
163 Map<String, LDAPObject> ldapGroupsMap =
new HashMap<>();
164 List<GroupTreeResolver.Group> ldapGroupsRep =
new LinkedList<>();
167 for (LDAPObject ldapGroup : ldapGroups) {
168 String groupName = ldapGroup.getAttributeAsString(groupsRdnAttr);
171 Set<String> subgroupNames =
new HashSet<>();
173 subgroupNames.add(groupDn.getFirstRdnAttrValue());
176 ldapGroupsRep.add(
new GroupTreeResolver.Group(groupName, subgroupNames));
179 ldapGroupsMap.put(groupName, ldapGroup);
185 List<GroupTreeResolver.GroupTreeEntry> groupTrees =
new GroupTreeResolver().resolveGroupTree(ldapGroupsRep,
config.
isIgnoreMissingGroups());
188 }
catch (GroupTreeResolver.GroupTreeResolveException gre) {
189 throw new ModelException(
"Couldn't resolve groups from LDAP. Fix LDAP or skip preserve inheritance. Details: " + gre.getMessage(), gre);
192 Set<String> visitedGroupIds =
new HashSet<>();
195 for (Map.Entry<String, LDAPObject> groupEntry : ldapGroupsMap.entrySet()) {
196 String groupName = groupEntry.getKey();
197 GroupModel kcExistingGroup = KeycloakModelUtils.findGroupByPath(realm,
"/" + groupName);
199 if (kcExistingGroup != null) {
201 syncResult.increaseUpdated();
202 visitedGroupIds.add(kcExistingGroup.getId());
204 GroupModel kcGroup = realm.createGroup(groupName);
206 realm.moveGroup(kcGroup, null);
207 syncResult.increaseAdded();
208 visitedGroupIds.add(kcGroup.getId());
final ComponentModel mapperModel
Definition: AbstractLDAPStorageMapper.java:43
List< LDAPObject > getAllLDAPGroups(boolean includeMemberAttribute)
Definition: GroupLDAPStorageMapper.java:352
static final Logger logger
Definition: GroupLDAPStorageMapper.java:60
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
Set< LDAPDn > getLDAPSubgroups(LDAPObject ldapGroup)
Definition: GroupLDAPStorageMapper.java:138
String getGroupNameLdapAttribute()
Definition: GroupMapperConfig.java:82
boolean isDropNonExistingGroupsDuringSync()
Definition: GroupMapperConfig.java:119
boolean syncFromLDAPPerformedInThisTransaction
Definition: GroupLDAPStorageMapper.java:66
boolean isIgnoreMissingGroups()
Definition: GroupMapperConfig.java:96
void updateAttributesOfKCGroup(GroupModel kcGroup, LDAPObject ldapGroup)
Definition: GroupLDAPStorageMapper.java:286
void updateKeycloakGroupTree(RealmModel realm, List< GroupTreeResolver.GroupTreeEntry > groupTrees, Map< String, LDAPObject > ldapGroups, SynchronizationResult syncResult)
Definition: GroupLDAPStorageMapper.java:223
UserStorageProviderModel getModel()
Definition: LDAPStorageProvider.java:134
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
boolean isPreserveGroupsInheritance()
Definition: GroupMapperConfig.java:92
void dropNonExistingKcGroups(RealmModel realm, SynchronizationResult syncResult, Set< String > visitedGroupIds)
Definition: GroupLDAPStorageMapper.java:274
String getName()
Definition: ComponentModel.java:63