Search in sources :

Example 1 with Element

use of org.infinispan.server.hotrod.configuration.Element in project infinispan by infinispan.

the class HotRodServerConfigurationParser method parseHotRodConnector.

private void parseHotRodConnector(ConfigurationReader reader, ServerConfigurationBuilder serverBuilder, HotRodServerConfigurationBuilder builder) {
    boolean dedicatedSocketBinding = false;
    String securityRealm = null;
    for (int i = 0; i < reader.getAttributeCount(); i++) {
        ParseUtils.requireNoNamespaceAttribute(reader, i);
        String value = reader.getAttributeValue(i);
        Attribute attribute = Attribute.forName(reader.getAttributeName(i));
        switch(attribute) {
            case EXTERNAL_HOST:
                {
                    builder.proxyHost(value);
                    break;
                }
            case EXTERNAL_PORT:
                {
                    builder.proxyPort(Integer.parseInt(value));
                    break;
                }
            case NAME:
                {
                    builder.name(value);
                    break;
                }
            case SOCKET_BINDING:
                {
                    builder.socketBinding(value);
                    builder.startTransport(true);
                    dedicatedSocketBinding = true;
                    break;
                }
            case SECURITY_REALM:
                {
                    builder.authentication().securityRealm(value);
                    break;
                }
            case NETWORK_PREFIX_OVERRIDE:
                {
                    builder.topologyNetworkPrefixOverride(Boolean.parseBoolean(value));
                    break;
                }
            default:
                {
                    ServerConfigurationParser.parseCommonConnectorAttributes(reader, i, serverBuilder, builder);
                }
        }
    }
    if (!dedicatedSocketBinding) {
        builder.socketBinding(serverBuilder.endpoints().current().singlePort().socketBinding()).startTransport(false);
    }
    while (reader.inTag()) {
        Element element = Element.forName(reader.getLocalName());
        switch(element) {
            case TOPOLOGY_STATE_TRANSFER:
                {
                    parseTopologyStateTransfer(reader, builder);
                    break;
                }
            case AUTHENTICATION:
                {
                    parseAuthentication(reader, serverBuilder, builder.authentication().enable(), securityRealm);
                    break;
                }
            case ENCRYPTION:
                {
                    if (!dedicatedSocketBinding) {
                        throw Server.log.cannotConfigureProtocolEncryptionUnderSinglePort();
                    }
                    parseEncryption(reader, serverBuilder, builder.encryption(), securityRealm);
                    break;
                }
            default:
                {
                    ServerConfigurationParser.parseCommonConnectorElements(reader, builder);
                }
        }
    }
}
Also used : Attribute(org.infinispan.server.hotrod.configuration.Attribute) Element(org.infinispan.server.hotrod.configuration.Element)

Example 2 with Element

use of org.infinispan.server.hotrod.configuration.Element in project infinispan by infinispan.

the class HotRodServerConfigurationParser method parseSasl.

private String parseSasl(ConfigurationReader reader, AuthenticationConfigurationBuilder builder) {
    SaslConfigurationBuilder sasl = builder.sasl();
    String serverPrincipal = null;
    for (int i = 0; i < reader.getAttributeCount(); i++) {
        ParseUtils.requireNoNamespaceAttribute(reader, i);
        String value = reader.getAttributeValue(i);
        Attribute attribute = Attribute.forName(reader.getAttributeName(i));
        switch(attribute) {
            case SERVER_PRINCIPAL:
                {
                    serverPrincipal = value;
                    break;
                }
            case SERVER_NAME:
                {
                    sasl.serverName(value);
                    break;
                }
            case MECHANISMS:
                {
                    for (String mech : reader.getListAttributeValue(i)) {
                        sasl.addAllowedMech(mech);
                    }
                    break;
                }
            case QOP:
                {
                    for (String qop : reader.getListAttributeValue(i)) {
                        sasl.addQOP(qop);
                    }
                    break;
                }
            case STRENGTH:
                {
                    for (String s : reader.getListAttributeValue(i)) {
                        sasl.addStrength(s);
                    }
                    break;
                }
            case POLICY:
                {
                    for (String p : reader.getListAttributeValue(i)) {
                        sasl.addPolicy(p);
                    }
                    break;
                }
            default:
                {
                    throw ParseUtils.unexpectedAttribute(reader, i);
                }
        }
    }
    final EnumSet<Element> visited = EnumSet.noneOf(Element.class);
    while (reader.inTag()) {
        final Element element = Element.forName(reader.getLocalName());
        switch(element) {
            case POLICY:
                {
                    if (reader.getSchema().since(13, 0) || visited.contains(element)) {
                        throw ParseUtils.unexpectedElement(reader);
                    } else {
                        visited.add(element);
                    }
                    parsePolicy(reader, builder);
                    break;
                }
            case PROPERTIES:
                {
                    // JSON/YAML map properties to attributes
                    for (int i = 0; i < reader.getAttributeCount(); i++) {
                        sasl.addProperty(reader.getAttributeName(i), reader.getAttributeValue(i));
                    }
                    ParseUtils.requireNoContent(reader);
                    break;
                }
            case PROPERTY:
                {
                    sasl.addProperty(ParseUtils.requireSingleAttribute(reader, Attribute.NAME), reader.getElementText());
                    break;
                }
            default:
                {
                    throw ParseUtils.unexpectedElement(reader);
                }
        }
    }
    return serverPrincipal;
}
Also used : Attribute(org.infinispan.server.hotrod.configuration.Attribute) SaslConfigurationBuilder(org.infinispan.server.hotrod.configuration.SaslConfigurationBuilder) Element(org.infinispan.server.hotrod.configuration.Element)

Example 3 with Element

use of org.infinispan.server.hotrod.configuration.Element in project infinispan by infinispan.

the class HotRodServerConfigurationParser method parseEncryption.

private void parseEncryption(ConfigurationReader reader, ServerConfigurationBuilder serverBuilder, EncryptionConfigurationBuilder encryption, String securityRealm) {
    for (int i = 0; i < reader.getAttributeCount(); i++) {
        ParseUtils.requireNoNamespaceAttribute(reader, i);
        String value = reader.getAttributeValue(i);
        Attribute attribute = Attribute.forName(reader.getAttributeName(i));
        switch(attribute) {
            case REQUIRE_SSL_CLIENT_AUTH:
                {
                    encryption.requireClientAuth(Boolean.parseBoolean(value));
                    break;
                }
            case SECURITY_REALM:
                {
                    securityRealm = value;
                    break;
                }
            default:
                {
                    throw ParseUtils.unexpectedAttribute(reader, i);
                }
        }
    }
    if (securityRealm == null) {
        throw Server.log.encryptionWithoutSecurityRealm();
    } else {
        encryption.realm(securityRealm).sslContext(serverBuilder.serverSSLContextSupplier(securityRealm));
    }
    while (reader.inTag(Element.ENCRYPTION)) {
        Element element = Element.forName(reader.getLocalName());
        switch(element) {
            case SNI:
                {
                    if (reader.getAttributeCount() > 0) {
                        parseSni(reader, serverBuilder, encryption.addSni());
                    }
                    break;
                }
            default:
                {
                    throw ParseUtils.unexpectedElement(reader);
                }
        }
    }
}
Also used : Attribute(org.infinispan.server.hotrod.configuration.Attribute) Element(org.infinispan.server.hotrod.configuration.Element)

Example 4 with Element

use of org.infinispan.server.hotrod.configuration.Element in project infinispan by infinispan.

the class HotRodServerConfigurationParser method parsePolicy.

void parsePolicy(ConfigurationReader reader, AuthenticationConfigurationBuilder builder) {
    if (reader.getAttributeCount() > 0) {
        throw ParseUtils.unexpectedAttribute(reader, 0);
    }
    SaslConfigurationBuilder sasl = builder.sasl();
    // Handle nested elements.
    final EnumSet<Element> visited = EnumSet.noneOf(Element.class);
    while (reader.inTag()) {
        final Element element = Element.forName(reader.getLocalName());
        if (visited.contains(element)) {
            throw ParseUtils.unexpectedElement(reader);
        }
        visited.add(element);
        String value = ParseUtils.readStringAttributeElement(reader, Attribute.VALUE.toString());
        switch(element) {
            case FORWARD_SECRECY:
            case NO_ACTIVE:
            case NO_ANONYMOUS:
            case NO_DICTIONARY:
            case NO_PLAIN_TEXT:
            case PASS_CREDENTIALS:
                {
                    if ("true".equals(value)) {
                        sasl.addPolicy(element.toString());
                    }
                    break;
                }
            default:
                {
                    throw ParseUtils.unexpectedElement(reader);
                }
        }
    }
}
Also used : SaslConfigurationBuilder(org.infinispan.server.hotrod.configuration.SaslConfigurationBuilder) Element(org.infinispan.server.hotrod.configuration.Element)

Example 5 with Element

use of org.infinispan.server.hotrod.configuration.Element in project infinispan by infinispan.

the class HotRodServerConfigurationParser method parseAuthentication.

private void parseAuthentication(ConfigurationReader reader, ServerConfigurationBuilder serverBuilder, AuthenticationConfigurationBuilder builder, String securityRealm) {
    for (int i = 0; i < reader.getAttributeCount(); i++) {
        ParseUtils.requireNoNamespaceAttribute(reader, i);
        String value = reader.getAttributeValue(i);
        Attribute attribute = Attribute.forName(reader.getAttributeName(i));
        switch(attribute) {
            case SECURITY_REALM:
                {
                    securityRealm = value;
                    break;
                }
            default:
                {
                    throw ParseUtils.unexpectedAttribute(reader, i);
                }
        }
    }
    if (securityRealm == null) {
        securityRealm = serverBuilder.endpoints().current().securityRealm();
    }
    if (securityRealm == null) {
        throw Server.log.authenticationWithoutSecurityRealm();
    }
    // Automatically set the digest realm name. It can be overridden by the user
    builder.addMechProperty(WildFlySasl.REALM_LIST, securityRealm);
    String serverPrincipal = null;
    while (reader.inTag()) {
        Element element = Element.forName(reader.getLocalName());
        switch(element) {
            case SASL:
                {
                    serverPrincipal = parseSasl(reader, builder);
                    break;
                }
            default:
                {
                    throw ParseUtils.unexpectedElement(reader);
                }
        }
    }
    builder.securityRealm(securityRealm);
    builder.serverAuthenticationProvider(new ElytronSASLAuthenticationProvider(securityRealm, serverPrincipal, builder.sasl().mechanisms()));
}
Also used : Attribute(org.infinispan.server.hotrod.configuration.Attribute) Element(org.infinispan.server.hotrod.configuration.Element) ElytronSASLAuthenticationProvider(org.infinispan.server.security.ElytronSASLAuthenticationProvider)

Aggregations

Element (org.infinispan.server.hotrod.configuration.Element)6 Attribute (org.infinispan.server.hotrod.configuration.Attribute)4 SaslConfigurationBuilder (org.infinispan.server.hotrod.configuration.SaslConfigurationBuilder)2 GlobalConfigurationBuilder (org.infinispan.configuration.global.GlobalConfigurationBuilder)1 ServerConfigurationBuilder (org.infinispan.server.configuration.ServerConfigurationBuilder)1 HotRodServerConfigurationBuilder (org.infinispan.server.hotrod.configuration.HotRodServerConfigurationBuilder)1 ElytronSASLAuthenticationProvider (org.infinispan.server.security.ElytronSASLAuthenticationProvider)1