Update internal/cmd/server.go

- Honour --bind, --control-bind, --data-bind
- Drop unused params (--interactive, --url, --control-url, --data-url)
- Minimize environment for running the powfile shell script
- Drop debug code

TODO: actual key and cert handling for https
This commit is contained in:
pancho horrillo
2019-10-20 18:39:50 +02:00
parent 341768ace8
commit 5bbc341e10
+22 -29
View File
@@ -22,45 +22,39 @@ var ServerCmd = &cobra.Command{
and admin interface`, and admin interface`,
PreRunE: validateServerCommandArguments, PreRunE: validateServerCommandArguments,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
//cert, _ := cmd.Flags().GetString("certfile") // cert, _ := cmd.Flags().GetString("certfile")
//key, _ := cmd.Flags().GetString("keyfile") // key, _ := cmd.Flags().GetString("keyfile")
userURL, _ := cmd.Flags().GetString("url")
controlURL, _ := cmd.Flags().GetString("control-url")
dataURL, _ := cmd.Flags().GetString("data-url")
// FIXME: If is a hostport change the name userBind, _ := cmd.Flags().GetString("bind")
fmt.Println("urls:") controlBind, _ := cmd.Flags().GetString("control-bind")
fmt.Println("\t" + userURL) dataBind, _ := cmd.Flags().GetString("data-bind")
fmt.Println("\t" + controlURL)
fmt.Println("\t" + dataURL)
// TODO: run data server go user.Run(userBind)
go func() { log.Fatal(http.ListenAndServe(dataURL, nil)) }()
// TODO: run control server // TODO: run the actual data server when it gets implemented
go control.Run(controlURL) // data.Run(dataBind)
go func() { log.Fatal(http.ListenAndServe(dataBind, nil)) }() // dummy data server for now
// TODO: run user server go control.Run(controlBind)
go user.Run(userURL)
// start sub shell + ENV(KAPOW_CONTROL_URL) // start sub shell + ENV(KAPOW_CONTROL_URL)
// TODO: process several files... tomorrow powfile := args[0]
_, err := os.Stat(args[0]) _, err := os.Stat(powfile)
if os.IsNotExist(err) { if os.IsNotExist(err) {
log.Fatalf("%s does not exist", args[0]) log.Fatalf("%s does not exist", powfile)
} }
kapowCMD := exec.Command("bash", args[0]) log.Printf("Running powfile: %q\n", powfile)
kapowCMD := exec.Command("bash", powfile)
kapowCMD.Stdout = os.Stdout kapowCMD.Stdout = os.Stdout
kapowCMD.Stderr = os.Stderr kapowCMD.Stderr = os.Stderr
kapowCMD.Env = append(os.Environ(), "KAPOW_URL=http://"+userURL) kapowCMD.Env = append(os.Environ(), "KAPOW_CONTROL_URL=http://"+controlBind)
kapowCMD.Env = append(kapowCMD.Env, "KAPOW_CONTROL_URL=http://"+controlURL)
kapowCMD.Env = append(kapowCMD.Env, "KAPOW_DATA_URL=http://"+dataURL)
// run bash -c "[pow files contents]"
err = kapowCMD.Run() err = kapowCMD.Run()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
fmt.Println()
log.Printf("Done running powfile: %q\n", powfile)
select {} select {}
}, },
@@ -69,11 +63,10 @@ var ServerCmd = &cobra.Command{
func init() { func init() {
ServerCmd.Flags().String("certfile", "", "Cert file to serve thru https") ServerCmd.Flags().String("certfile", "", "Cert file to serve thru https")
ServerCmd.Flags().String("keyfile", "", "Key file to serve thru https") ServerCmd.Flags().String("keyfile", "", "Key file to serve thru https")
ServerCmd.Flags().String("bind", "", "IP address and port to listen to")
ServerCmd.Flags().BoolP("interactive", "i", false, "Boot an empty kapow server with a shell") ServerCmd.Flags().String("bind", "localhost:8080", "IP address and port to bind the user interface to")
ServerCmd.Flags().String("url", getEnv("KAPOW_URL", "http://localhost:8080"), "Kapow! user interface URL") ServerCmd.Flags().String("control-bind", "localhost:8081", "IP address and port to bind the control interface to")
ServerCmd.Flags().String("control-url", getEnv("KAPOW_CONTROL_URL", "http://localhost:8081"), "Kapow! control interface URL") ServerCmd.Flags().String("data-bind", "localhost:8082", "IP address and port to bind the data interface to")
ServerCmd.Flags().String("data-url", getEnv("KAPOW_DATA_URL", "http://localhost:8082"), "Kapow! data interface URL")
} }
func validateServerCommandArguments(cmd *cobra.Command, args []string) error { func validateServerCommandArguments(cmd *cobra.Command, args []string) error {