diff --git a/ocis-pkg/checks/checkgrpc.go b/ocis-pkg/checks/checkgrpc.go index ebb22fb29d..c10b53bbf8 100644 --- a/ocis-pkg/checks/checkgrpc.go +++ b/ocis-pkg/checks/checkgrpc.go @@ -3,7 +3,6 @@ package checks import ( "context" "fmt" - "strings" "github.com/owncloud/ocis/v2/ocis-pkg/handlers" "google.golang.org/grpc" @@ -13,14 +12,9 @@ import ( // NewGRPCCheck checks the reachability of a grpc server. func NewGRPCCheck(address string) func(context.Context) error { return func(_ context.Context) error { - if strings.Contains(address, "0.0.0.0") || strings.Contains(address, "::") { - outboundIp, err := handlers.GetOutBoundIP() - if err != nil { - return err - } - address = strings.Replace(address, "0.0.0.0", outboundIp, 1) - address = strings.Replace(address, "::", "["+outboundIp+"]", 1) - address = strings.Replace(address, "[::]", "["+outboundIp+"]", 1) + address, err := handlers.FailSaveAddress(address) + if err != nil { + return err } conn, err := grpc.NewClient(address, grpc.WithTransportCredentials(insecure.NewCredentials())) diff --git a/ocis-pkg/checks/checkhttp.go b/ocis-pkg/checks/checkhttp.go index 1fab4e118b..48502fe6ac 100644 --- a/ocis-pkg/checks/checkhttp.go +++ b/ocis-pkg/checks/checkhttp.go @@ -3,23 +3,19 @@ package checks import ( "context" "fmt" - "github.com/owncloud/ocis/v2/ocis-pkg/handlers" "net/http" "strings" "time" + + "github.com/owncloud/ocis/v2/ocis-pkg/handlers" ) // NewHTTPCheck checks the reachability of a http server. func NewHTTPCheck(url string) func(context.Context) error { return func(_ context.Context) error { - if strings.Contains(url, "0.0.0.0") || strings.Contains(url, "::") { - outboundIp, err := handlers.GetOutBoundIP() - if err != nil { - return err - } - url = strings.Replace(url, "0.0.0.0", outboundIp, 1) - url = strings.Replace(url, "::", outboundIp, 1) - url = strings.Replace(url, "[::]", "["+outboundIp+"]", 1) + url, err := handlers.FailSaveAddress(url) + if err != nil { + return err } if !strings.HasPrefix(url, "http://") && !strings.HasPrefix(url, "https://") { diff --git a/ocis-pkg/checks/checktcp.go b/ocis-pkg/checks/checktcp.go index d89da356c3..693ba255ce 100644 --- a/ocis-pkg/checks/checktcp.go +++ b/ocis-pkg/checks/checktcp.go @@ -2,23 +2,18 @@ package checks import ( "context" - "github.com/owncloud/ocis/v2/ocis-pkg/handlers" "net" - "strings" "time" + + "github.com/owncloud/ocis/v2/ocis-pkg/handlers" ) // NewTCPCheck returns a check that connects to a given tcp endpoint. func NewTCPCheck(address string) func(context.Context) error { return func(_ context.Context) error { - if strings.Contains(address, "0.0.0.0") || strings.Contains(address, "::") { - outboundIp, err := handlers.GetOutBoundIP() - if err != nil { - return err - } - address = strings.Replace(address, "0.0.0.0", outboundIp, 1) - address = strings.Replace(address, "::", outboundIp, 1) - address = strings.Replace(address, "[::]", "["+outboundIp+"]", 1) + address, err := handlers.FailSaveAddress(address) + if err != nil { + return err } conn, err := net.DialTimeout("tcp", address, 3*time.Second) diff --git a/ocis-pkg/handlers/checker.go b/ocis-pkg/handlers/checker.go index 51215f5145..0326c580dc 100644 --- a/ocis-pkg/handlers/checker.go +++ b/ocis-pkg/handlers/checker.go @@ -7,10 +7,10 @@ import ( "maps" "net" "net/http" - - "golang.org/x/sync/errgroup" + "strings" "github.com/owncloud/ocis/v2/ocis-pkg/log" + "golang.org/x/sync/errgroup" ) // check is a function that performs a check. @@ -115,7 +115,22 @@ func (h *CheckHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } -func GetOutBoundIP() (string, error) { +// FailSaveAddress replaces wildcard addresses with the outbound IP. +func FailSaveAddress(address string) (string, error) { + if strings.Contains(address, "0.0.0.0") || strings.Contains(address, "::") { + outboundIp, err := getOutBoundIP() + if err != nil { + return "", err + } + address = strings.Replace(address, "0.0.0.0", outboundIp, 1) + address = strings.Replace(address, "::", "["+outboundIp+"]", 1) + address = strings.Replace(address, "[::]", "["+outboundIp+"]", 1) + } + return address, nil +} + +// getOutBoundIP returns the outbound IP address. +func getOutBoundIP() (string, error) { interfacesAddresses, err := net.InterfaceAddrs() if err != nil { return "", err