From 0824f4bcd9a31add8e7cfa1662d2cb40900de073 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 27 Mar 2016 20:44:30 +0200 Subject: Encapsulate in package --- route.go | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'route.go') diff --git a/route.go b/route.go index a695355..2fc38b3 100644 --- a/route.go +++ b/route.go @@ -1,4 +1,4 @@ -package main +package goxy import ( "crypto/tls" @@ -12,21 +12,29 @@ import ( // Route defines a set of routes including correspondent TLS certificates type Route map[string]Entry +// GetCertificate returns certificate for SNI negotiation +func (r Route) GetCertificate(h *tls.ClientHelloInfo) (*tls.Certificate, error) { + if e, ok := r[h.ServerName]; ok && e.cert != nil { + return e.cert, nil + } + return nil, errors.New("no cert for " + h.ServerName) +} + // Entry holds routing settings type Entry struct { ServerName string Upstream string - Cert []byte - Key []byte - cert *tls.Certificate + Cert []byte // PEM + Key []byte // PEM + cert *tls.Certificate // Parsed } -// GetCertificate returns certificate for SNI negotiation -func (r Route) GetCertificate(h *tls.ClientHelloInfo) (*tls.Certificate, error) { - if e, ok := r[h.ServerName]; ok && e.cert != nil { - return e.cert, nil +func (e Entry) String() string { + ret := e.ServerName + " → " + e.Upstream + if e.cert != nil { + ret += " with TLS" } - return nil, errors.New("no cert for " + h.ServerName) + return ret } func NewReverseProxy(target *url.URL) *httputil.ReverseProxy { @@ -39,16 +47,16 @@ func NewReverseProxy(target *url.URL) *httputil.ReverseProxy { } // Restore and update routes from in-memory state -func (r Route) Restore() error { +func (s *Server) Restore() error { mux := http.NewServeMux() - for k, v := range route { + for k, v := range s.Route { if v.Cert != nil && v.Key != nil { cert, err := tls.X509KeyPair(v.Cert, v.Key) if err != nil { return err } v.cert = &cert - r[k] = v + s.Route[k] = v } up, err := url.Parse(v.Upstream) if err != nil { @@ -65,14 +73,6 @@ func (r Route) Restore() error { mux.Handle(v.ServerName, NewReverseProxy(up)) } } - server.Handler = mux + s.Server.Handler = mux return nil } - -func (e Entry) String() string { - ret := e.ServerName + " → " + e.Upstream - if e.cert != nil { - ret += " with TLS" - } - return ret -} -- cgit v1.2.3