Skip to content

Commit 65a8037

Browse files
committed
UNDERTOW-1881 - Add a new exchange attribute for SSL/TLS protocol version
Add and register new ExchangeAttribute implementation
1 parent e6eb76a commit 65a8037

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* JBoss, Home of Professional Open Source.
3+
* Copyright 2014 Red Hat, Inc., and individual contributors
4+
* as indicated by the @author tags.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
package io.undertow.attribute;
20+
21+
/**
22+
* @author Stuart Douglas
23+
*/
24+
public class SslProtocolAttribute implements ExchangeAttribute {
25+
26+
public static final io.undertow.attribute.SslProtocolAttribute INSTANCE = new io.undertow.attribute.SslProtocolAttribute();
27+
28+
@Override
29+
public String readAttribute(io.undertow.server.HttpServerExchange exchange) {
30+
io.undertow.server.SSLSessionInfo ssl = exchange.getConnection().getSslSessionInfo();
31+
if(ssl == null) {
32+
return null;
33+
}
34+
return ssl.getSSLSession().getProtocol();
35+
}
36+
37+
@Override
38+
public void writeAttribute(io.undertow.server.HttpServerExchange exchange, String newValue) throws ReadOnlyAttributeException {
39+
throw new ReadOnlyAttributeException("SSL Protocol", newValue);
40+
}
41+
42+
@Override
43+
public String toString() {
44+
return "%{SSL_PROTOCOL}";
45+
}
46+
47+
public static final class Builder implements ExchangeAttributeBuilder {
48+
49+
@Override
50+
public String name() {
51+
return "SSL Protocol";
52+
}
53+
54+
@Override
55+
public ExchangeAttribute build(final String token) {
56+
if (token.equals("%{SSL_PROTOCOL}")) {
57+
return INSTANCE;
58+
}
59+
return null;
60+
}
61+
62+
@Override
63+
public int priority() {
64+
return 0;
65+
}
66+
}
67+
}

core/src/main/resources/META-INF/services/io.undertow.attribute.ExchangeAttributeBuilder

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ io.undertow.attribute.PredicateContextAttribute$Builder
2323
io.undertow.attribute.QueryParameterAttribute$Builder
2424
io.undertow.attribute.SslClientCertAttribute$Builder
2525
io.undertow.attribute.SslCipherAttribute$Builder
26+
io.undertow.attribute.SslProtocolAttribute$Builder
2627
io.undertow.attribute.SslSessionIdAttribute$Builder
2728
io.undertow.attribute.ResponseTimeAttribute$Builder
2829
io.undertow.attribute.PathParameterAttribute$Builder

0 commit comments

Comments
 (0)