diff options
| author | Will Norris <will@tailscale.com> | 2023-08-08 12:59:02 -0700 |
|---|---|---|
| committer | Will Norris <will@tailscale.com> | 2023-08-10 10:38:49 -0700 |
| commit | 5e7666084379b27ea3389851f5366c81384b6d62 (patch) | |
| tree | 7c8952bdaf9d61ef130a4cdc76b713087b50c776 /webui/webui.go | |
| parent | 94253129239547f7235b7c4f7ccf0bbd4f25c01c (diff) | |
| download | tailscale-tsweb/client-ui.tar.xz tailscale-tsweb/client-ui.zip | |
stashtsweb/client-ui
Diffstat (limited to 'webui/webui.go')
| -rw-r--r-- | webui/webui.go | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/webui/webui.go b/webui/webui.go index 048cf00e8..965ed8aa9 100644 --- a/webui/webui.go +++ b/webui/webui.go @@ -3,9 +3,66 @@ package webui import ( "fmt" + "log" "net/http" + "net/http/httputil" + "net/url" + "os" + "os/exec" + "path/filepath" + "strings" ) -func Handle(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "Hello, world") +type Server struct { + DevMode bool +} + +func (s *Server) Start() { +} + +func (s *Server) Handle(w http.ResponseWriter, r *http.Request) { + if s.DevMode { + au, _ := url.Parse("http://127.0.0.1:4000") + proxy := httputil.NewSingleHostReverseProxy(au) + proxy.ServeHTTP(w, r) + return + } + fmt.Fprintf(w, "Hello production") +} + +func RunJSDevServer() (cleanup func()) { + root := gitRootDir() + webuiPath := filepath.Join(root, "webui") + + yarn := filepath.Join(root, "tool", "yarn") + node := filepath.Join(root, "tool", "node") + vite := filepath.Join(webuiPath, "node_modules", ".bin", "vite") + + log.Printf("installing JavaScript deps using %s... (might take ~30s)", yarn) + out, err := exec.Command(yarn, "--non-interactive", "-s", "--cwd", webuiPath, "install").CombinedOutput() + if err != nil { + log.Fatalf("error running admin panel's yarn install: %v, %s", err, out) + } + log.Printf("starting JavaScript dev server...") + cmd := exec.Command(node, vite) + cmd.Dir = webuiPath + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Start(); err != nil { + log.Fatalf("Starting JS dev server: %v", err) + } + log.Printf("JavaScript dev server running as pid %d", cmd.Process.Pid) + return func() { + cmd.Process.Signal(os.Interrupt) + err := cmd.Wait() + log.Printf("JavaScript dev server exited: %v", err) + } +} + +func gitRootDir() string { + top, err := exec.Command("git", "rev-parse", "--show-toplevel").Output() + if err != nil { + log.Fatalf("failed to find git top level (not in corp git?): %v", err) + } + return strings.TrimSpace(string(top)) } |
