From 595d08ba5a79b300b76c2d9be920451b16cf38f7 Mon Sep 17 00:00:00 2001 From: Ken Date: Thu, 28 May 2026 06:06:36 +0000 Subject: [PATCH] feat(muxterm): scaffold Go module with main.go entry point --- muxterm/go.mod | 8 ++++++++ muxterm/go.sum | 2 ++ muxterm/main.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 muxterm/go.mod create mode 100644 muxterm/go.sum create mode 100644 muxterm/main.go diff --git a/muxterm/go.mod b/muxterm/go.mod new file mode 100644 index 0000000..63a2b05 --- /dev/null +++ b/muxterm/go.mod @@ -0,0 +1,8 @@ +module github.com/muxplex/muxterm + +go 1.22 + +require ( + github.com/creack/pty v1.1.24 + github.com/gorilla/websocket v1.5.3 +) diff --git a/muxterm/go.sum b/muxterm/go.sum new file mode 100644 index 0000000..14d693a --- /dev/null +++ b/muxterm/go.sum @@ -0,0 +1,2 @@ +github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= diff --git a/muxterm/main.go b/muxterm/main.go new file mode 100644 index 0000000..0272cd5 --- /dev/null +++ b/muxterm/main.go @@ -0,0 +1,46 @@ +package main + +import ( + "encoding/json" + "flag" + "log" + "net/http" + "os" + "os/signal" + "syscall" +) + +func main() { + addr := flag.String("addr", "127.0.0.1:7682", "listen address") + secret := flag.String("secret", os.Getenv("MUXTERM_SECRET"), "shared secret (or set MUXTERM_SECRET)") + flag.Parse() + + if *secret == "" { + log.Fatal("secret is required: use --secret or set MUXTERM_SECRET") + } + + pool := NewPool() + + // Graceful shutdown on SIGTERM/SIGINT + sig := make(chan os.Signal, 1) + signal.Notify(sig, syscall.SIGTERM, syscall.SIGINT) + go func() { + <-sig + pool.CloseAll() + os.Exit(0) + }() + + http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { + HandleWebSocket(pool, *secret, w, r) + }) + + http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(map[string]string{"status": "ok"}) + }) + + log.Printf("muxterm listening on %s", *addr) + if err := http.ListenAndServe(*addr, nil); err != nil { + log.Fatal(err) + } +} \ No newline at end of file