aboutsummaryrefslogtreecommitdiff
path: root/route.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-27 20:44:30 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-03-27 20:44:30 +0200
commit0824f4bcd9a31add8e7cfa1662d2cb40900de073 (patch)
tree63a152cd81992a9815fc8e3f23d873f2c562c505 /route.go
parent24ba33d974cf651df195d2912b00238e6eeb2ed8 (diff)
Encapsulate in package
Diffstat (limited to 'route.go')
-rw-r--r--route.go42
1 files changed, 21 insertions, 21 deletions
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
-}