diff --git a/core/src/main/java/io/undertow/attribute/SslProtocolAttribute.java b/core/src/main/java/io/undertow/attribute/SslProtocolAttribute.java new file mode 100644 index 0000000000..8be787fdc6 --- /dev/null +++ b/core/src/main/java/io/undertow/attribute/SslProtocolAttribute.java @@ -0,0 +1,67 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2014 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.undertow.attribute; + +/** + * @author Stuart Douglas + */ +public class SslProtocolAttribute implements ExchangeAttribute { + + public static final io.undertow.attribute.SslProtocolAttribute INSTANCE = new io.undertow.attribute.SslProtocolAttribute(); + + @Override + public String readAttribute(io.undertow.server.HttpServerExchange exchange) { + io.undertow.server.SSLSessionInfo ssl = exchange.getConnection().getSslSessionInfo(); + if(ssl == null) { + return null; + } + return ssl.getSSLSession().getProtocol(); + } + + @Override + public void writeAttribute(io.undertow.server.HttpServerExchange exchange, String newValue) throws ReadOnlyAttributeException { + throw new ReadOnlyAttributeException("SSL Protocol", newValue); + } + + @Override + public String toString() { + return "%{SSL_PROTOCOL}"; + } + + public static final class Builder implements ExchangeAttributeBuilder { + + @Override + public String name() { + return "SSL Protocol"; + } + + @Override + public ExchangeAttribute build(final String token) { + if (token.equals("%{SSL_PROTOCOL}")) { + return INSTANCE; + } + return null; + } + + @Override + public int priority() { + return 0; + } + } +} diff --git a/core/src/main/resources/META-INF/services/io.undertow.attribute.ExchangeAttributeBuilder b/core/src/main/resources/META-INF/services/io.undertow.attribute.ExchangeAttributeBuilder index eea0057862..29096dc801 100644 --- a/core/src/main/resources/META-INF/services/io.undertow.attribute.ExchangeAttributeBuilder +++ b/core/src/main/resources/META-INF/services/io.undertow.attribute.ExchangeAttributeBuilder @@ -23,6 +23,7 @@ io.undertow.attribute.PredicateContextAttribute$Builder io.undertow.attribute.QueryParameterAttribute$Builder io.undertow.attribute.SslClientCertAttribute$Builder io.undertow.attribute.SslCipherAttribute$Builder +io.undertow.attribute.SslProtocolAttribute$Builder io.undertow.attribute.SslSessionIdAttribute$Builder io.undertow.attribute.ResponseTimeAttribute$Builder io.undertow.attribute.PathParameterAttribute$Builder