88import org .springframework .ldap .core .CollectingNameClassPairCallbackHandler ;
99import org .springframework .ldap .core .LdapTemplate ;
1010import org .springframework .ldap .filter .AndFilter ;
11- import org .springframework .ldap .filter .WhitespaceWildcardsFilter ;
11+ import org .springframework .ldap .filter .EqualsFilter ;
12+ import org .springframework .ldap .support .LdapEncoder ;
1213import org .springframework .ldap .support .LdapUtils ;
1314
15+ import java .util .Arrays ;
1416import java .util .List ;
1517import java .util .function .Supplier ;
18+ import java .util .stream .Collectors ;
19+ import java .util .stream .IntStream ;
1620
1721import static org .ohdsi .webapi .user .importer .providers .OhdsiLdapUtils .getCriteria ;
1822import static org .ohdsi .webapi .user .importer .providers .OhdsiLdapUtils .valueAsString ;
@@ -24,12 +28,29 @@ public abstract class AbstractLdapProvider implements LdapProvider {
2428
2529 @ Override
2630 public List <LdapGroup > findGroups (String searchStr ) {
27-
2831 LdapTemplate ldapTemplate = getLdapTemplate ();
29- AndFilter filter = new AndFilter ();
30- // filter.and(getCriteria(OBJECTCLASS_ATTR, getGroupClasses()));
31- filter .and (new WhitespaceWildcardsFilter (CN_ATTR , searchStr ));
32- return ldapTemplate .search (LdapUtils .emptyLdapName (), filter .encode (), getAttributesMapper (LdapGroup ::new ));
32+ return ldapTemplate .search (LdapUtils .emptyLdapName (), getFilterString (searchStr ), getAttributesMapper (LdapGroup ::new ));
33+ }
34+
35+ private String getFilterString (String searchString ) {
36+ StringBuffer buff = new StringBuffer ();
37+ buff .append ('(' );
38+ buff .append (CN_ATTR ).append ("=" ).append (encodeSearchString (searchString ));
39+ buff .append (')' );
40+ return buff .toString ();
41+ }
42+
43+ private String encodeSearchString (String searchString ) {
44+ String wildCard = "*" ;
45+
46+ if (searchString .isEmpty () || wildCard .equals (searchString )) return searchString ; // nothing to encode
47+
48+ List <String > tokens = Arrays .asList (StringUtils .split (searchString , wildCard ));
49+ tokens .replaceAll (LdapEncoder ::filterEncode );
50+ String encodedSearchString = (searchString .startsWith (wildCard ) ? wildCard : "" ) +
51+ StringUtils .join (tokens , wildCard ) +
52+ (searchString .endsWith (wildCard ) ? wildCard : "" );
53+ return encodedSearchString ;
3354 }
3455
3556 @ Override
0 commit comments