// Attaching a servepage function to the /host endpoint to handle post request func (h Host) servepage(w http.ResponseWriter, r \*http.Request) { err := r.ParseForm() if err != nil { log.Println(err) } f := r.Form port1 := f.Get("port1") port2 := f.Get("port2") if !CheckPort(port1, port2) { w.Write([]byte("Invalid value of port")) return } // populating a struct from posted data data := struct { Port1 string Port2 string Image1 string Image2 string Email string Hosting bool }{ Port1: port1, Port2: port2, Image1: f.Get("image1"), Image2: f.Get("image2"), Email: host.(string), Hosting: true, } go func() { // run docker container set := exec.Command("docker", "container", "run", "-it", "-d", "--name", data.Email+"1", data.Image1) if err := set.Run(); err != nil { log.Fatalln(err) } else { // exec into that container and share cmd := exec.Command("gotty", "-w", "-p", data.Port1, "docker", "container", "exec", "-it", data.Email+"1", "sh") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err = cmd.Run(); err != nil { log.Fatalln(err) } } }() go func() { set := exec.Command("docker", "container", "run", "-it", "-d", "--name", data.Email+"2", data.Image2) if err := set.Run(); err != nil { log.Fatalln(err) } else { cmd := exec.Command("gotty", "-w", "-p", data.Port2, "docker", "container", "exec", "-it", data.Email+"2", "sh") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err = cmd.Run(); err != nil { log.Fatalln(err) } } }() // sleep to give enough time for docker container to start time.Sleep(7 \* time.Second) t := h.temp.Lookup("host.html") if t != nil { err := t.Execute(w, data) if err != nil { log.Println(err) } } else { w.WriteHeader(http.StatusNotFound) } } }