@@ -99,10 +99,10 @@ public LDAPGroupSyncUtilImpl(ApplicationProperties props, GroupManager groupMana
9999 }
100100 }
101101
102- public List <String > getUsersInGroup (LdapContext ctx , String groupName ) {
102+ public List <String > getUsersInLdapGroup (LdapContext ctx , String groupNameSpace ) {
103103 List <String > users = new ArrayList <String >();
104104 try {
105- String searchFilter = MessageFormat .format (UserMemberSearchFilter , groupName );
105+ String searchFilter = MessageFormat .format (UserMemberSearchFilter , groupNameSpace );
106106
107107 NamingEnumeration answer = ctx .search (baseDn , searchFilter , getMemberSearchControls ());
108108 while (answer .hasMoreElements ()) {
@@ -125,7 +125,7 @@ public List<String> getUsersInGroup(LdapContext ctx, String groupName) {
125125 return users ;
126126 }
127127
128- public List <String > getNestedGroups (LdapContext ctx , String groupName ) {
128+ public List <String > getNestedLdapGroups (LdapContext ctx , String groupName ) {
129129 List <String > groups = new ArrayList <String >();
130130 try {
131131 if ( ctx != null ) {
@@ -144,8 +144,7 @@ public List<String> getNestedGroups(LdapContext ctx, String groupName) {
144144 return groups ;
145145 }
146146
147- public Set <String > getGroupMembers (LdapContext ctx , String groupName ) {
148- Set <String > users = null ;
147+ public SearchResult getGroupSearchResult (LdapContext ctx , String groupName ) {
149148 try {
150149 if ( ctx != null ) {
151150 String searchFilter = MessageFormat .format (GroupSearchFilter , groupName );
@@ -154,25 +153,37 @@ public Set<String> getGroupMembers(LdapContext ctx, String groupName) {
154153
155154 if (answer .hasMoreElements ()) {
156155 SearchResult sr = (SearchResult )answer .next ();
157- logger .debug (">>>" + sr .getNameInNamespace ());
156+ return sr ;
157+ }
158+ } else {
159+ logger .error ("LDAP Connection Null or Failed." );
160+ }
161+ } catch (NamingException e ) {
162+ logger .error (e );
163+ }
164+
165+ return null ;
166+ }
167+
168+ public Set <String > getLdapGroupMembers (LdapContext ctx , SearchResult sr , Set <String > users )
169+ {
170+ try {
171+ if ( ctx != null ) {
172+ if (sr != null ) {
173+ logger .debug (" >>>" + sr .getNameInNamespace ());
158174
159- users = new HashSet <String >(); // create set object
160-
161- List <String > new_users_list = getUsersInGroup (ctx , sr .getNameInNamespace ());
162- if (new_users_list .size () > 0 ) {
163- users .addAll (new_users_list );
164- }
175+ users .addAll (getUsersInLdapGroup (ctx , sr .getNameInNamespace ()));
165176
166177 // support nested groups
167178 if ("TRUE" .equalsIgnoreCase (IsNested )) {
168- List < String > groups = getNestedGroups ( ctx , sr .getNameInNamespace ());
169- if ( groups . size () > 0 ) {
170- for ( String group : groups ) {
171- List < String > nested_user_list = getUsersInGroup ( ctx , group );
172- if ( nested_user_list . size () > 0 ) {
173- users . addAll ( nested_user_list );
174- }
175- }
179+ String searchGroupFilter = MessageFormat . format ( GroupMemberSearchFilter , sr .getNameInNamespace ());
180+
181+ NamingEnumeration groupAnswer = ctx . search ( baseDn , searchGroupFilter , getGroupSearchControls ());
182+
183+ while ( groupAnswer . hasMoreElements () ) {
184+ SearchResult gsr = ( SearchResult ) groupAnswer . next ( );
185+ logger . debug ( "*** processing nested group *** " + gsr . getName ());
186+ getLdapGroupMembers ( ctx , gsr , users );
176187 }
177188 }
178189 }
@@ -302,8 +313,9 @@ public void createJiraGroup(String groupName) {
302313 }
303314 }
304315
316+
317+
305318 public MessageBean sync (LdapContext ctx , String ldap_group , String jira_group ) {
306-
307319 logger .debug (" >>> " + ldap_group +" : " + jira_group +" <<< " );
308320 MessageBean message = new MessageBean ();
309321
@@ -313,41 +325,67 @@ public MessageBean sync(LdapContext ctx, String ldap_group, String jira_group) {
313325 return message ;
314326 }
315327
316- Set <String > ldap_group_users = getGroupMembers (ctx , ldap_group );
317- if ( ldap_group_users == null ) {
318- logger .debug ("LDAP Group (" +ldap_group +") does not exists." );
319- message .setMessage ("LDAP Group (" +ldap_group +") does not exists." );
320- message .setStatus (1 );
321-
322- } else {
323-
324- logger .debug (" >>> Size: " + ldap_group_users .size ());
325-
326- List <String > jira_group_users = getJiraGroupMembers (jira_group );
327- if ( jira_group_users != null ) {
328- for (String j : jira_group_users ) {
329- if (!ldap_group_users .contains (j )) {
330- removeUserFromJiraGroup (j , jira_group );
328+ long index = process (ctx , ldap_group , jira_group );
329+ message .setMessage ("Successful. Fetch Size(" +index +")" );
330+ message .setStatus (0 );
331+
332+ return message ;
333+ }
334+
335+ public Set <String > getLdapGroupStrings (String ldapGroup ) {
336+ Set <String > groups = new HashSet <String >();
337+ String [] fields = ldapGroup .trim ().split ("," );
338+ for (String f : fields ){
339+ groups .add (f .trim ());
340+ }
341+ return groups ;
342+ }
343+
344+ public long process (LdapContext ctx , String ldap_group , String jira_group ) {
345+
346+ long index = 0 ;
347+
348+ Set <String > ldapGroupStrings = getLdapGroupStrings (ldap_group );
349+
350+ Set <String > ldap_group_users = new HashSet <String >();
351+
352+ for (String lGroup : ldapGroupStrings ) {
353+ logger .debug ("*** Processing Ldap Group (" +lGroup +")." );
354+ SearchResult sr = getGroupSearchResult (ctx , lGroup );
355+
356+ ldap_group_users .addAll (getLdapGroupMembers (ctx , sr , ldap_group_users ));
357+
358+ if ( ldap_group_users .isEmpty () ) {
359+ logger .debug ("LDAP Group (" +lGroup +") does not exists." );
360+
361+ } else {
362+
363+ logger .debug (" >>> Size: " + ldap_group_users .size ());
364+ index = ldap_group_users .size ();
365+
366+ List <String > jira_group_users = getJiraGroupMembers (jira_group );
367+ if ( jira_group_users != null ) {
368+ for (String j : jira_group_users ) {
369+ if (!ldap_group_users .contains (j )) {
370+ removeUserFromJiraGroup (j , jira_group );
371+ }
331372 }
332- }
333- for (String i : ldap_group_users ) {
334- if (!jira_group_users .contains (i )) {
373+ for (String i : ldap_group_users ) {
374+ if (!jira_group_users .contains (i )) {
375+ addUserToJiraGroup (i , jira_group );
376+ }
377+ }
378+ } else {
379+ logger .debug ("JIRA Group members return NULL. So adding LDAP users." );
380+ for (String i : ldap_group_users ) {
335381 addUserToJiraGroup (i , jira_group );
336382 }
337383 }
338- } else {
339- logger .debug ("JIRA Group members return NULL. So adding LDAP users." );
340- for (String i : ldap_group_users ) {
341- addUserToJiraGroup (i , jira_group );
342- }
343384 }
344-
345- message .setMessage ("Successful. Fetch Size(" +ldap_group_users .size ()+")" );
346- message .setStatus (0 );
347385
348386 }
349387
350- return message ;
388+ return index ;
351389 }
352390
353391 public void setLdapUrl (String ldapUrl ) {
0 commit comments