diff --git a/internal/cmd/server.go b/internal/cmd/server.go index 14719c8..bdab3da 100644 --- a/internal/cmd/server.go +++ b/internal/cmd/server.go @@ -36,14 +36,15 @@ var ServerCmd = &cobra.Command{ and admin interface`, PreRunE: validateServerCommandArguments, Run: func(cmd *cobra.Command, args []string) { - // cert, _ := cmd.Flags().GetString("certfile") - // key, _ := cmd.Flags().GetString("keyfile") + var sConf server.ServerConfig = server.ServerConfig{} + sConf.UserBindAddr, _ = cmd.Flags().GetString("bind") + sConf.ControlBindAddr, _ = cmd.Flags().GetString("control-bind") + sConf.DataBindAddr, _ = cmd.Flags().GetString("data-bind") - userBind, _ := cmd.Flags().GetString("bind") - controlBind, _ := cmd.Flags().GetString("control-bind") - dataBind, _ := cmd.Flags().GetString("data-bind") + sConf.CertFile, _ = cmd.Flags().GetString("certfile") + sConf.KeyFile, _ = cmd.Flags().GetString("keyfile") - go server.StartServer(controlBind, dataBind, userBind) + go server.StartServer(sConf) // start sub shell + ENV(KAPOW_CONTROL_URL) if len(args) > 0 { @@ -56,7 +57,7 @@ var ServerCmd = &cobra.Command{ kapowCMD := exec.Command("bash", powfile) kapowCMD.Stdout = os.Stdout kapowCMD.Stderr = os.Stderr - kapowCMD.Env = append(os.Environ(), "KAPOW_CONTROL_URL=http://"+controlBind) + kapowCMD.Env = append(os.Environ(), "KAPOW_CONTROL_URL=http://"+sConf.ControlBindAddr) err = kapowCMD.Run() if err != nil { @@ -71,12 +72,12 @@ var ServerCmd = &cobra.Command{ } func init() { - ServerCmd.Flags().String("certfile", "", "Cert file to serve thru https") - ServerCmd.Flags().String("keyfile", "", "Key file to serve thru https") - ServerCmd.Flags().String("bind", "0.0.0.0:8080", "IP address and port to bind the user interface to") ServerCmd.Flags().String("control-bind", "localhost:8081", "IP address and port to bind the control interface to") ServerCmd.Flags().String("data-bind", "localhost:8082", "IP address and port to bind the data interface to") + + ServerCmd.Flags().String("certfile", "", "Cert file to serve thru https") + ServerCmd.Flags().String("keyfile", "", "Key file to serve thru https") } func validateServerCommandArguments(cmd *cobra.Command, args []string) error { diff --git a/internal/server/server.go b/internal/server/server.go index 766ec3c..c09857a 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -22,11 +22,19 @@ import ( "github.com/BBVA/kapow/internal/server/user" ) +type ServerConfig struct { + ControlBindAddr, + DataBindAddr, + UserBindAddr, + KeyFile, + CertFile string +} + // StartServer Starts one instance of each server in a goroutine and remains listening on a channel for trace events generated by them -func StartServer(controlBindAddr, dataBindAddr, userBindAddr string) { - go control.Run(controlBindAddr) - go data.Run(dataBindAddr) - go user.Run(userBindAddr) +func StartServer(config ServerConfig) { + go control.Run(config.ControlBindAddr) + go data.Run(config.DataBindAddr) + go user.Run(config.UserBindAddr, config.CertFile, config.KeyFile) // Wait for ever select {} diff --git a/internal/server/user/server.go b/internal/server/user/server.go index 1139653..67b8209 100644 --- a/internal/server/user/server.go +++ b/internal/server/user/server.go @@ -29,12 +29,19 @@ var Server = http.Server{ } // Run finishes configuring Server and runs ListenAndServe on it -func Run(bindAddr string) { +func Run(bindAddr, certFile, keyFile string) { Server = http.Server{ Addr: bindAddr, Handler: mux.New(), } - if err := Server.ListenAndServe(); err != http.ErrServerClosed { - log.Fatalf("UserServer failed: %s", err) + + if (certFile != "") && (keyFile != "") { + if err := Server.ListenAndServeTLS(certFile, keyFile); err != http.ErrServerClosed { + log.Fatalf("UserServer failed: %s", err) + } + } else { + if err := Server.ListenAndServe(); err != http.ErrServerClosed { + log.Fatalf("UserServer failed: %s", err) + } } }