From 1b6d5089f95e7d3ae6c058108b5be04fce2a3598 Mon Sep 17 00:00:00 2001 From: Shulhan Date: Sun, 15 Sep 2024 21:47:31 +0700 Subject: all: tambah flag untuk mengatur Origin dari koneksi WebSocket Misalnya, jika httpListen di set ke "127.0.0.1:10201" dan servis berjalan dibelakang sebuah proksi dengan domain "tour.golang-id.local", koneksi ke WebSocket akan ditolak, karena pada saat handshake origin dari request dicocokan dengan host dan port dari httpListen. --- local.go | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/local.go b/local.go index b838ac7..f29a822 100644 --- a/local.go +++ b/local.go @@ -36,8 +36,14 @@ const ( ) var ( - httpListen = flag.String("http", "127.0.0.1:3999", "host:port to listen on") - openBrowser = flag.Bool("openbrowser", false, "open browser automatically") + httpListen = flag.String("http", "127.0.0.1:3999", "host:port to listen on") + openBrowser = flag.Bool("openbrowser", false, "open browser automatically") + websocketOrigin = flag.String(`ws-origin`, ``, + `Set origin for handling WebSocket connection. +For service that are running behind proxy (on different IP and port than +httpListen) and/or with domain name you should set this option for WebSocket +to works. +Example value: "https://tour.golang-id.local".`) ) var ( @@ -127,7 +133,16 @@ func main() { http.HandleFunc("/", rootHandler) http.HandleFunc("/lesson/", lessonHandler) - origin := &url.URL{Scheme: "http", Host: host + ":" + port} + var origin *url.URL + + if *websocketOrigin != `` { + origin, err = url.Parse(*websocketOrigin) + if err != nil { + log.Fatalf(`invalid ws-origin: %s`, err) + } + } else { + origin = &url.URL{Scheme: "http", Host: host + ":" + port} + } http.Handle(socketPath, socket.NewHandler(origin)) registerStatic(root) -- cgit v1.3