From e75d7c8b03a3eed4a0952538ee286db50e54986f Mon Sep 17 00:00:00 2001 From: Adrian Zuercher Date: Sun, 29 Jun 2025 21:18:15 +0200 Subject: [PATCH] add automatic localhost and local ip to allow origin --- main.go | 2 +- utils/utils.go | 28 +++++++++++++++++++++------- websocket/server.go | 13 ++++++++++++- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/main.go b/main.go index 14cea4d..894b31d 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ func main() { //initialize new server dbmHandler.Log.Debug("main", "initialize new server instance") - s := ws.NewServer(a.AllowOrigins) + s := ws.NewServer(a.AllowOrigins, 9000) //set routes dbmHandler.Log.Debug("main", "setting routes") diff --git a/utils/utils.go b/utils/utils.go index 65bea40..1ddc717 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1,5 +1,10 @@ package utils +import ( + "fmt" + "net" +) + func ListofA2ZZ() (list []string) { for i := 'A'; i <= 'Z'; i++ { list = append(list, string(i)) @@ -9,12 +14,21 @@ func ListofA2ZZ() (list []string) { list = append(list, string(i)+string(j)) } } - // for i := 'A'; i <= 'Z'; i++ { - // for j := 'A'; j <= 'Z'; j++ { - // for k := 'A'; k <= 'Z'; k++ { - // list = append(list, string(i)+string(j)+string(k)) - // } - // } - // } return } + +func GetLocalIP() (string, error) { + addrs, err := net.InterfaceAddrs() + if err != nil { + return "", err + } + + for _, addr := range addrs { + if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() { + if ipNet.IP.To4() != nil { + return ipNet.IP.String(), nil + } + } + } + return "", fmt.Errorf("no local IP address found") +} diff --git a/websocket/server.go b/websocket/server.go index dfb4478..937b5d4 100644 --- a/websocket/server.go +++ b/websocket/server.go @@ -2,12 +2,14 @@ package websocket import ( "fmt" + "log" "sync" "time" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "github.com/tecamino/tecamino-dbm/cert" + "github.com/tecamino/tecamino-dbm/utils" "github.com/tecamino/tecamino-logger/logging" ) @@ -19,8 +21,17 @@ type Server struct { } // initalizes new dbm server -func NewServer(allowOrigins []string) *Server { +func NewServer(allowOrigins []string, port uint) *Server { r := gin.Default() + + allowOrigins = append(allowOrigins, fmt.Sprintf("http://localhost:%d", port)) + + localIP, err := utils.GetLocalIP() + if err != nil { + log.Printf("get local ip : %s", err.Error()) + } else { + allowOrigins = append(allowOrigins, fmt.Sprintf("http://%s:%d", localIP, port)) + } r.Use(cors.New(cors.Config{ AllowOrigins: allowOrigins, AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},