templates: TLSVersion (#2323)

* new template action: TLS protocol version

* new template action: use caddytls.GetSupportedProtocolName

Avoids code duplication by reusing existing method to get TLS protocol
version used on connection. Also adds tests
This commit is contained in:
Kris Kwiatkowski 2018-10-19 18:51:10 +01:00 committed by Matt Holt
parent 03b10f9c8e
commit d3e3fc533f
2 changed files with 48 additions and 0 deletions

View file

@ -31,6 +31,7 @@ import (
"os"
"github.com/mholt/caddy/caddytls"
"github.com/russross/blackfriday"
)
@ -448,6 +449,15 @@ func (c Context) AddLink(link string) string {
return ""
}
// Returns either TLS protocol version if TLS used or empty string otherwise
func (c Context) TLSVersion() (ret string) {
if c.Req.TLS != nil {
// Safe to ignore an error
ret, _ = caddytls.GetSupportedProtocolName(c.Req.TLS.Version)
}
return
}
// buffer pool for .Include context actions
var includeBufs = sync.Pool{
New: func() interface{} {

View file

@ -16,6 +16,7 @@ package httpserver
import (
"bytes"
"crypto/tls"
"fmt"
"io/ioutil"
"net"
@ -922,3 +923,40 @@ func TestAddLink(t *testing.T) {
})
}
}
func TestTlsVersion(t *testing.T) {
for _, test := range []struct {
tlsState *tls.ConnectionState
expectedResult string
}{
{
&tls.ConnectionState{Version: tls.VersionTLS10},
"tls1.0",
},
{
&tls.ConnectionState{Version: tls.VersionTLS11},
"tls1.1",
},
{
&tls.ConnectionState{Version: tls.VersionTLS12},
"tls1.2",
},
// TLS not used
{
nil,
"",
},
// Unsupported version
{
&tls.ConnectionState{Version: 0x0399},
"",
},
} {
context := getContextOrFail(t)
context.Req.TLS = test.tlsState
result := context.TLSVersion()
if result != test.expectedResult {
t.Errorf("Expected %s got %s", test.expectedResult, result)
}
}
}