diff --git a/killbrowser.go b/killbrowser.go new file mode 100644 index 000000000..c54625de0 --- /dev/null +++ b/killbrowser.go @@ -0,0 +1,48 @@ +package main + +import ( + "errors" + "net/http" + + "github.com/gin-gonic/gin" +) + +func killBrowserHandler(c *gin.Context) { + + var data struct { + Action string `json:"action"` + Process string `json:"process"` + URL string `json:"url"` + } + + c.BindJSON(&data) + + if data.Process != "chrome" && data.Process != "chrom" { + c.JSON(http.StatusBadRequest, errors.New("You can't kill the process"+data.Process)) + return + } + + command, err := findBrowser(data.Process) + + if err != nil { + c.JSON(http.StatusInternalServerError, err.Error()) + return + } + + if data.Action == "kill" || data.Action == "restart" { + _, err := killBrowser(data.Process) + if err != nil { + c.JSON(http.StatusInternalServerError, err.Error()) + return + } + } + + if data.Action == "restart" { + _, err := startBrowser(command, data.URL) + if err != nil { + c.JSON(http.StatusInternalServerError, err.Error()) + return + } + } + +} diff --git a/killbrowser_darwin.go b/killbrowser_darwin.go new file mode 100644 index 000000000..b0f1ec939 --- /dev/null +++ b/killbrowser_darwin.go @@ -0,0 +1,13 @@ +package main + +func findBrowser(process string) ([]byte, error) { + return nil, nil +} + +func killBrowser(process string) ([]byte, error) { + return nil, nil +} + +func startBrowser(command []byte, url string) ([]byte, error) { + return nil, nil +} diff --git a/killbrowser_linux.go b/killbrowser_linux.go new file mode 100644 index 000000000..b7b12f13c --- /dev/null +++ b/killbrowser_linux.go @@ -0,0 +1,25 @@ +package main + +import ( + "os/exec" + "strings" +) + +func findBrowser(process string) ([]byte, error) { + ps := exec.Command("ps", "-A", "-o", "command") + grep := exec.Command("grep", process) + head := exec.Command("head", "-n", "1") + + return pipe_commands(ps, grep, head) +} + +func killBrowser(process string) ([]byte, error) { + cmd := exec.Command("pkill", "-9", process) + return cmd.Output() +} + +func startBrowser(command []byte, url string) ([]byte, error) { + parts := strings.Split(string(command), " ") + cmd := exec.Command(parts[0], url) + return cmd.Output() +} diff --git a/killbrowser_windows.go b/killbrowser_windows.go new file mode 100644 index 000000000..f1e4e833c --- /dev/null +++ b/killbrowser_windows.go @@ -0,0 +1,17 @@ +package main + +import "os/exec" + +func findBrowser(process string) ([]byte, error) { + return []byte(process), nil +} + +func killBrowser(process string) ([]byte, error) { + cmd := exec.Command("Taskkill", "/F", "/IM", process+".exe") + return cmd.Output() +} + +func startBrowser(command []byte, url string) ([]byte, error) { + cmd := exec.Command("cmd", "/C", "start", string(command), url) + return cmd.Output() +} diff --git a/main.go b/main.go index e04ba5477..160319a3e 100755 --- a/main.go +++ b/main.go @@ -241,6 +241,8 @@ func main() { r.Handle("WS", "/socket.io/", socketHandler) r.Handle("WSS", "/socket.io/", socketHandler) r.GET("/info", infoHandler) + r.POST("/killbrowser", killBrowserHandler) + go func() { // check if certificates exist; if not, use plain http if _, err := os.Stat(filepath.Join(dest, "cert.pem")); os.IsNotExist(err) {