func createHandler(connection *dbus.Conn) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, r *http.Request) { r.ParseForm() key := r.PostForm.Get("key") action := r.PostForm.Get("action") http_status := http.StatusOK if unit_actions, action_exists := ConfigData[key+"-"+action]; action_exists { for _, unit_action := range unit_actions { result_channel := make(chan string, 1) var err error var result string switch unit_action.Action { case "restart", "start": _, err = connection.RestartUnit(unit_action.Unit, "fail", result_channel) case "stop": _, err = connection.StopUnit(unit_action.Unit, "fail", result_channel) } if err == nil { result = <-result_channel } else { fmt.Printf("Systemd Unit ERROR: %s", err.Error()) w.Write([]byte(err.Error())) http_status = http.StatusInternalServerError } if result != "done" { fmt.Printf("Unexpected API result: %s", result) w.Write([]byte(result)) http_status = http.StatusInternalServerError } } } else { http_status = http.StatusNotFound fmt.Printf("NO ACTION WAS GIVEN.") w.Write([]byte("NO ACTION WAS GIVEN.")) } w.WriteHeader(http_status) } }