From e8db30abd97e4f6848b83e001934049b9ef7ad7f Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 28 Dec 2018 23:59:15 +0000 Subject: [PATCH] feat: native https support License: MIT Signed-off-by: Henrique Dias --- cmd/root.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index c0f9ef9d..d31a2bab 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,6 +1,7 @@ package cmd import ( + "crypto/tls" "fmt" "io/ioutil" "log" @@ -26,6 +27,8 @@ func init() { rootCmd.Flags().StringP("address", "a", "127.0.0.1", "address to listen on") rootCmd.Flags().StringP("log", "l", "stderr", "log output") rootCmd.Flags().IntP("port", "p", 0, "port to listen on") + rootCmd.Flags().StringP("cert", "c", "", "tls certificate") + rootCmd.Flags().StringP("key", "k", "", "tls key") rootCmd.AddCommand(versionCmd) } @@ -81,11 +84,22 @@ listening on loalhost on a random port. Use the flags to change it.`, port, err := cmd.Flags().GetInt("port") checkErr(err) - listener, err := net.Listen("tcp", addr+":"+strconv.Itoa(port)) - if err != nil { - log.Fatal(err) + cert := mustGetString(cmd, "cert") + key := mustGetString(cmd, "key") + + var listener net.Listener + + if cert != "" && key != "" { + cer, err := tls.LoadX509KeyPair(cert, key) + checkErr(err) + config := &tls.Config{Certificates: []tls.Certificate{cer}} + listener, err = tls.Listen("tcp", addr+":"+strconv.Itoa(port), config) + } else { + listener, err = net.Listen("tcp", addr+":"+strconv.Itoa(port)) } + checkErr(err) + log.Println("Listening on", listener.Addr().String()) if err := http.Serve(listener, fhttp.Handler(env)); err != nil { log.Fatal(err)