From f4d865de41c92aba0bd394ca7bf89ea22a9d7fb3 Mon Sep 17 00:00:00 2001 From: Guillaume Bordier Date: Fri, 28 Nov 2025 12:38:55 +0000 Subject: [PATCH] read GH_OAUTH_PORT from the environmnent to listen on a predictable port --- webapp/local_server.go | 13 +++++++++---- webapp/webapp_flow.go | 18 ++++++++++++++++-- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/webapp/local_server.go b/webapp/local_server.go index c895dfe..969b602 100644 --- a/webapp/local_server.go +++ b/webapp/local_server.go @@ -13,10 +13,9 @@ type CodeResponse struct { Code string State string } - -// bindLocalServer initializes a LocalServer that will listen on a randomly available TCP port. -func bindLocalServer() (*localServer, error) { - listener, err := net.Listen("tcp4", "127.0.0.1:0") +func bindLocalServerWithPort(port int) (*localServer, error) { + addr := fmt.Sprintf("127.0.0.1:%d", port) + listener, err := net.Listen("tcp4", addr) if err != nil { return nil, err } @@ -27,6 +26,12 @@ func bindLocalServer() (*localServer, error) { }, nil } +// bindLocalServer initializes a LocalServer that will listen on a randomly available TCP port. +func bindLocalServer() (*localServer, error) { + return bindLocalServerWithPort(0) + +} + type localServer struct { CallbackPath string WriteSuccessHTML func(w io.Writer) diff --git a/webapp/webapp_flow.go b/webapp/webapp_flow.go index a6c96ae..6f60454 100644 --- a/webapp/webapp_flow.go +++ b/webapp/webapp_flow.go @@ -11,8 +11,9 @@ import ( "io" "net/http" "net/url" + "os" "strings" - + "strconv" "github.com/cli/oauth/api" ) @@ -29,7 +30,20 @@ type Flow struct { // InitFlow creates a new Flow instance by detecting a locally available port number. func InitFlow() (*Flow, error) { - server, err := bindLocalServer() + + portStr := os.Getenv("GH_OAUTH_PORT") + port := 0 + + + if portStr != "" { + var err error + port, err = strconv.Atoi(portStr) + if err != nil { + port = 0 + } + } + + server, err := bindLocalServerWithPort(port) if err != nil { return nil, err }