package org.infinispan.server.router.routes.hotrod;
import java.util.Optional;
import javax.net.ssl.SSLContext;
import org.infinispan.commons.util.SslContextFactory;
import org.infinispan.server.router.router.impl.hotrod.handlers.util.SslUtils;
import org.infinispan.server.router.routes.SniRouteSource;
import io.netty.handler.ssl.SslContext;
public class SniNettyRouteSource implements SniRouteSource {
private final SslContext nettyContext;
private final SSLContext jdkContext;
private final String sniHostName;
public SniNettyRouteSource(String sniHostName, SSLContext sslContext) {
this.sniHostName = sniHostName;
this.jdkContext = sslContext;
nettyContext = SslUtils.INSTANCE.toNettySslContext(Optional.ofNullable(jdkContext));
}
public SniNettyRouteSource(String sniHostName, String keyStoreFileName, char[] keyStorePassword) {
this(sniHostName, SslContextFactory.getContext(keyStoreFileName, keyStorePassword, null, null));
}
@Override
public SSLContext getSslContext() {
return jdkContext;
}
@Override
public String getSniHostName() {
return sniHostName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SniNettyRouteSource that = (SniNettyRouteSource) o;
if (!getSniHostName().equals(that.getSniHostName())) return false;
return true;
}
@Override
public int hashCode() {
return getSniHostName().hashCode();
}
@Override
public String toString() {
return "SniNettyRouteSource{" +
"sniHostName='" + sniHostName + '\'' +
'}';
}
@Override
public void validate() {
if (sniHostName == null || "".equals(sniHostName)) {
throw new IllegalArgumentException("SNI Host name can not be null");
}
if (jdkContext == null) {
throw new IllegalArgumentException("JDK SSL Context must not be null");
}
}
}