org.infinispan.client.hotrod.configuration.AuthenticationConfigurationBuilder Maven / Gradle / Ivy
package org.infinispan.client.hotrod.configuration;
import java.util.HashMap;
import java.util.Map;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.sasl.Sasl;
import org.infinispan.client.hotrod.logging.Log;
import org.infinispan.client.hotrod.logging.LogFactory;
import org.infinispan.commons.configuration.Builder;
/**
* AuthenticationConfigurationBuilder.
*
* @author Tristan Tarrant
* @since 7.0
*/
public class AuthenticationConfigurationBuilder extends AbstractSecurityConfigurationChildBuilder implements Builder {
private static final Log log = LogFactory.getLog(AuthenticationConfigurationBuilder.class);
private CallbackHandler callbackHandler;
private boolean enabled = false;
private String serverName;
private Map saslProperties = new HashMap();
private String saslMechanism;
private Subject clientSubject;
public AuthenticationConfigurationBuilder(SecurityConfigurationBuilder builder) {
super(builder);
}
/**
* Specifies a {@link CallbackHandler} to be used during the authentication handshake.
* The {@link Callback}s that need to be handled are specific to the chosen SASL mechanism.
*/
public AuthenticationConfigurationBuilder callbackHandler(CallbackHandler callbackHandler) {
this.callbackHandler = callbackHandler;
return this;
}
/**
* Configures whether authentication should be enabled or not
*/
public AuthenticationConfigurationBuilder enabled(boolean enabled) {
this.enabled = enabled;
return this;
}
/**
* Enables authentication
*/
public AuthenticationConfigurationBuilder enable() {
this.enabled = true;
return this;
}
/**
* Disables authentication
*/
public AuthenticationConfigurationBuilder disable() {
this.enabled = false;
return this;
}
/**
* Selects the SASL mechanism to use for the connection to the server
*/
public AuthenticationConfigurationBuilder saslMechanism(String saslMechanism) {
this.saslMechanism = saslMechanism;
return this;
}
/**
* Sets the SASL properties
*/
public AuthenticationConfigurationBuilder saslProperties(Map saslProperties) {
this.saslProperties = saslProperties;
return this;
}
/**
* Sets the SASL QOP property. If multiple values are specified they will determine preference order
*/
public AuthenticationConfigurationBuilder saslQop(SaslQop... qop) {
StringBuilder s = new StringBuilder();
for(int i=0; i < qop.length; i++) {
if (i > 0) {
s.append(",");
}
s.append(qop[i].toString());
}
this.saslProperties.put(Sasl.QOP, s.toString());
return this;
}
/**
* Sets the SASL strength property. If multiple values are specified they will determine preference order
*/
public AuthenticationConfigurationBuilder saslStrength(SaslStrength... strength) {
StringBuilder s = new StringBuilder();
for(int i=0; i < strength.length; i++) {
if (i > 0) {
s.append(",");
}
s.append(strength[i].toString());
}
this.saslProperties.put(Sasl.STRENGTH, s.toString());
return this;
}
/**
* Sets the name of the server as expected by the SASL protocol
*/
public AuthenticationConfigurationBuilder serverName(String serverName) {
this.serverName = serverName;
return this;
}
/**
* Sets the client subject, necessary for those SASL mechanisms which require it to access client credentials (i.e. GSSAPI)
*/
public AuthenticationConfigurationBuilder clientSubject(Subject clientSubject) {
this.clientSubject = clientSubject;
return this;
}
@Override
public AuthenticationConfiguration create() {
return new AuthenticationConfiguration(callbackHandler, clientSubject, enabled, saslMechanism, saslProperties, serverName);
}
@Override
public Builder> read(AuthenticationConfiguration template) {
this.callbackHandler = template.callbackHandler();
this.clientSubject = template.clientSubject();
this.enabled = template.enabled();
this.saslMechanism = template.saslMechanism();
this.saslProperties = template.saslProperties();
this.serverName = template.serverName();
return this;
}
@Override
public void validate() {
if (enabled) {
if (callbackHandler == null && clientSubject == null) {
throw log.invalidCallbackHandler();
}
if (saslMechanism == null) {
throw log.invalidSaslMechanism(saslMechanism);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy