Add launcher 'API'

This commit is contained in:
idk
2022-01-22 01:09:18 -05:00
parent d78cdacfbd
commit 7ca1ace12d
2 changed files with 93 additions and 40 deletions

View File

@ -40,23 +40,33 @@ func NewClient(hostname string, lang string, os string, arch string) (*Client, e
func (m *Client) ServeHTTP(rw http.ResponseWriter, rq *http.Request) { func (m *Client) ServeHTTP(rw http.ResponseWriter, rq *http.Request) {
path := rq.URL.Path path := rq.URL.Path
log.Printf("ServeHTTP: '%s'", path)
switch path { switch path {
case "/start-tor-browser": case "/launch-tor-browser":
m.TBS.RunTBWithLang() log.Println("Starting Tor Browser")
case "/start-i2p-browser": go m.TBS.RunTBWithLang()
m.TBS.RunI2PBWithLang() http.Redirect(rw, rq, "/", http.StatusFound)
case "/launch-i2p-browser":
log.Println("Starting I2P Browser")
go m.TBS.RunI2PBWithLang()
http.Redirect(rw, rq, "/", http.StatusFound)
case "/start-tor": case "/start-tor":
m.TBS.RunTorWithLang() log.Println("Starting Tor")
go m.TBS.RunTorWithLang()
http.Redirect(rw, rq, "/", http.StatusFound)
case "/stop-tor": case "/stop-tor":
m.TBS.StopTor() log.Println("Stopping Tor")
go m.TBS.StopTor()
http.Redirect(rw, rq, "/", http.StatusFound)
default: default:
b, e := m.Page() b, e := m.Page()
if e != nil { if e != nil {
fmt.Fprintf(rw, "Error: %s", e) log.Printf("Serve Error: %s", e)
} }
//rw.WriteHeader("Content-Type", "text/html")
rw.Header().Set("Content-Type", "text/html")
rw.Write([]byte(b)) rw.Write([]byte(b))
} }
rw.Write([]byte("Hello, world!"))
} }
func (m *Client) Serve() error { func (m *Client) Serve() error {

View File

@ -21,7 +21,9 @@ var (
type Supervisor struct { type Supervisor struct {
UnpackPath string UnpackPath string
Lang string Lang string
cmd *exec.Cmd torcmd *exec.Cmd
tbcmd *exec.Cmd
ibcmd *exec.Cmd
} }
func (s *Supervisor) TBPath() string { func (s *Supervisor) TBPath() string {
@ -50,6 +52,16 @@ func (s *Supervisor) I2PDataPath() string {
//} //}
} }
func (s *Supervisor) tbbail() error {
if s.tbcmd != nil && s.tbcmd.Process != nil && s.tbcmd.ProcessState != nil {
if s.tbcmd.ProcessState.Exited() {
return nil
}
return fmt.Errorf("Already running")
}
return nil
}
func (s *Supervisor) RunTBWithLang() error { func (s *Supervisor) RunTBWithLang() error {
tbget.ARCH = ARCH tbget.ARCH = ARCH
if s.Lang == "" { if s.Lang == "" {
@ -59,33 +71,47 @@ func (s *Supervisor) RunTBWithLang() error {
s.UnpackPath = UNPACK_URL s.UnpackPath = UNPACK_URL
} }
if s.tbbail() != nil {
return nil
}
log.Println("running tor browser with lang", s.Lang, s.UnpackPath) log.Println("running tor browser with lang", s.Lang, s.UnpackPath)
switch OS { switch OS {
case "linux": case "linux":
if tbget.FileExists(s.UnpackPath) { if tbget.FileExists(s.UnpackPath) {
log.Println("running tor browser with lang", s.Lang, s.UnpackPath) log.Println("running tor browser with lang", s.Lang, s.UnpackPath)
s.cmd = exec.Command(s.TBPath()) s.tbcmd = exec.Command(s.TBPath())
s.cmd.Stdout = os.Stdout s.tbcmd.Stdout = os.Stdout
s.cmd.Stderr = os.Stderr s.tbcmd.Stderr = os.Stderr
return s.cmd.Run() return s.tbcmd.Run()
} else { } else {
log.Println("tor browser not found at", s.TBPath()) log.Println("tor browser not found at", s.TBPath())
return fmt.Errorf("tor browser not found at %s", s.TBPath()) return fmt.Errorf("tor browser not found at %s", s.TBPath())
} }
case "darwin": case "darwin":
s.cmd = exec.Command("/usr/bin/env", "open", "-a", "\"Tor Browser.app\"") s.tbcmd = exec.Command("/usr/bin/env", "open", "-a", "\"Tor Browser.app\"")
s.cmd.Dir = s.TBDirectory() s.tbcmd.Dir = s.TBDirectory()
return s.cmd.Run() return s.tbcmd.Run()
case "windows": case "windows":
s.cmd = exec.Command("cmd", "/c", "start", "\""+s.TBDirectory()+"\"", "\"Tor Browser.exe\"") s.tbcmd = exec.Command("cmd", "/c", "start", "\""+s.TBDirectory()+"\"", "\"Tor Browser.exe\"")
s.cmd.Dir = s.TBDirectory() s.tbcmd.Dir = s.TBDirectory()
return s.cmd.Run() return s.tbcmd.Run()
default: default:
} }
return nil return nil
} }
func (s *Supervisor) ibbail() error {
if s.ibcmd != nil && s.ibcmd.Process != nil && s.ibcmd.ProcessState != nil {
if s.ibcmd.ProcessState.Exited() {
return nil
}
return fmt.Errorf("Already running")
}
return nil
}
func (s *Supervisor) RunI2PBWithLang() error { func (s *Supervisor) RunI2PBWithLang() error {
tbget.ARCH = ARCH tbget.ARCH = ARCH
if s.Lang == "" { if s.Lang == "" {
@ -95,33 +121,47 @@ func (s *Supervisor) RunI2PBWithLang() error {
s.UnpackPath = UNPACK_URL s.UnpackPath = UNPACK_URL
} }
if s.ibbail() != nil {
return nil
}
log.Println("running tor browser with lang", s.Lang, s.UnpackPath) log.Println("running tor browser with lang", s.Lang, s.UnpackPath)
switch OS { switch OS {
case "linux": case "linux":
if tbget.FileExists(s.UnpackPath) { if tbget.FileExists(s.UnpackPath) {
log.Println("running Tor browser with lang and I2P Profile", s.Lang, s.UnpackPath, s.FirefoxPath(), "--profile", s.I2PDataPath()) log.Println("running Tor browser with lang and I2P Profile", s.Lang, s.UnpackPath, s.FirefoxPath(), "--profile", s.I2PDataPath())
s.cmd = exec.Command(s.FirefoxPath(), "--profile", s.I2PDataPath()) s.ibcmd = exec.Command(s.FirefoxPath(), "--profile", s.I2PDataPath())
s.cmd.Stdout = os.Stdout s.ibcmd.Stdout = os.Stdout
s.cmd.Stderr = os.Stderr s.ibcmd.Stderr = os.Stderr
return s.cmd.Run() return s.ibcmd.Run()
} else { } else {
log.Println("tor browser not found at", s.FirefoxPath()) log.Println("tor browser not found at", s.FirefoxPath())
return fmt.Errorf("tor browser not found at %s", s.FirefoxPath()) return fmt.Errorf("tor browser not found at %s", s.FirefoxPath())
} }
case "darwin": case "darwin":
s.cmd = exec.Command("/usr/bin/env", "open", "-a", "\"Tor Browser.app\"") s.ibcmd = exec.Command("/usr/bin/env", "open", "-a", "\"Tor Browser.app\"")
s.cmd.Dir = s.TBDirectory() s.ibcmd.Dir = s.TBDirectory()
return s.cmd.Run() return s.ibcmd.Run()
case "windows": case "windows":
s.cmd = exec.Command("cmd", "/c", "start", "\""+s.TBDirectory()+"\"", "\"Tor Browser.exe\"") s.ibcmd = exec.Command("cmd", "/c", "start", "\""+s.TBDirectory()+"\"", "\"Tor Browser.exe\"")
s.cmd.Dir = s.TBDirectory() s.ibcmd.Dir = s.TBDirectory()
return s.cmd.Run() return s.ibcmd.Run()
default: default:
} }
return nil return nil
} }
func (s *Supervisor) torbail() error {
if s.torcmd != nil && s.torcmd.Process != nil && s.torcmd.ProcessState != nil {
if s.torcmd.ProcessState.Exited() {
return nil
}
return fmt.Errorf("Already running")
}
return nil
}
func (s *Supervisor) RunTorWithLang() error { func (s *Supervisor) RunTorWithLang() error {
tbget.ARCH = ARCH tbget.ARCH = ARCH
if s.Lang == "" { if s.Lang == "" {
@ -130,28 +170,31 @@ func (s *Supervisor) RunTorWithLang() error {
if s.UnpackPath == "" { if s.UnpackPath == "" {
s.UnpackPath = UNPACK_URL s.UnpackPath = UNPACK_URL
} }
if err := s.torbail(); err != nil {
return nil
}
log.Println("running tor with lang", s.Lang, s.UnpackPath) log.Println("running tor with lang", s.Lang, s.UnpackPath)
switch OS { switch OS {
case "linux": case "linux":
if tbget.FileExists(s.UnpackPath) { if tbget.FileExists(s.UnpackPath) {
log.Println("running tor with lang", s.Lang, s.UnpackPath) log.Println("running tor with lang", s.Lang, s.UnpackPath)
s.cmd = exec.Command(s.TorPath()) s.torcmd = exec.Command(s.TorPath())
s.cmd.Stdout = os.Stdout s.torcmd.Stdout = os.Stdout
s.cmd.Stderr = os.Stderr s.torcmd.Stderr = os.Stderr
return s.cmd.Run() return s.torcmd.Run()
} else { } else {
log.Println("tor not found at", s.TorPath()) log.Println("tor not found at", s.TorPath())
return fmt.Errorf("tor not found at %s", s.TorPath()) return fmt.Errorf("tor not found at %s", s.TorPath())
} }
case "darwin": case "darwin":
s.cmd = exec.Command("/usr/bin/env", "open", "-a", "\"Tor Browser.app\"") s.torcmd = exec.Command("/usr/bin/env", "open", "-a", "\"Tor Browser.app\"")
s.cmd.Dir = s.TBDirectory() s.torcmd.Dir = s.TBDirectory()
return s.cmd.Run() return s.torcmd.Run()
case "windows": case "windows":
s.cmd = exec.Command("cmd", "/c", "start", "\""+s.TBDirectory()+"\"", "\"Tor Browser.exe\"") s.torcmd = exec.Command("cmd", "/c", "start", "\""+s.TBDirectory()+"\"", "\"Tor Browser.exe\"")
s.cmd.Dir = s.TBDirectory() s.torcmd.Dir = s.TBDirectory()
return s.cmd.Run() return s.torcmd.Run()
default: default:
} }
@ -159,7 +202,7 @@ func (s *Supervisor) RunTorWithLang() error {
} }
func (s *Supervisor) StopTor() error { func (s *Supervisor) StopTor() error {
return s.cmd.Process.Kill() return s.torcmd.Process.Kill()
} }
func NewSupervisor(tbPath, lang string) *Supervisor { func NewSupervisor(tbPath, lang string) *Supervisor {