redirect non-tls port
This commit is contained in:
parent
346b7ecd32
commit
78885cc66a
50
main.go
50
main.go
@ -2,9 +2,11 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const usage = "servetls <cert file> <key file>"
|
||||
@ -18,7 +20,17 @@ func main() {
|
||||
|
||||
http.HandleFunc("/", handler)
|
||||
|
||||
port := 8443
|
||||
tlsPort := 8443
|
||||
if os.Getenv("TLS_PORT") != "" {
|
||||
p, err := strconv.Atoi(os.Getenv("TLS_PORT"))
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "could not parse TLS_PORT variable: %s\n", os.Getenv("TLS_PORT"))
|
||||
os.Exit(1)
|
||||
}
|
||||
tlsPort = p
|
||||
}
|
||||
|
||||
port := 8000
|
||||
if os.Getenv("PORT") != "" {
|
||||
p, err := strconv.Atoi(os.Getenv("PORT"))
|
||||
if err != nil {
|
||||
@ -27,8 +39,22 @@ func main() {
|
||||
}
|
||||
port = p
|
||||
}
|
||||
|
||||
go func() {
|
||||
b := &bouncer{tlsPort}
|
||||
|
||||
sm := http.NewServeMux()
|
||||
sm.Handle("/", b)
|
||||
|
||||
addr := fmt.Sprintf(":%d", port)
|
||||
fmt.Printf("serving on %s", addr)
|
||||
if err := http.ListenAndServe(addr, sm); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
fmt.Printf("redirecting on :%d\n", port)
|
||||
fmt.Printf("serving on :%d\n", tlsPort)
|
||||
addr := fmt.Sprintf(":%d", tlsPort)
|
||||
err := http.ListenAndServeTLS(addr, cert, key, nil)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%v\n", err)
|
||||
@ -39,3 +65,23 @@ func main() {
|
||||
func handler(w http.ResponseWriter, req *http.Request) {
|
||||
fmt.Fprintf(w, "if you see this without complaints things are likely set up correctly\n")
|
||||
}
|
||||
|
||||
type bouncer struct {
|
||||
port int
|
||||
}
|
||||
|
||||
func (b *bouncer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
var host string
|
||||
var err error
|
||||
if strings.Contains(req.Host, ":") {
|
||||
host, _, err = net.SplitHostPort(req.Host)
|
||||
if err != nil {
|
||||
http.Error(w, "couldn't parse hostname from requeest", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
host = req.Host
|
||||
}
|
||||
url := fmt.Sprintf("https://%s:%d/", host, b.port)
|
||||
http.Redirect(w, req, url, http.StatusMovedPermanently)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user