From a0aa135534cf7e2ea69dbc877b7a6ae6cbbe1a1e Mon Sep 17 00:00:00 2001 From: adnano Date: Tue, 13 Oct 2020 13:31:50 -0400 Subject: [PATCH] Remove (*Request).Hostname function --- client.go | 24 +++++++++++------------- server.go | 2 +- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/client.go b/client.go index ee0797f..e4155c6 100644 --- a/client.go +++ b/client.go @@ -9,7 +9,6 @@ import ( "net" "net/url" "strconv" - "strings" "time" ) @@ -48,14 +47,13 @@ type Request struct { TLS tls.ConnectionState } -// Hostname returns the request host without the port. -// It assumes that r.Host contains a valid host:port. -func (r *Request) Hostname() string { - colon := strings.LastIndexByte(r.Host, ':') - if colon != -1 { - return r.Host[:colon] +// hostname returns the host without the port. +func hostname(host string) string { + hostname, _, err := net.SplitHostPort(host) + if err != nil { + return host } - return r.Host + return hostname } // NewRequest returns a new request. The host is inferred from the provided URL. @@ -218,7 +216,7 @@ func (c *Client) Send(req *Request) (*Response, error) { return req.Certificate, nil } // If we have already stored the certificate, return it - if cert, err := c.CertificateStore.Lookup(req.Hostname()); err == nil { + if cert, err := c.CertificateStore.Lookup(hostname(req.Host)); err == nil { return cert, nil } return &tls.Certificate{}, nil @@ -235,15 +233,15 @@ func (c *Client) Send(req *Request) (*Response, error) { } // Check that the certificate is valid for the hostname // Use our own implementation of verifyHostname - if err := verifyHostname(cert, req.Hostname()); err != nil { + if err := verifyHostname(cert, hostname(req.Host)); err != nil { return err } // Check that the client trusts the certificate if c.TrustCertificate == nil { - if err := c.KnownHosts.Lookup(req.Hostname(), cert); err != nil { + if err := c.KnownHosts.Lookup(hostname(req.Host), cert); err != nil { return err } - } else if err := c.TrustCertificate(req.Hostname(), cert, &c.KnownHosts); err != nil { + } else if err := c.TrustCertificate(hostname(req.Host), cert, &c.KnownHosts); err != nil { return err } return nil @@ -279,7 +277,7 @@ func (c *Client) Send(req *Request) (*Response, error) { return resp, nil } if c.GetCertificate != nil { - if cert := c.GetCertificate(req.Hostname(), &c.CertificateStore); cert != nil { + if cert := c.GetCertificate(hostname(req.Host), &c.CertificateStore); cert != nil { req.Certificate = cert return c.Send(req) } diff --git a/server.go b/server.go index 47b9bb0..a568aed 100644 --- a/server.go +++ b/server.go @@ -240,7 +240,7 @@ func (s *Server) respond(conn net.Conn) { } func (s *Server) handler(req *Request) Handler { - if h, ok := s.handlers[handlerKey{req.URL.Scheme, req.Hostname()}]; ok { + if h, ok := s.handlers[handlerKey{req.URL.Scheme, req.URL.Hostname()}]; ok { return h } return NotFoundHandler()