Skip to content

Commit bb5d12d

Browse files
authored
Wildcard is not used now by default. User has to set it explicitly if needed (#2277)
Fixes #1790.
1 parent dc76db9 commit bb5d12d

1 file changed

Lines changed: 27 additions & 6 deletions

File tree

src/main/java/org/ohdsi/webapi/user/importer/providers/AbstractLdapProvider.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@
88
import org.springframework.ldap.core.CollectingNameClassPairCallbackHandler;
99
import org.springframework.ldap.core.LdapTemplate;
1010
import 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;
1213
import org.springframework.ldap.support.LdapUtils;
1314

15+
import java.util.Arrays;
1416
import java.util.List;
1517
import java.util.function.Supplier;
18+
import java.util.stream.Collectors;
19+
import java.util.stream.IntStream;
1620

1721
import static org.ohdsi.webapi.user.importer.providers.OhdsiLdapUtils.getCriteria;
1822
import 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

Comments
 (0)