Fix query generation
This commit is contained in:
@@ -72,7 +72,7 @@ public class LdapAuthProvider extends LdapGenericBackend implements Authenticato
|
|||||||
return BackendAuthResult.failure();
|
return BackendAuthResult.failure();
|
||||||
}
|
}
|
||||||
|
|
||||||
String userFilter = "(" + getCfg().getAttribute().getUid().getValue() + "=" + userFilterValue + ")";
|
String userFilter = "(" + getUidAtt() + "=" + userFilterValue + ")";
|
||||||
userFilter = buildWithFilter(userFilter, getCfg().getAuth().getFilter());
|
userFilter = buildWithFilter(userFilter, getCfg().getAuth().getFilter());
|
||||||
try (EntryCursor cursor = conn.search(getBaseDn(), userFilter, SearchScope.SUBTREE, getUidAtt(), getAt().getName())) {
|
try (EntryCursor cursor = conn.search(getBaseDn(), userFilter, SearchScope.SUBTREE, getUidAtt(), getAt().getName())) {
|
||||||
while (cursor.next()) {
|
while (cursor.next()) {
|
||||||
@@ -80,15 +80,7 @@ public class LdapAuthProvider extends LdapGenericBackend implements Authenticato
|
|||||||
String dn = entry.getDn().getName();
|
String dn = entry.getDn().getName();
|
||||||
log.info("Checking possible match, DN: {}", dn);
|
log.info("Checking possible match, DN: {}", dn);
|
||||||
|
|
||||||
Attribute attribute = entry.get(getUidAtt());
|
if (!getAttribute(entry, getUidAtt()).isPresent()) {
|
||||||
if (attribute == null) {
|
|
||||||
log.info("DN {}: no attribute {}, skpping", dn, getUidAtt());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
String data = attribute.get().toString();
|
|
||||||
if (data.length() < 1) {
|
|
||||||
log.info("DN {}: empty attribute {}, skipping", getUidAtt());
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -33,6 +33,7 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public abstract class LdapGenericBackend {
|
public abstract class LdapGenericBackend {
|
||||||
@@ -66,7 +67,7 @@ public abstract class LdapGenericBackend {
|
|||||||
return getAt().getUid().getValue();
|
return getAt().getUid().getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected LdapConnection getConn() {
|
protected synchronized LdapConnection getConn() throws LdapException {
|
||||||
return new LdapNetworkConnection(cfg.getConn().getHost(), cfg.getConn().getPort(), cfg.getConn().isTls());
|
return new LdapNetworkConnection(cfg.getConn().getHost(), cfg.getConn().getPort(), cfg.getConn().isTls());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,10 +87,14 @@ public abstract class LdapGenericBackend {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String buildOrQuery(String value, String... attributes) {
|
public static String buildOrQuery(String value, List<String> attributes) {
|
||||||
|
if (attributes.size() < 1) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
builder.append("(|");
|
builder.append("(|");
|
||||||
Arrays.stream(attributes).forEach(s -> {
|
attributes.forEach(s -> {
|
||||||
builder.append("(");
|
builder.append("(");
|
||||||
builder.append(s).append("=").append(value).append(")");
|
builder.append(s).append("=").append(value).append(")");
|
||||||
});
|
});
|
||||||
@@ -97,6 +102,10 @@ public abstract class LdapGenericBackend {
|
|||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String buildOrQuery(String value, String... attributes) {
|
||||||
|
return buildOrQuery(value, Arrays.asList(attributes));
|
||||||
|
}
|
||||||
|
|
||||||
public String buildOrQueryWithFilter(String filter, String value, String... attributes) {
|
public String buildOrQueryWithFilter(String filter, String value, String... attributes) {
|
||||||
return buildWithFilter(buildOrQuery(value, attributes), filter);
|
return buildWithFilter(buildOrQuery(value, attributes), filter);
|
||||||
}
|
}
|
||||||
|
@@ -80,10 +80,13 @@ public class LdapThreePidProvider extends LdapGenericBackend implements IThreePi
|
|||||||
Entry entry = cursor.get();
|
Entry entry = cursor.get();
|
||||||
log.info("Found possible match, DN: {}", entry.getDn().getName());
|
log.info("Found possible match, DN: {}", entry.getDn().getName());
|
||||||
|
|
||||||
getAttribute(entry, getUidAtt()).map(uid -> {
|
Optional<String> data = getAttribute(entry, getUidAtt());
|
||||||
log.info("DN {} is a valid match", entry.getDn().getName());
|
if (!data.isPresent()) {
|
||||||
return buildMatrixIdFromUid(uid);
|
continue;
|
||||||
});
|
}
|
||||||
|
|
||||||
|
log.info("DN {} is a valid match", entry.getDn().getName());
|
||||||
|
return Optional.of(buildMatrixIdFromUid(data.get()));
|
||||||
}
|
}
|
||||||
} catch (CursorLdapReferralException e) {
|
} catch (CursorLdapReferralException e) {
|
||||||
log.warn("3PID {} is only available via referral, skipping", value);
|
log.warn("3PID {} is only available via referral, skipping", value);
|
||||||
@@ -100,13 +103,10 @@ public class LdapThreePidProvider extends LdapGenericBackend implements IThreePi
|
|||||||
|
|
||||||
try (LdapConnection conn = getConn()) {
|
try (LdapConnection conn = getConn()) {
|
||||||
bind(conn);
|
bind(conn);
|
||||||
lookup(conn, request.getType(), request.getThreePid()).map(id -> new SingleLookupReply(request, id));
|
return lookup(conn, request.getType(), request.getThreePid()).map(id -> new SingleLookupReply(request, id));
|
||||||
} catch (LdapException | IOException e) {
|
} catch (LdapException | IOException e) {
|
||||||
throw new InternalServerError(e);
|
throw new InternalServerError(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("No match found");
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -159,9 +159,9 @@ public class LdapConfig {
|
|||||||
attribute.getThreepid().forEach((k, v) -> {
|
attribute.getThreepid().forEach((k, v) -> {
|
||||||
if (StringUtils.isBlank(identity.getMedium().get(k))) {
|
if (StringUtils.isBlank(identity.getMedium().get(k))) {
|
||||||
if (ThreePidMedium.PhoneNumber.is(k)) {
|
if (ThreePidMedium.PhoneNumber.is(k)) {
|
||||||
identity.getMedium().put(k, LdapGenericBackend.buildOrQuery("+" + getIdentity().getToken()));
|
identity.getMedium().put(k, LdapGenericBackend.buildOrQuery("+" + getIdentity().getToken(), v));
|
||||||
} else {
|
} else {
|
||||||
identity.getMedium().put(k, LdapGenericBackend.buildOrQuery(getIdentity().getToken()));
|
identity.getMedium().put(k, LdapGenericBackend.buildOrQuery(getIdentity().getToken(), v));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user