feat: native https support

License: MIT
Signed-off-by: Henrique Dias <hacdias@gmail.com>
This commit is contained in:
Henrique Dias 2018-12-28 23:59:15 +00:00
parent 522f863c6d
commit e8db30abd9

View File

@ -1,6 +1,7 @@
package cmd package cmd
import ( import (
"crypto/tls"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"log" "log"
@ -26,6 +27,8 @@ func init() {
rootCmd.Flags().StringP("address", "a", "127.0.0.1", "address to listen on") rootCmd.Flags().StringP("address", "a", "127.0.0.1", "address to listen on")
rootCmd.Flags().StringP("log", "l", "stderr", "log output") rootCmd.Flags().StringP("log", "l", "stderr", "log output")
rootCmd.Flags().IntP("port", "p", 0, "port to listen on") 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) 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") port, err := cmd.Flags().GetInt("port")
checkErr(err) checkErr(err)
listener, err := net.Listen("tcp", addr+":"+strconv.Itoa(port)) cert := mustGetString(cmd, "cert")
if err != nil { key := mustGetString(cmd, "key")
log.Fatal(err)
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()) log.Println("Listening on", listener.Addr().String())
if err := http.Serve(listener, fhttp.Handler(env)); err != nil { if err := http.Serve(listener, fhttp.Handler(env)); err != nil {
log.Fatal(err) log.Fatal(err)