Search in sources :

Example 1 with SSL_CONTEXT_CAPABILITY_NAME

use of org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SSL_CONTEXT_CAPABILITY_NAME in project wildfly by wildfly.

the class ModClusterConfigurationServiceBuilder method configure.

@Override
public Builder<ModClusterConfiguration> configure(OperationContext context, ModelNode model) throws OperationFailedException {
    // Advertise
    optionalString(ADVERTISE_SOCKET.resolveModelAttribute(context, model)).ifPresent(advertiseSocketRef -> this.advertiseSocketDependency = new InjectedValueDependency<>(context.getCapabilityServiceName(SOCKET_BINDING_CAPABILITY_NAME, advertiseSocketRef, SocketBinding.class), SocketBinding.class));
    optionalString(ADVERTISE_SECURITY_KEY.resolveModelAttribute(context, model)).ifPresent(securityKey -> builder.advertise().setAdvertiseSecurityKey(securityKey));
    // MCMP
    builder.mcmp().setAdvertise(ADVERTISE.resolveModelAttribute(context, model).asBoolean()).setProxyURL(PROXY_URL.resolveModelAttribute(context, model).asString()).setAutoEnableContexts(AUTO_ENABLE_CONTEXTS.resolveModelAttribute(context, model).asBoolean()).setStopContextTimeout(STOP_CONTEXT_TIMEOUT.resolveModelAttribute(context, model).asInt()).setStopContextTimeoutUnit(TimeUnit.valueOf(STOP_CONTEXT_TIMEOUT.getMeasurementUnit().getName())).setSocketTimeout(SOCKET_TIMEOUT.resolveModelAttribute(context, model).asInt() * 1000).setSessionDrainingStrategy(Enum.valueOf(SessionDrainingStrategyEnum.class, SESSION_DRAINING_STRATEGY.resolveModelAttribute(context, model).asString()));
    if (model.hasDefined(CommonAttributes.EXCLUDED_CONTEXTS)) {
        String contexts = EXCLUDED_CONTEXTS.resolveModelAttribute(context, model).asString();
        Map<String, Set<String>> excludedContextsPerHost;
        if (contexts == null) {
            excludedContextsPerHost = Collections.emptyMap();
        } else {
            String trimmedContexts = contexts.trim();
            if (trimmedContexts.isEmpty()) {
                excludedContextsPerHost = Collections.emptyMap();
            } else {
                excludedContextsPerHost = new HashMap<>();
                for (String c : trimmedContexts.split(",")) {
                    String[] parts = c.trim().split(":");
                    if (parts.length > 2) {
                        throw ROOT_LOGGER.excludedContextsWrongFormat(trimmedContexts);
                    }
                    String host = null;
                    String trimmedContext = parts[0].trim();
                    if (parts.length == 2) {
                        host = trimmedContext;
                        trimmedContext = parts[1].trim();
                    }
                    String path = trimmedContext.equals("ROOT") ? "" : "/" + trimmedContext;
                    Set<String> paths = excludedContextsPerHost.computeIfAbsent(host, k -> new HashSet<>());
                    paths.add(path);
                }
            }
        }
        builder.mcmp().setExcludedContextsPerHost(excludedContextsPerHost);
    }
    // Balancer
    builder.balancer().setStickySession(STICKY_SESSION.resolveModelAttribute(context, model).asBoolean()).setStickySessionRemove(STICKY_SESSION_REMOVE.resolveModelAttribute(context, model).asBoolean()).setStickySessionForce(STICKY_SESSION_FORCE.resolveModelAttribute(context, model).asBoolean()).setWorkerTimeout(WORKER_TIMEOUT.resolveModelAttribute(context, model).asInt()).setMaxAttempts(MAX_ATTEMPTS.resolveModelAttribute(context, model).asInt());
    // Node
    builder.node().setFlushPackets(FLUSH_PACKETS.resolveModelAttribute(context, model).asBoolean()).setFlushWait(FLUSH_WAIT.resolveModelAttribute(context, model).asInt()).setPing(PING.resolveModelAttribute(context, model).asInt()).setSmax(SMAX.resolveModelAttribute(context, model).asInt()).setTtl(TTL.resolveModelAttribute(context, model).asInt()).setNodeTimeout(NODE_TIMEOUT.resolveModelAttribute(context, model).asInt());
    optionalString(BALANCER.resolveModelAttribute(context, model)).ifPresent(balancer -> builder.node().setBalancer(balancer));
    optionalString(LOAD_BALANCING_GROUP.resolveModelAttribute(context, model)).ifPresent(group -> builder.node().setLoadBalancingGroup(group));
    optionalList(PROXIES.resolveModelAttribute(context, model)).ifPresent(refs -> refs.stream().map(ModelNode::asString).forEach(ref -> outboundSocketBindings.add(new InjectedValueDependency<>(context.getCapabilityServiceName(OUTBOUND_SOCKET_BINDING_CAPABILITY_NAME, ref, OutboundSocketBinding.class), OutboundSocketBinding.class))));
    if (model.hasDefined(CommonAttributes.PROXY_LIST)) {
        throw new OperationFailedException(ROOT_LOGGER.proxyListNotAllowedInCurrentModel());
    }
    // Elytron-based security support
    Optional<String> sslContextRef = optionalString(SSL_CONTEXT.resolveModelAttribute(context, model));
    sslContextRef.ifPresent(sslContext -> this.sslContextDependency = new InjectedValueDependency<>(context.getCapabilityServiceName(SSL_CONTEXT_CAPABILITY_NAME, sslContext, SSLContext.class), SSLContext.class));
    if (model.get(ModClusterSSLResourceDefinition.PATH.getKeyValuePair()).isDefined()) {
        if (sslContextRef.isPresent()) {
            throw ROOT_LOGGER.bothElytronAndLegacySslContextDefined();
        }
        ModelNode sslModel = model.get(ModClusterSSLResourceDefinition.PATH.getKeyValuePair());
        ModClusterConfig sslConfiguration = new ModClusterConfig();
        optionalString(KEY_ALIAS.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslKeyAlias);
        optionalString(PASSWORD.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslTrustStorePassword);
        optionalString(PASSWORD.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslKeyStorePassword);
        optionalString(CERTIFICATE_KEY_FILE.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslKeyStore);
        optionalString(CIPHER_SUITE.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslCiphers);
        optionalString(PROTOCOL.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslProtocol);
        optionalString(CA_CERTIFICATE_FILE.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslTrustStore);
        optionalString(CA_REVOCATION_URL.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslCrlFile);
        builder.mcmp().setSocketFactory(new JSSESocketFactory(sslConfiguration));
    }
    return this;
}
Also used : OutboundSocketBinding(org.jboss.as.network.OutboundSocketBinding) SocketBinding(org.jboss.as.network.SocketBinding) FLUSH_WAIT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.FLUSH_WAIT) LOAD_BALANCING_GROUP(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.LOAD_BALANCING_GROUP) SSLContext(javax.net.ssl.SSLContext) ROOT_LOGGER(org.wildfly.extension.mod_cluster.ModClusterLogger.ROOT_LOGGER) OutboundSocketBinding(org.jboss.as.network.OutboundSocketBinding) OperationContext(org.jboss.as.controller.OperationContext) SSL_CONTEXT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SSL_CONTEXT) Map(java.util.Map) SessionDrainingStrategyEnum(org.jboss.modcluster.config.impl.SessionDrainingStrategyEnum) ServiceTarget(org.jboss.msc.service.ServiceTarget) WORKER_TIMEOUT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.WORKER_TIMEOUT) ModelNodes.optionalList(org.jboss.as.clustering.dmr.ModelNodes.optionalList) CA_REVOCATION_URL(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.CA_REVOCATION_URL) AUTO_ENABLE_CONTEXTS(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.AUTO_ENABLE_CONTEXTS) Collection(java.util.Collection) NetworkInterface(java.net.NetworkInterface) ADVERTISE_SECURITY_KEY(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.ADVERTISE_SECURITY_KEY) Set(java.util.Set) ResourceServiceBuilder(org.jboss.as.clustering.controller.ResourceServiceBuilder) ADVERTISE_SOCKET(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.ADVERTISE_SOCKET) InetSocketAddress(java.net.InetSocketAddress) Objects(java.util.Objects) SSL_CONTEXT_CAPABILITY_NAME(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SSL_CONTEXT_CAPABILITY_NAME) PASSWORD(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.PASSWORD) PROTOCOL(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.PROTOCOL) List(java.util.List) Stream(java.util.stream.Stream) OperationFailedException(org.jboss.as.controller.OperationFailedException) JSSESocketFactory(org.jboss.modcluster.mcmp.impl.JSSESocketFactory) ServiceName(org.jboss.msc.service.ServiceName) Optional(java.util.Optional) MAX_ATTEMPTS(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.MAX_ATTEMPTS) ModelNode(org.jboss.dmr.ModelNode) Builder(org.wildfly.clustering.service.Builder) SESSION_DRAINING_STRATEGY(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SESSION_DRAINING_STRATEGY) ValueDependency(org.wildfly.clustering.service.ValueDependency) SMAX(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SMAX) Value(org.jboss.msc.value.Value) BALANCER(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.BALANCER) ProxyConfiguration(org.jboss.modcluster.config.ProxyConfiguration) HashMap(java.util.HashMap) PROXY_URL(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.PROXY_URL) PROXIES(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.PROXIES) HashSet(java.util.HashSet) CIPHER_SUITE(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.CIPHER_SUITE) SocketException(java.net.SocketException) KEY_ALIAS(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.KEY_ALIAS) CERTIFICATE_KEY_FILE(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.CERTIFICATE_KEY_FILE) SocketBinding(org.jboss.as.network.SocketBinding) InjectedValueDependency(org.wildfly.clustering.service.InjectedValueDependency) LinkedList(java.util.LinkedList) ModClusterConfiguration(org.jboss.modcluster.config.ModClusterConfiguration) PING(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.PING) NODE_TIMEOUT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.NODE_TIMEOUT) STOP_CONTEXT_TIMEOUT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.STOP_CONTEXT_TIMEOUT) EXCLUDED_CONTEXTS(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.EXCLUDED_CONTEXTS) ModClusterConfig(org.jboss.modcluster.config.impl.ModClusterConfig) ServiceBuilder(org.jboss.msc.service.ServiceBuilder) ModClusterConfigurationBuilder(org.jboss.modcluster.config.builder.ModClusterConfigurationBuilder) STICKY_SESSION(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.STICKY_SESSION) STICKY_SESSION_FORCE(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.STICKY_SESSION_FORCE) TimeUnit(java.util.concurrent.TimeUnit) CA_CERTIFICATE_FILE(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.CA_CERTIFICATE_FILE) ServiceController(org.jboss.msc.service.ServiceController) ValueService(org.jboss.msc.service.ValueService) ADVERTISE(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.ADVERTISE) TTL(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.TTL) ModelNodes.optionalString(org.jboss.as.clustering.dmr.ModelNodes.optionalString) FLUSH_PACKETS(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.FLUSH_PACKETS) SOCKET_TIMEOUT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SOCKET_TIMEOUT) STICKY_SESSION_REMOVE(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.STICKY_SESSION_REMOVE) Collections(java.util.Collections) Set(java.util.Set) HashSet(java.util.HashSet) OutboundSocketBinding(org.jboss.as.network.OutboundSocketBinding) OperationFailedException(org.jboss.as.controller.OperationFailedException) SessionDrainingStrategyEnum(org.jboss.modcluster.config.impl.SessionDrainingStrategyEnum) ModelNodes.optionalString(org.jboss.as.clustering.dmr.ModelNodes.optionalString) SSLContext(javax.net.ssl.SSLContext) ModClusterConfig(org.jboss.modcluster.config.impl.ModClusterConfig) InjectedValueDependency(org.wildfly.clustering.service.InjectedValueDependency) ModelNode(org.jboss.dmr.ModelNode) JSSESocketFactory(org.jboss.modcluster.mcmp.impl.JSSESocketFactory)

Aggregations

InetSocketAddress (java.net.InetSocketAddress)1 NetworkInterface (java.net.NetworkInterface)1 SocketException (java.net.SocketException)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Map (java.util.Map)1 Objects (java.util.Objects)1 Optional (java.util.Optional)1 Set (java.util.Set)1 TimeUnit (java.util.concurrent.TimeUnit)1 Stream (java.util.stream.Stream)1 SSLContext (javax.net.ssl.SSLContext)1 ResourceServiceBuilder (org.jboss.as.clustering.controller.ResourceServiceBuilder)1 ModelNodes.optionalList (org.jboss.as.clustering.dmr.ModelNodes.optionalList)1 ModelNodes.optionalString (org.jboss.as.clustering.dmr.ModelNodes.optionalString)1 OperationContext (org.jboss.as.controller.OperationContext)1