Last active
August 18, 2019 03:12
-
-
Save L04DB4L4NC3R/04154b33f171363239bd10770aec3e93 to your computer and use it in GitHub Desktop.
Examinaar 3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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