keycloak
クラス | 公開メンバ関数 | 静的公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper クラス
org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper の継承関係図
Inheritance graph
org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper 連携図
Collaboration graph

クラス

class  LDAPGroupMappingsUserDelegate
 

公開メンバ関数

 GroupLDAPStorageMapper (ComponentModel mapperModel, LDAPStorageProvider ldapProvider, GroupLDAPStorageMapperFactory factory)
 
LDAPQuery createLDAPGroupQuery ()
 
CommonLDAPGroupMapperConfig getConfig ()
 
LDAPQuery createGroupQuery (boolean includeMemberAttribute)
 
LDAPObject createLDAPGroup (String groupName, Map< String, Set< String >> additionalAttributes)
 
LDAPObject loadLDAPGroupByName (String groupName)
 
SynchronizationResult syncDataFromFederationProviderToKeycloak (RealmModel realm)
 
SynchronizationResult syncDataFromKeycloakToFederationProvider (RealmModel realm)
 
List< UserModelgetGroupMembers (RealmModel realm, GroupModel kcGroup, int firstResult, int maxResults)
 
void addGroupMappingInLDAP (RealmModel realm, GroupModel kcGroup, LDAPObject ldapUser)
 
void deleteGroupMappingInLDAP (LDAPObject ldapUser, LDAPObject ldapGroup)
 
void beforeLDAPQuery (LDAPQuery query)
 
UserModel proxy (LDAPObject ldapUser, UserModel delegate, RealmModel realm)
 
void onRegisterUserToLDAP (LDAPObject ldapUser, UserModel localUser, RealmModel realm)
 
void onImportUserFromLDAP (LDAPObject ldapUser, UserModel user, RealmModel realm, boolean isCreate)
 
boolean onAuthenticationFailure (LDAPObject ldapUser, UserModel user, AuthenticationException ldapException, RealmModel realm)
 
LDAPStorageProvider getLdapProvider ()
 
void close ()
 

静的公開メンバ関数

static boolean parseBooleanParameter (ComponentModel mapperModel, String paramName)
 

限定公開メンバ関数

Set< LDAPDngetLDAPSubgroups (LDAPObject ldapGroup)
 
GroupModel findKcGroupByLDAPGroup (RealmModel realm, LDAPObject ldapGroup)
 
GroupModel findKcGroupOrSyncFromLDAP (RealmModel realm, LDAPObject ldapGroup, UserModel user)
 
List< LDAPObjectgetAllLDAPGroups (boolean includeMemberAttribute)
 
List< LDAPObjectgetLDAPGroupMappings (LDAPObject ldapUser)
 
String getMembershipUserLdapAttribute ()
 

限定公開変数類

final KeycloakSession session
 
final ComponentModel mapperModel
 
final LDAPStorageProvider ldapProvider
 

非公開メンバ関数

void updateKeycloakGroupTree (RealmModel realm, List< GroupTreeResolver.GroupTreeEntry > groupTrees, Map< String, LDAPObject > ldapGroups, SynchronizationResult syncResult)
 
void updateKeycloakGroupTreeEntry (RealmModel realm, GroupTreeResolver.GroupTreeEntry groupTreeEntry, Map< String, LDAPObject > ldapGroups, GroupModel kcParent, SynchronizationResult syncResult, Set< String > visitedGroupIds)
 
void dropNonExistingKcGroups (RealmModel realm, SynchronizationResult syncResult, Set< String > visitedGroupIds)
 
void updateAttributesOfKCGroup (GroupModel kcGroup, LDAPObject ldapGroup)
 
void processKeycloakGroupSyncToLDAP (GroupModel kcGroup, Map< String, LDAPObject > ldapGroupsMap, Set< String > ldapGroupNames, SynchronizationResult syncResult)
 
void processKeycloakGroupMembershipsSyncToLDAP (GroupModel kcGroup, Map< String, LDAPObject > ldapGroupsMap)
 
GroupModel getHighestPredecessorNotExistentInLdap (GroupModel group)
 

非公開変数類

final GroupMapperConfig config
 
final GroupLDAPStorageMapperFactory factory
 
boolean syncFromLDAPPerformedInThisTransaction = false
 

静的非公開変数類

static final Logger logger = Logger.getLogger(GroupLDAPStorageMapper.class)
 

詳解

著者
Marek Posolda

構築子と解体子

◆ GroupLDAPStorageMapper()

org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.GroupLDAPStorageMapper ( ComponentModel  mapperModel,
LDAPStorageProvider  ldapProvider,
GroupLDAPStorageMapperFactory  factory 
)
inline
68  {
69  super(mapperModel, ldapProvider);
70  this.config = new GroupMapperConfig(mapperModel);
71  this.factory = factory;
72  }
final GroupLDAPStorageMapperFactory factory
Definition: GroupLDAPStorageMapper.java:63
final ComponentModel mapperModel
Definition: AbstractLDAPStorageMapper.java:43
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44

関数詳解

◆ addGroupMappingInLDAP()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.addGroupMappingInLDAP ( RealmModel  realm,
GroupModel  kcGroup,
LDAPObject  ldapUser 
)
inline
521  {
522  String groupName = kcGroup.getName();
523  LDAPObject ldapGroup = loadLDAPGroupByName(groupName);
524 
525  if (ldapGroup == null) {
526  // Needs to partially sync Keycloak groups to LDAP
528  GroupModel highestGroupToSync = getHighestPredecessorNotExistentInLdap(kcGroup);
529 
530  logger.debugf("Will sync group '%s' and it's subgroups from DB to LDAP", highestGroupToSync.getName());
531 
532  Map<String, LDAPObject> syncedLDAPGroups = new HashMap<>();
533  processKeycloakGroupSyncToLDAP(highestGroupToSync, syncedLDAPGroups, new HashSet<>(), new SynchronizationResult());
534  processKeycloakGroupMembershipsSyncToLDAP(highestGroupToSync, syncedLDAPGroups);
535 
536  ldapGroup = loadLDAPGroupByName(groupName);
537 
538  // Finally update LDAP membership in the parent group
539  if (highestGroupToSync.getParent() != null) {
540  LDAPObject ldapParentGroup = loadLDAPGroupByName(highestGroupToSync.getParent().getName());
541  LDAPUtils.addMember(ldapProvider, MembershipType.DN, config.getMembershipLdapAttribute(), getMembershipUserLdapAttribute(), ldapParentGroup, ldapGroup, true);
542  }
543  } else {
544  // No care about group inheritance. Let's just sync current group
545  logger.debugf("Will sync group '%s' from DB to LDAP", groupName);
546  processKeycloakGroupSyncToLDAP(kcGroup, new HashMap<>(), new HashSet<>(), new SynchronizationResult());
547  ldapGroup = loadLDAPGroupByName(groupName);
548  }
549  }
550 
551  String membershipUserLdapAttrName = getMembershipUserLdapAttribute();
552 
553  LDAPUtils.addMember(ldapProvider, config.getMembershipTypeLdapAttribute(), config.getMembershipLdapAttribute(), membershipUserLdapAttrName, ldapGroup, ldapUser, true);
554  }
void processKeycloakGroupSyncToLDAP(GroupModel kcGroup, Map< String, LDAPObject > ldapGroupsMap, Set< String > ldapGroupNames, SynchronizationResult syncResult)
Definition: GroupLDAPStorageMapper.java:422
static final Logger logger
Definition: GroupLDAPStorageMapper.java:60
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
LDAPObject loadLDAPGroupByName(String groupName)
Definition: GroupLDAPStorageMapper.java:131
void processKeycloakGroupMembershipsSyncToLDAP(GroupModel kcGroup, Map< String, LDAPObject > ldapGroupsMap)
Definition: GroupLDAPStorageMapper.java:457
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
GroupModel getHighestPredecessorNotExistentInLdap(GroupModel group)
Definition: GroupLDAPStorageMapper.java:490
String getMembershipUserLdapAttribute()
Definition: GroupLDAPStorageMapper.java:614
boolean isPreserveGroupsInheritance()
Definition: GroupMapperConfig.java:92
MembershipType getMembershipTypeLdapAttribute()
Definition: CommonLDAPGroupMapperConfig.java:64
String getMembershipLdapAttribute()
Definition: CommonLDAPGroupMapperConfig.java:59

◆ beforeLDAPQuery()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.beforeLDAPQuery ( LDAPQuery  query)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

570  {
571  String strategyKey = config.getUserGroupsRetrieveStrategy();
572  UserRolesRetrieveStrategy strategy = factory.getUserGroupsRetrieveStrategy(strategyKey);
573  strategy.beforeUserLDAPQuery(this, query);
574  }
final GroupLDAPStorageMapperFactory factory
Definition: GroupLDAPStorageMapper.java:63
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
String getUserGroupsRetrieveStrategy()
Definition: GroupMapperConfig.java:123
void beforeUserLDAPQuery(CommonLDAPGroupMapper roleOrGroupMapper, LDAPQuery query)
UserRolesRetrieveStrategy getUserGroupsRetrieveStrategy(String strategyKey)
Definition: GroupLDAPStorageMapperFactory.java:283

◆ close()

void org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.close ( )
inlineinherited

org.keycloak.provider.Providerを実装しています。

85  {
86 
87  }

◆ createGroupQuery()

LDAPQuery org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.createGroupQuery ( boolean  includeMemberAttribute)
inline
91  {
92  LDAPQuery ldapQuery = new LDAPQuery(ldapProvider);
93 
94  // For now, use same search scope, which is configured "globally" and used for user's search.
95  ldapQuery.setSearchScope(ldapProvider.getLdapIdentityStore().getConfig().getSearchScope());
96 
97  String groupsDn = config.getGroupsDn();
98  ldapQuery.setSearchDn(groupsDn);
99 
100  Collection<String> groupObjectClasses = config.getGroupObjectClasses(ldapProvider);
101  ldapQuery.addObjectClasses(groupObjectClasses);
102 
103  String customFilter = config.getCustomLdapFilter();
104  if (customFilter != null && customFilter.trim().length() > 0) {
105  Condition customFilterCondition = new LDAPQueryConditionsBuilder().addCustomLDAPFilter(customFilter);
106  ldapQuery.addWhereCondition(customFilterCondition);
107  }
108 
109  ldapQuery.addReturningLdapAttribute(config.getGroupNameLdapAttribute());
110 
111  // Performance improvement
112  if (includeMemberAttribute) {
113  ldapQuery.addReturningLdapAttribute(config.getMembershipLdapAttribute());
114  }
115 
116  for (String groupAttr : config.getGroupAttributes()) {
117  ldapQuery.addReturningLdapAttribute(groupAttr);
118  }
119 
120  return ldapQuery;
121  }
Collection< String > getGroupAttributes()
Definition: GroupMapperConfig.java:110
LDAPIdentityStore getLdapIdentityStore()
Definition: LDAPStorageProvider.java:126
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
String getGroupNameLdapAttribute()
Definition: GroupMapperConfig.java:82
String getCustomLdapFilter()
Definition: GroupMapperConfig.java:115
String getGroupsDn()
Definition: GroupMapperConfig.java:69
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
int getSearchScope()
Definition: LDAPConfig.java:158
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83
String getMembershipLdapAttribute()
Definition: CommonLDAPGroupMapperConfig.java:59
Collection< String > getGroupObjectClasses(LDAPStorageProvider ldapProvider)
Definition: GroupMapperConfig.java:100

◆ createLDAPGroup()

LDAPObject org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.createLDAPGroup ( String  groupName,
Map< String, Set< String >>  additionalAttributes 
)
inline
123  {
124  LDAPObject ldapGroup = LDAPUtils.createLDAPGroup(ldapProvider, groupName, config.getGroupNameLdapAttribute(), config.getGroupObjectClasses(ldapProvider),
125  config.getGroupsDn(), additionalAttributes);
126 
127  logger.debugf("Creating group [%s] to LDAP with DN [%s]", groupName, ldapGroup.getDn().toString());
128  return ldapGroup;
129  }
static final Logger logger
Definition: GroupLDAPStorageMapper.java:60
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
String getGroupNameLdapAttribute()
Definition: GroupMapperConfig.java:82
String getGroupsDn()
Definition: GroupMapperConfig.java:69
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
Collection< String > getGroupObjectClasses(LDAPStorageProvider ldapProvider)
Definition: GroupMapperConfig.java:100

◆ createLDAPGroupQuery()

LDAPQuery org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.createLDAPGroupQuery ( )
inline

org.keycloak.storage.ldap.mappers.membership.CommonLDAPGroupMapperを実装しています。

78  {
79  return createGroupQuery(false);
80  }
LDAPQuery createGroupQuery(boolean includeMemberAttribute)
Definition: GroupLDAPStorageMapper.java:91

◆ deleteGroupMappingInLDAP()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.deleteGroupMappingInLDAP ( LDAPObject  ldapUser,
LDAPObject  ldapGroup 
)
inline
556  {
557  String membershipUserLdapAttrName = getMembershipUserLdapAttribute();
558  LDAPUtils.deleteMember(ldapProvider, config.getMembershipTypeLdapAttribute(), config.getMembershipLdapAttribute(), membershipUserLdapAttrName, ldapGroup, ldapUser);
559  }
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
String getMembershipUserLdapAttribute()
Definition: GroupLDAPStorageMapper.java:614
MembershipType getMembershipTypeLdapAttribute()
Definition: CommonLDAPGroupMapperConfig.java:64
String getMembershipLdapAttribute()
Definition: CommonLDAPGroupMapperConfig.java:59

◆ dropNonExistingKcGroups()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.dropNonExistingKcGroups ( RealmModel  realm,
SynchronizationResult  syncResult,
Set< String >  visitedGroupIds 
)
inlineprivate
274  {
275  // Remove keycloak groups, which doesn't exists in LDAP
276  List<GroupModel> allGroups = realm.getGroups();
277  for (GroupModel kcGroup : allGroups) {
278  if (!visitedGroupIds.contains(kcGroup.getId())) {
279  logger.debugf("Removing Keycloak group '%s', which doesn't exist in LDAP", kcGroup.getName());
280  realm.removeGroup(kcGroup);
281  syncResult.increaseRemoved();
282  }
283  }
284  }
static final Logger logger
Definition: GroupLDAPStorageMapper.java:60

◆ findKcGroupByLDAPGroup()

GroupModel org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.findKcGroupByLDAPGroup ( RealmModel  realm,
LDAPObject  ldapGroup 
)
inlineprotected
300  {
301  String groupNameAttr = config.getGroupNameLdapAttribute();
302  String groupName = ldapGroup.getAttributeAsString(groupNameAttr);
303 
305  // Override if better effectivity or different algorithm is needed
306  List<GroupModel> groups = realm.getGroups();
307  for (GroupModel group : groups) {
308  if (group.getName().equals(groupName)) {
309  return group;
310  }
311  }
312 
313  return null;
314  } else {
315  // Without preserved inheritance, it's always top-level group
316  return KeycloakModelUtils.findGroupByPath(realm, "/" + groupName);
317  }
318  }
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
String getGroupNameLdapAttribute()
Definition: GroupMapperConfig.java:82
boolean isPreserveGroupsInheritance()
Definition: GroupMapperConfig.java:92

◆ findKcGroupOrSyncFromLDAP()

GroupModel org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.findKcGroupOrSyncFromLDAP ( RealmModel  realm,
LDAPObject  ldapGroup,
UserModel  user 
)
inlineprotected
320  {
321  GroupModel kcGroup = findKcGroupByLDAPGroup(realm, ldapGroup);
322 
323  if (kcGroup == null) {
324 
326 
327  // Better to sync all groups from LDAP with preserved inheritance
330  kcGroup = findKcGroupByLDAPGroup(realm, ldapGroup);
331  }
332  } else {
333  String groupNameAttr = config.getGroupNameLdapAttribute();
334  String groupName = ldapGroup.getAttributeAsString(groupNameAttr);
335 
336  kcGroup = realm.createGroup(groupName);
337  updateAttributesOfKCGroup(kcGroup, ldapGroup);
338  realm.moveGroup(kcGroup, null);
339  }
340 
341  // Could theoretically happen on some LDAP servers if 'memberof' style is used and 'memberof' attribute of user references non-existing group
342  if (kcGroup == null) {
343  String groupName = ldapGroup.getAttributeAsString(config.getGroupNameLdapAttribute());
344  logger.warnf("User '%s' is member of group '%s', which doesn't exists in LDAP", user.getUsername(), groupName);
345  }
346  }
347 
348  return kcGroup;
349  }
static final Logger logger
Definition: GroupLDAPStorageMapper.java:60
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
String getGroupNameLdapAttribute()
Definition: GroupMapperConfig.java:82
boolean syncFromLDAPPerformedInThisTransaction
Definition: GroupLDAPStorageMapper.java:66
void updateAttributesOfKCGroup(GroupModel kcGroup, LDAPObject ldapGroup)
Definition: GroupLDAPStorageMapper.java:286
SynchronizationResult syncDataFromFederationProviderToKeycloak(RealmModel realm)
Definition: GroupLDAPStorageMapper.java:147
boolean isPreserveGroupsInheritance()
Definition: GroupMapperConfig.java:92
GroupModel findKcGroupByLDAPGroup(RealmModel realm, LDAPObject ldapGroup)
Definition: GroupLDAPStorageMapper.java:300

◆ getAllLDAPGroups()

List<LDAPObject> org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.getAllLDAPGroups ( boolean  includeMemberAttribute)
inlineprotected
352  {
353  LDAPQuery ldapGroupQuery = createGroupQuery(includeMemberAttribute);
354  return LDAPUtils.loadAllLDAPObjects(ldapGroupQuery, ldapProvider);
355  }
LDAPQuery createGroupQuery(boolean includeMemberAttribute)
Definition: GroupLDAPStorageMapper.java:91
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44

◆ getConfig()

CommonLDAPGroupMapperConfig org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.getConfig ( )
inline

org.keycloak.storage.ldap.mappers.membership.CommonLDAPGroupMapperを実装しています。

83  {
84  return config;
85  }
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62

◆ getGroupMembers()

List<UserModel> org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.getGroupMembers ( RealmModel  realm,
GroupModel  kcGroup,
int  firstResult,
int  maxResults 
)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

511  {
512  LDAPObject ldapGroup = loadLDAPGroupByName(kcGroup.getName());
513  if (ldapGroup == null) {
514  return Collections.emptyList();
515  }
516 
517  MembershipType membershipType = config.getMembershipTypeLdapAttribute();
518  return membershipType.getGroupMembers(realm, this, ldapGroup, firstResult, maxResults);
519  }
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
abstract List< UserModel > getGroupMembers(RealmModel realm, GroupLDAPStorageMapper groupMapper, LDAPObject ldapGroup, int firstResult, int maxResults)
LDAPObject loadLDAPGroupByName(String groupName)
Definition: GroupLDAPStorageMapper.java:131
MembershipType getMembershipTypeLdapAttribute()
Definition: CommonLDAPGroupMapperConfig.java:64

◆ getHighestPredecessorNotExistentInLdap()

GroupModel org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.getHighestPredecessorNotExistentInLdap ( GroupModel  group)
inlineprivate
490  {
491  GroupModel parentGroup = group.getParent();
492  if (parentGroup == null) {
493  return group;
494  }
495 
496  LDAPObject ldapGroup = loadLDAPGroupByName(parentGroup.getName());
497  if (ldapGroup != null) {
498  // Parent exists in LDAP. Let's return current group
499  return group;
500  } else {
501  // Parent doesn't exists in LDAP. Let's recursively go up.
502  return getHighestPredecessorNotExistentInLdap(parentGroup);
503  }
504  }
LDAPObject loadLDAPGroupByName(String groupName)
Definition: GroupLDAPStorageMapper.java:131
GroupModel getHighestPredecessorNotExistentInLdap(GroupModel group)
Definition: GroupLDAPStorageMapper.java:490

◆ getLDAPGroupMappings()

List<LDAPObject> org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.getLDAPGroupMappings ( LDAPObject  ldapUser)
inlineprotected
561  {
562  String strategyKey = config.getUserGroupsRetrieveStrategy();
563  UserRolesRetrieveStrategy strategy = factory.getUserGroupsRetrieveStrategy(strategyKey);
564 
565  LDAPConfig ldapConfig = ldapProvider.getLdapIdentityStore().getConfig();
566  return strategy.getLDAPRoleMappings(this, ldapUser, ldapConfig);
567  }
LDAPIdentityStore getLdapIdentityStore()
Definition: LDAPStorageProvider.java:126
final GroupLDAPStorageMapperFactory factory
Definition: GroupLDAPStorageMapper.java:63
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
String getUserGroupsRetrieveStrategy()
Definition: GroupMapperConfig.java:123
UserRolesRetrieveStrategy getUserGroupsRetrieveStrategy(String strategyKey)
Definition: GroupLDAPStorageMapperFactory.java:283
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83

◆ getLdapProvider()

LDAPStorageProvider org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.getLdapProvider ( )
inlineinherited
79  {
80  return ldapProvider;
81  }
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44

◆ getLDAPSubgroups()

Set<LDAPDn> org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.getLDAPSubgroups ( LDAPObject  ldapGroup)
inlineprotected
138  {
139  MembershipType membershipType = config.getMembershipTypeLdapAttribute();
140  return membershipType.getLDAPSubgroups(this, ldapGroup);
141  }
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
MembershipType getMembershipTypeLdapAttribute()
Definition: CommonLDAPGroupMapperConfig.java:64

◆ getMembershipUserLdapAttribute()

String org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.getMembershipUserLdapAttribute ( )
inlineprotected
614  {
615  LDAPConfig ldapConfig = ldapProvider.getLdapIdentityStore().getConfig();
616  return config.getMembershipUserLdapAttribute(ldapConfig);
617  }
String getMembershipUserLdapAttribute(LDAPConfig ldapConfig)
Definition: CommonLDAPGroupMapperConfig.java:69
LDAPIdentityStore getLdapIdentityStore()
Definition: LDAPStorageProvider.java:126
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83

◆ loadLDAPGroupByName()

LDAPObject org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.loadLDAPGroupByName ( String  groupName)
inline
131  {
132  LDAPQuery ldapQuery = createGroupQuery(true);
133  Condition roleNameCondition = new LDAPQueryConditionsBuilder().equal(config.getGroupNameLdapAttribute(), groupName);
134  ldapQuery.addWhereCondition(roleNameCondition);
135  return ldapQuery.getFirstResult();
136  }
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
String getGroupNameLdapAttribute()
Definition: GroupMapperConfig.java:82
LDAPQuery createGroupQuery(boolean includeMemberAttribute)
Definition: GroupLDAPStorageMapper.java:91

◆ onAuthenticationFailure()

boolean org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.onAuthenticationFailure ( LDAPObject  ldapUser,
UserModel  user,
AuthenticationException  ldapException,
RealmModel  realm 
)
inlineinherited

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

68  {
69  return false;
70  }

◆ onImportUserFromLDAP()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.onImportUserFromLDAP ( LDAPObject  ldapUser,
UserModel  user,
RealmModel  realm,
boolean  isCreate 
)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

593  {
594  LDAPGroupMapperMode mode = config.getMode();
595 
596  // For now, import LDAP group mappings just during create
597  if (mode == LDAPGroupMapperMode.IMPORT && isCreate) {
598 
599  List<LDAPObject> ldapGroups = getLDAPGroupMappings(ldapUser);
600 
601  // Import role mappings from LDAP into Keycloak DB
602  for (LDAPObject ldapGroup : ldapGroups) {
603 
604  GroupModel kcGroup = findKcGroupOrSyncFromLDAP(realm, ldapGroup, user);
605  if (kcGroup != null) {
606  logger.debugf("User '%s' joins group '%s' during import from LDAP", user.getUsername(), kcGroup.getName());
607  user.joinGroup(kcGroup);
608  }
609  }
610  }
611  }
GroupModel findKcGroupOrSyncFromLDAP(RealmModel realm, LDAPObject ldapGroup, UserModel user)
Definition: GroupLDAPStorageMapper.java:320
static final Logger logger
Definition: GroupLDAPStorageMapper.java:60
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
List< LDAPObject > getLDAPGroupMappings(LDAPObject ldapUser)
Definition: GroupLDAPStorageMapper.java:561
LDAPGroupMapperMode getMode()
Definition: CommonLDAPGroupMapperConfig.java:79

◆ onRegisterUserToLDAP()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.onRegisterUserToLDAP ( LDAPObject  ldapUser,
UserModel  localUser,
RealmModel  realm 
)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

589  {
590  }

◆ parseBooleanParameter()

static boolean org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.parseBooleanParameter ( ComponentModel  mapperModel,
String  paramName 
)
inlinestaticinherited
73  {
74  String paramm = mapperModel.getConfig().getFirst(paramName);
75  return Boolean.parseBoolean(paramm);
76  }
final ComponentModel mapperModel
Definition: AbstractLDAPStorageMapper.java:43
V getFirst(K key)
Definition: MultivaluedHashMap.java:86
MultivaluedHashMap< String, String > getConfig()
Definition: ComponentModel.java:71

◆ processKeycloakGroupMembershipsSyncToLDAP()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.processKeycloakGroupMembershipsSyncToLDAP ( GroupModel  kcGroup,
Map< String, LDAPObject ldapGroupsMap 
)
inlineprivate
457  {
458  LDAPObject ldapGroup = ldapGroupsMap.get(kcGroup.getName());
459  Set<LDAPDn> toRemoveSubgroupsDNs = getLDAPSubgroups(ldapGroup);
460 
461  String membershipUserLdapAttrName = getMembershipUserLdapAttribute(); // Not applicable for groups, but needs to be here
462 
463  // Add LDAP subgroups, which are KC subgroups
464  Set<GroupModel> kcSubgroups = kcGroup.getSubGroups();
465  for (GroupModel kcSubgroup : kcSubgroups) {
466  LDAPObject ldapSubgroup = ldapGroupsMap.get(kcSubgroup.getName());
467  LDAPUtils.addMember(ldapProvider, MembershipType.DN, config.getMembershipLdapAttribute(), membershipUserLdapAttrName, ldapGroup, ldapSubgroup, false);
468  toRemoveSubgroupsDNs.remove(ldapSubgroup.getDn());
469  }
470 
471  // Remove LDAP subgroups, which are not members in KC anymore
472  for (LDAPDn toRemoveDN : toRemoveSubgroupsDNs) {
473  LDAPObject fakeGroup = new LDAPObject();
474  fakeGroup.setDn(toRemoveDN);
475  LDAPUtils.deleteMember(ldapProvider, MembershipType.DN, config.getMembershipLdapAttribute(), membershipUserLdapAttrName, ldapGroup, fakeGroup);
476  }
477 
478  // Update group to LDAP
479  if (!kcGroup.getSubGroups().isEmpty() || !toRemoveSubgroupsDNs.isEmpty()) {
481  }
482 
483  for (GroupModel kcSubgroup : kcGroup.getSubGroups()) {
484  processKeycloakGroupMembershipsSyncToLDAP(kcSubgroup, ldapGroupsMap);
485  }
486  }
LDAPIdentityStore getLdapIdentityStore()
Definition: LDAPStorageProvider.java:126
void update(LDAPObject ldapObject)
Definition: LDAPIdentityStore.java:105
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
Set< LDAPDn > getLDAPSubgroups(LDAPObject ldapGroup)
Definition: GroupLDAPStorageMapper.java:138
void processKeycloakGroupMembershipsSyncToLDAP(GroupModel kcGroup, Map< String, LDAPObject > ldapGroupsMap)
Definition: GroupLDAPStorageMapper.java:457
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
String getMembershipUserLdapAttribute()
Definition: GroupLDAPStorageMapper.java:614
String getMembershipLdapAttribute()
Definition: CommonLDAPGroupMapperConfig.java:59

◆ processKeycloakGroupSyncToLDAP()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.processKeycloakGroupSyncToLDAP ( GroupModel  kcGroup,
Map< String, LDAPObject ldapGroupsMap,
Set< String >  ldapGroupNames,
SynchronizationResult  syncResult 
)
inlineprivate
422  {
423  String groupName = kcGroup.getName();
424 
425  // extract group attributes to be updated to LDAP
426  Map<String, Set<String>> supportedLdapAttributes = new HashMap<>();
427  for (String attrName : config.getGroupAttributes()) {
428  List<String> kcAttrValues = kcGroup.getAttribute(attrName);
429  Set<String> attrValues2 = (kcAttrValues == null || kcAttrValues.isEmpty()) ? null : new HashSet<>(kcAttrValues);
430  supportedLdapAttributes.put(attrName, attrValues2);
431  }
432 
433  LDAPObject ldapGroup = ldapGroupsMap.get(groupName);
434 
435  if (ldapGroup == null) {
436  ldapGroup = createLDAPGroup(groupName, supportedLdapAttributes);
437  syncResult.increaseAdded();
438  } else {
439  for (Map.Entry<String, Set<String>> attrEntry : supportedLdapAttributes.entrySet()) {
440  ldapGroup.setAttribute(attrEntry.getKey(), attrEntry.getValue());
441  }
442 
444  syncResult.increaseUpdated();
445  }
446 
447  ldapGroupsMap.put(groupName, ldapGroup);
448  ldapGroupNames.add(groupName);
449 
450  // process KC subgroups
451  for (GroupModel kcSubgroup : kcGroup.getSubGroups()) {
452  processKeycloakGroupSyncToLDAP(kcSubgroup, ldapGroupsMap, ldapGroupNames, syncResult);
453  }
454  }
void processKeycloakGroupSyncToLDAP(GroupModel kcGroup, Map< String, LDAPObject > ldapGroupsMap, Set< String > ldapGroupNames, SynchronizationResult syncResult)
Definition: GroupLDAPStorageMapper.java:422
LDAPObject createLDAPGroup(String groupName, Map< String, Set< String >> additionalAttributes)
Definition: GroupLDAPStorageMapper.java:123
Collection< String > getGroupAttributes()
Definition: GroupMapperConfig.java:110
LDAPIdentityStore getLdapIdentityStore()
Definition: LDAPStorageProvider.java:126
void update(LDAPObject ldapObject)
Definition: LDAPIdentityStore.java:105
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44

◆ proxy()

UserModel org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.proxy ( LDAPObject  ldapUser,
UserModel  delegate,
RealmModel  realm 
)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

577  {
578  final LDAPGroupMapperMode mode = config.getMode();
579 
580  // For IMPORT mode, all operations are performed against local DB
581  if (mode == LDAPGroupMapperMode.IMPORT) {
582  return delegate;
583  } else {
584  return new LDAPGroupMappingsUserDelegate(realm, delegate, ldapUser);
585  }
586  }
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
LDAPGroupMapperMode getMode()
Definition: CommonLDAPGroupMapperConfig.java:79

◆ syncDataFromFederationProviderToKeycloak()

SynchronizationResult org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.syncDataFromFederationProviderToKeycloak ( RealmModel  realm)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

147  {
148  SynchronizationResult syncResult = new SynchronizationResult() {
149 
150  @Override
151  public String getStatus() {
152  return String.format("%d imported groups, %d updated groups, %d removed groups", getAdded(), getUpdated(), getRemoved());
153  }
154 
155  };
156 
157  logger.debugf("Syncing groups from LDAP into Keycloak DB. Mapper is [%s], LDAP provider is [%s]", mapperModel.getName(), ldapProvider.getModel().getName());
158 
159  // Get all LDAP groups
160  List<LDAPObject> ldapGroups = getAllLDAPGroups(config.isPreserveGroupsInheritance());
161 
162  // Convert to internal format
163  Map<String, LDAPObject> ldapGroupsMap = new HashMap<>();
164  List<GroupTreeResolver.Group> ldapGroupsRep = new LinkedList<>();
165 
166  String groupsRdnAttr = config.getGroupNameLdapAttribute();
167  for (LDAPObject ldapGroup : ldapGroups) {
168  String groupName = ldapGroup.getAttributeAsString(groupsRdnAttr);
169 
171  Set<String> subgroupNames = new HashSet<>();
172  for (LDAPDn groupDn : getLDAPSubgroups(ldapGroup)) {
173  subgroupNames.add(groupDn.getFirstRdnAttrValue());
174  }
175 
176  ldapGroupsRep.add(new GroupTreeResolver.Group(groupName, subgroupNames));
177  }
178 
179  ldapGroupsMap.put(groupName, ldapGroup);
180  }
181 
182  // Now we have list of LDAP groups. Let's form the tree (if needed)
184  try {
185  List<GroupTreeResolver.GroupTreeEntry> groupTrees = new GroupTreeResolver().resolveGroupTree(ldapGroupsRep, config.isIgnoreMissingGroups());
186 
187  updateKeycloakGroupTree(realm, groupTrees, ldapGroupsMap, syncResult);
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);
190  }
191  } else {
192  Set<String> visitedGroupIds = new HashSet<>();
193 
194  // Just add flat structure of groups with all groups at top-level
195  for (Map.Entry<String, LDAPObject> groupEntry : ldapGroupsMap.entrySet()) {
196  String groupName = groupEntry.getKey();
197  GroupModel kcExistingGroup = KeycloakModelUtils.findGroupByPath(realm, "/" + groupName);
198 
199  if (kcExistingGroup != null) {
200  updateAttributesOfKCGroup(kcExistingGroup, groupEntry.getValue());
201  syncResult.increaseUpdated();
202  visitedGroupIds.add(kcExistingGroup.getId());
203  } else {
204  GroupModel kcGroup = realm.createGroup(groupName);
205  updateAttributesOfKCGroup(kcGroup, groupEntry.getValue());
206  realm.moveGroup(kcGroup, null);
207  syncResult.increaseAdded();
208  visitedGroupIds.add(kcGroup.getId());
209  }
210  }
211 
212  // Possibly remove keycloak groups, which doesn't exists in LDAP
214  dropNonExistingKcGroups(realm, syncResult, visitedGroupIds);
215  }
216  }
217 
219 
220  return syncResult;
221  }
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

◆ syncDataFromKeycloakToFederationProvider()

SynchronizationResult org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.syncDataFromKeycloakToFederationProvider ( RealmModel  realm)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

360  {
361  SynchronizationResult syncResult = new SynchronizationResult() {
362 
363  @Override
364  public String getStatus() {
365  return String.format("%d groups imported to LDAP, %d groups updated to LDAP, %d groups removed from LDAP", getAdded(), getUpdated(), getRemoved());
366  }
367 
368  };
369 
370  if (config.getMode() != LDAPGroupMapperMode.LDAP_ONLY) {
371  logger.warnf("Ignored sync for federation mapper '%s' as it's mode is '%s'", mapperModel.getName(), config.getMode().toString());
372  return syncResult;
373  }
374 
375  logger.debugf("Syncing groups from Keycloak into LDAP. Mapper is [%s], LDAP provider is [%s]", mapperModel.getName(), ldapProvider.getModel().getName());
376 
377  // Query existing LDAP groups
378  LDAPQuery ldapQuery = createGroupQuery(config.isPreserveGroupsInheritance());
379  List<LDAPObject> ldapGroups = ldapQuery.getResultList();
380 
381  // Convert them to Map<String, LDAPObject>
382  Map<String, LDAPObject> ldapGroupsMap = new HashMap<>();
383  String groupsRdnAttr = config.getGroupNameLdapAttribute();
384  for (LDAPObject ldapGroup : ldapGroups) {
385  String groupName = ldapGroup.getAttributeAsString(groupsRdnAttr);
386  ldapGroupsMap.put(groupName, ldapGroup);
387  }
388 
389  // Map to track all LDAP groups also exists in Keycloak
390  Set<String> ldapGroupNames = new HashSet<>();
391 
392  // Create or update KC groups to LDAP including their attributes
393  for (GroupModel kcGroup : realm.getTopLevelGroups()) {
394  processKeycloakGroupSyncToLDAP(kcGroup, ldapGroupsMap, ldapGroupNames, syncResult);
395  }
396 
397  // If dropNonExisting, then drop all groups, which doesn't exist in KC from LDAP as well
399  Set<String> copy = new HashSet<>(ldapGroupsMap.keySet());
400  for (String groupName : copy) {
401  if (!ldapGroupNames.contains(groupName)) {
402  LDAPObject ldapGroup = ldapGroupsMap.remove(groupName);
404  syncResult.increaseRemoved();
405  }
406  }
407  }
408 
409  // Finally process memberships,
411  for (GroupModel kcGroup : realm.getTopLevelGroups()) {
412  processKeycloakGroupMembershipsSyncToLDAP(kcGroup, ldapGroupsMap);
413  }
414  }
415 
416  return syncResult;
417  }
void processKeycloakGroupSyncToLDAP(GroupModel kcGroup, Map< String, LDAPObject > ldapGroupsMap, Set< String > ldapGroupNames, SynchronizationResult syncResult)
Definition: GroupLDAPStorageMapper.java:422
LDAPIdentityStore getLdapIdentityStore()
Definition: LDAPStorageProvider.java:126
final ComponentModel mapperModel
Definition: AbstractLDAPStorageMapper.java:43
static final Logger logger
Definition: GroupLDAPStorageMapper.java:60
List< LDAPObject > getResultList()
Definition: LDAPQuery.java:152
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
void remove(LDAPObject ldapObject)
Definition: LDAPIdentityStore.java:152
String getGroupNameLdapAttribute()
Definition: GroupMapperConfig.java:82
boolean isDropNonExistingGroupsDuringSync()
Definition: GroupMapperConfig.java:119
void processKeycloakGroupMembershipsSyncToLDAP(GroupModel kcGroup, Map< String, LDAPObject > ldapGroupsMap)
Definition: GroupLDAPStorageMapper.java:457
LDAPQuery createGroupQuery(boolean includeMemberAttribute)
Definition: GroupLDAPStorageMapper.java:91
UserStorageProviderModel getModel()
Definition: LDAPStorageProvider.java:134
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
boolean isPreserveGroupsInheritance()
Definition: GroupMapperConfig.java:92
LDAPGroupMapperMode getMode()
Definition: CommonLDAPGroupMapperConfig.java:79
String getName()
Definition: ComponentModel.java:63

◆ updateAttributesOfKCGroup()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.updateAttributesOfKCGroup ( GroupModel  kcGroup,
LDAPObject  ldapGroup 
)
inlineprivate
286  {
287  Collection<String> groupAttributes = config.getGroupAttributes();
288 
289  for (String attrName : groupAttributes) {
290  Set<String> attrValues = ldapGroup.getAttributeAsSet(attrName);
291  if (attrValues==null) {
292  kcGroup.removeAttribute(attrName);
293  } else {
294  kcGroup.setAttribute(attrName, new LinkedList<>(attrValues));
295  }
296  }
297  }
Collection< String > getGroupAttributes()
Definition: GroupMapperConfig.java:110
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62

◆ updateKeycloakGroupTree()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.updateKeycloakGroupTree ( RealmModel  realm,
List< GroupTreeResolver.GroupTreeEntry >  groupTrees,
Map< String, LDAPObject ldapGroups,
SynchronizationResult  syncResult 
)
inlineprivate
223  {
224  Set<String> visitedGroupIds = new HashSet<>();
225 
226  for (GroupTreeResolver.GroupTreeEntry groupEntry : groupTrees) {
227  updateKeycloakGroupTreeEntry(realm, groupEntry, ldapGroups, null, syncResult, visitedGroupIds);
228  }
229 
230  // Possibly remove keycloak groups, which doesn't exists in LDAP
232  dropNonExistingKcGroups(realm, syncResult, visitedGroupIds);
233  }
234  }
final GroupMapperConfig config
Definition: GroupLDAPStorageMapper.java:62
boolean isDropNonExistingGroupsDuringSync()
Definition: GroupMapperConfig.java:119
void updateKeycloakGroupTreeEntry(RealmModel realm, GroupTreeResolver.GroupTreeEntry groupTreeEntry, Map< String, LDAPObject > ldapGroups, GroupModel kcParent, SynchronizationResult syncResult, Set< String > visitedGroupIds)
Definition: GroupLDAPStorageMapper.java:236
void dropNonExistingKcGroups(RealmModel realm, SynchronizationResult syncResult, Set< String > visitedGroupIds)
Definition: GroupLDAPStorageMapper.java:274

◆ updateKeycloakGroupTreeEntry()

void org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.updateKeycloakGroupTreeEntry ( RealmModel  realm,
GroupTreeResolver.GroupTreeEntry  groupTreeEntry,
Map< String, LDAPObject ldapGroups,
GroupModel  kcParent,
SynchronizationResult  syncResult,
Set< String >  visitedGroupIds 
)
inlineprivate
236  {
237  String groupName = groupTreeEntry.getGroupName();
238 
239  // Check if group already exists
240  GroupModel kcGroup = null;
241  Collection<GroupModel> subgroups = kcParent == null ? realm.getTopLevelGroups() : kcParent.getSubGroups();
242  for (GroupModel group : subgroups) {
243  if (group.getName().equals(groupName)) {
244  kcGroup = group;
245  break;
246  }
247  }
248 
249  if (kcGroup != null) {
250  logger.debugf("Updated Keycloak group '%s' from LDAP", kcGroup.getName());
251  updateAttributesOfKCGroup(kcGroup, ldapGroups.get(kcGroup.getName()));
252  syncResult.increaseUpdated();
253  } else {
254  kcGroup = realm.createGroup(groupTreeEntry.getGroupName());
255  if (kcParent == null) {
256  realm.moveGroup(kcGroup, null);
257  logger.debugf("Imported top-level group '%s' from LDAP", kcGroup.getName());
258  } else {
259  realm.moveGroup(kcGroup, kcParent);
260  logger.debugf("Imported group '%s' from LDAP as child of group '%s'", kcGroup.getName(), kcParent.getName());
261  }
262 
263  updateAttributesOfKCGroup(kcGroup, ldapGroups.get(kcGroup.getName()));
264  syncResult.increaseAdded();
265  }
266 
267  visitedGroupIds.add(kcGroup.getId());
268 
269  for (GroupTreeResolver.GroupTreeEntry childEntry : groupTreeEntry.getChildren()) {
270  updateKeycloakGroupTreeEntry(realm, childEntry, ldapGroups, kcGroup, syncResult, visitedGroupIds);
271  }
272  }
static final Logger logger
Definition: GroupLDAPStorageMapper.java:60
void updateAttributesOfKCGroup(GroupModel kcGroup, LDAPObject ldapGroup)
Definition: GroupLDAPStorageMapper.java:286
void updateKeycloakGroupTreeEntry(RealmModel realm, GroupTreeResolver.GroupTreeEntry groupTreeEntry, Map< String, LDAPObject > ldapGroups, GroupModel kcParent, SynchronizationResult syncResult, Set< String > visitedGroupIds)
Definition: GroupLDAPStorageMapper.java:236

メンバ詳解

◆ config

final GroupMapperConfig org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.config
private

◆ factory

final GroupLDAPStorageMapperFactory org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.factory
private

◆ ldapProvider

final LDAPStorageProvider org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.ldapProvider
protectedinherited

◆ logger

final Logger org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.logger = Logger.getLogger(GroupLDAPStorageMapper.class)
staticprivate

◆ mapperModel

final ComponentModel org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.mapperModel
protectedinherited

◆ session

final KeycloakSession org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.session
protectedinherited

◆ syncFromLDAPPerformedInThisTransaction

boolean org.keycloak.storage.ldap.mappers.membership.group.GroupLDAPStorageMapper.syncFromLDAPPerformedInThisTransaction = false
private

このクラス詳解は次のファイルから抽出されました: