Skip to content

Commit

Permalink
Merge pull request #24245 from geoand/#24242
Browse files Browse the repository at this point in the history
Add connect and read timeout config to elytron ldap extension
  • Loading branch information
geoand authored Mar 10, 2022
2 parents d3da73b + aa7ca62 commit b62e798
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ private ExceptionSupplier<DirContext, NamingException> createDirContextSupplier(
DirContextFactory dirContextFactory = new QuarkusDirContextFactory(
dirContext.url,
dirContext.principal.orElse(null),
dirContext.password.orElse(null));
dirContext.password.orElse(null),
dirContext.connectTimeout,
dirContext.readTimeout);
return () -> dirContextFactory.obtainDirContext(dirContext.referralMode);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.security.AccessController;
import java.security.PrivilegedAction;
import java.time.Duration;
import java.util.Hashtable;

import javax.naming.NamingException;
Expand All @@ -24,18 +25,20 @@ public class QuarkusDirContextFactory implements DirContextFactory {
public static final String INITIAL_CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
private static final String SECURITY_AUTHENTICATION = "simple";

private static final String DEFAULT_CONNECT_TIMEOUT = "5000"; // ms
private static final String DEFAULT_READ_TIMEOUT = "60000"; // ms

private final String providerUrl;
private final String securityPrincipal;
private final String securityCredential;
private final Duration connectTimeout;
private final Duration readTimeout;
private final ClassLoader targetClassLoader;

public QuarkusDirContextFactory(String providerUrl, String securityPrincipal, String securityCredential) {
public QuarkusDirContextFactory(String providerUrl, String securityPrincipal, String securityCredential,
Duration connectTimeout, Duration readTimeout) {
this.providerUrl = providerUrl;
this.securityPrincipal = securityPrincipal;
this.securityCredential = securityCredential;
this.connectTimeout = connectTimeout;
this.readTimeout = readTimeout;
this.targetClassLoader = getClass().getClassLoader();
}

Expand Down Expand Up @@ -93,8 +96,8 @@ private DirContext createDirContext(String securityPrincipal, char[] securityCre
env.put(InitialDirContext.SECURITY_CREDENTIALS, securityCredential);
}
env.put(InitialDirContext.REFERRAL, mode == null ? ReferralMode.IGNORE.getValue() : mode.getValue());
env.put(CONNECT_TIMEOUT, DEFAULT_CONNECT_TIMEOUT);
env.put(READ_TIMEOUT, DEFAULT_READ_TIMEOUT);
env.put(CONNECT_TIMEOUT, "" + connectTimeout.toMillis());
env.put(READ_TIMEOUT, "" + readTimeout.toMillis());

// if (log.isDebugEnabled()) {
// log.debugf("Creating [" + InitialDirContext.class + "] with environment:");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.quarkus.elytron.security.ldap.config;

import java.time.Duration;
import java.util.Optional;

import org.wildfly.security.auth.realm.ldap.DirContextFactory;
Expand Down Expand Up @@ -34,13 +35,27 @@ public class DirContextConfig {
@ConfigItem(defaultValue = "ignore")
public DirContextFactory.ReferralMode referralMode;

/**
* The connect timeout
*/
@ConfigItem(defaultValue = "5s")
public Duration connectTimeout;

/**
* The read timeout
*/
@ConfigItem(defaultValue = "60s")
public Duration readTimeout;

@Override
public String toString() {
return "DirContextConfig{" +
"url='" + url + '\'' +
", principal=" + principal +
", password=" + password +
", referralMode=" + referralMode +
", connectTimeout=" + connectTimeout +
", readTimeout=" + readTimeout +
'}';
}
}

0 comments on commit b62e798

Please sign in to comment.