46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
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)
|
|
}
|
|
} |