Skip to content

Instantly share code, notes, and snippets.

@L04DB4L4NC3R
Last active August 18, 2019 03:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save L04DB4L4NC3R/04154b33f171363239bd10770aec3e93 to your computer and use it in GitHub Desktop.
Save L04DB4L4NC3R/04154b33f171363239bd10770aec3e93 to your computer and use it in GitHub Desktop.
Examinaar 3
// 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)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment