From 667c67e0a8a4a9be45970e26165c5e5c7269d9f8 Mon Sep 17 00:00:00 2001 From: Eslam-Nawara Date: Thu, 15 May 2025 16:08:05 +0300 Subject: [PATCH 1/4] update registrar to expect address instead of expecting domain --- node-registrar/Makefile | 4 ++-- node-registrar/README.md | 6 +++--- node-registrar/cmds/main.go | 22 +++++++++++++++++----- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/node-registrar/Makefile b/node-registrar/Makefile index bc77962..bc81b14 100644 --- a/node-registrar/Makefile +++ b/node-registrar/Makefile @@ -1,5 +1,5 @@ run: - go run cmds/main.go --postgres-host localhost --postgres-port 5432 --postgres-db postgres --postgres-user postgres --postgres-password password --domain localhost --server-port 8080 + go run cmds/main.go --postgres-host localhost --postgres-port 5432 --postgres-db postgres --postgres-user postgres --postgres-password password --address localhost --server-port 8080 start-postgres: docker run --name postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=password -e POSTGRES_DB=postgres -p 5432:5432 -d postgres @@ -14,7 +14,7 @@ server-start: @go run cmds/main.go \ --server-port 8080 \ --debug \ - --domain localhost \ + --address localhost \ --sql-log-level 4 \ --postgres-host localhost \ --postgres-port 5432 \ diff --git a/node-registrar/README.md b/node-registrar/README.md index 12be537..cde3de1 100644 --- a/node-registrar/README.md +++ b/node-registrar/README.md @@ -76,10 +76,10 @@ It offers operations like registring, listing, and updating farms and nodes, as Once the server is running, Swagger documentation can be accessed at: ```bash -http://:/swagger/index.html +http://
:/swagger/index.html ``` -Replace `` and `` with the appropriate values. +Replace `
` and `` with the appropriate values. ## How to Use the Server @@ -112,7 +112,7 @@ docker build -t registrar:latest -f node-registrar/Dockerfile . --max-open-conn=10 \ --max-idle-conn=5 \ --server-port=8080 \ - -- \ + -- \ --network=main\ --admin_twin_id=1 --debug diff --git a/node-registrar/cmds/main.go b/node-registrar/cmds/main.go index 9a5d0cb..fd7d703 100644 --- a/node-registrar/cmds/main.go +++ b/node-registrar/cmds/main.go @@ -19,7 +19,7 @@ type flags struct { db.Config debug bool version bool - domain string + addr string serverPort uint network string adminTwinID uint64 @@ -58,7 +58,7 @@ func Run() error { flag.BoolVar(&f.version, "v", false, "shows the package version") flag.BoolVar(&f.debug, "debug", false, "allow debug logs") flag.UintVar(&f.serverPort, "server-port", 8080, "server port") - flag.StringVar(&f.domain, "domain", "", "domain on which the server will be served") + flag.StringVar(&f.addr, "address", "", "address or domain on which the server will be served") flag.StringVar(&f.network, "network", "dev", "the registrar network") flag.Uint64Var(&f.adminTwinID, "admin-twin-id", 1, "admin twin ID") @@ -96,7 +96,7 @@ func Run() error { log.Info().Msgf("server is running on port :%d", f.serverPort) - err = s.Run(fmt.Sprintf("%s:%d", f.domain, f.serverPort)) + err = s.Run(fmt.Sprintf("%s:%d", f.addr, f.serverPort)) if err != nil { return errors.Wrap(err, "failed to run gin server") } @@ -120,8 +120,20 @@ func (f flags) validate() error { return errors.Errorf("invalid admin twin id %d, admin twin id should not be 0", f.adminTwinID) } - if _, err := net.LookupHost(f.domain); err != nil { - return errors.Wrapf(err, "invalid domain %s", f.domain) + if strings.TrimSpace(f.addr) == "" { + return errors.New("invalid domain/address, should not be empty") + } + + // Skip validation for common binding addresses + if f.addr == "0.0.0.0" || f.addr == "localhost" || f.addr == "127.0.0.1" { + return f.Config.Validate() + } + + if net.ParseIP(f.addr) == nil { + // if not valid IP address, check if valid domain + if _, err := net.LookupHost(f.addr); err != nil { + return errors.Wrapf(err, "invalid domain %s", f.addr) + } } return f.Validate() From 4d64bc97ada2b096dfb85ecbe92a3801f8468305 Mon Sep 17 00:00:00 2001 From: Eslam-Nawara Date: Tue, 10 Jun 2025 12:38:24 +0300 Subject: [PATCH 2/4] flag domain flag as deprecated --- node-registrar/cmds/main.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/node-registrar/cmds/main.go b/node-registrar/cmds/main.go index fd7d703..677c0ce 100644 --- a/node-registrar/cmds/main.go +++ b/node-registrar/cmds/main.go @@ -59,6 +59,14 @@ func Run() error { flag.BoolVar(&f.debug, "debug", false, "allow debug logs") flag.UintVar(&f.serverPort, "server-port", 8080, "server port") flag.StringVar(&f.addr, "address", "", "address or domain on which the server will be served") + + // Deprecated flag handling + flag.Func("domain", "deprecated: use --address instead", func(val string) error { + log.Warn().Msg("Warning: --domain flag is deprecated, please use --address instead") + f.addr = val + return nil + }) + flag.StringVar(&f.network, "network", "dev", "the registrar network") flag.Uint64Var(&f.adminTwinID, "admin-twin-id", 1, "admin twin ID") @@ -109,10 +117,6 @@ func (f flags) validate() error { return errors.Errorf("invalid port %d, server port should be in the valid port range 1–65535", f.serverPort) } - if strings.TrimSpace(f.domain) == "" { - return errors.New("invalid domain name, domain name should not be empty") - } - if f.SqlLogLevel < 1 || f.SqlLogLevel > 4 { return errors.Errorf("invalid sql log level %d, sql log level should be in the range 1-4", f.SqlLogLevel) } From b626d01cd16624652bf0c4f37d640f14d1a4db75 Mon Sep 17 00:00:00 2001 From: Eslam-Nawara Date: Tue, 10 Jun 2025 14:59:17 +0300 Subject: [PATCH 3/4] use host and port instead of address --- node-registrar/Makefile | 4 +-- node-registrar/README.md | 7 ++--- node-registrar/cmds/main.go | 58 +++++++++++++++++++++++-------------- 3 files changed, 41 insertions(+), 28 deletions(-) diff --git a/node-registrar/Makefile b/node-registrar/Makefile index bc81b14..f93d226 100644 --- a/node-registrar/Makefile +++ b/node-registrar/Makefile @@ -1,5 +1,5 @@ run: - go run cmds/main.go --postgres-host localhost --postgres-port 5432 --postgres-db postgres --postgres-user postgres --postgres-password password --address localhost --server-port 8080 + go run cmds/main.go --postgres-host localhost --postgres-port 5432 --postgres-db postgres --postgres-user postgres --postgres-password password --host localhost --server-port 8080 start-postgres: docker run --name postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=password -e POSTGRES_DB=postgres -p 5432:5432 -d postgres @@ -14,7 +14,7 @@ server-start: @go run cmds/main.go \ --server-port 8080 \ --debug \ - --address localhost \ + --host localhost \ --sql-log-level 4 \ --postgres-host localhost \ --postgres-port 5432 \ diff --git a/node-registrar/README.md b/node-registrar/README.md index cde3de1..1521dfa 100644 --- a/node-registrar/README.md +++ b/node-registrar/README.md @@ -1,4 +1,3 @@ - # Node Registrar Service [![Go Report Card](https://goreportcard.com/badge/github.com/threefoldtech/tfgrid-sdk-go/node-registrar)](https://goreportcard.com/report/github.com/threefoldtech/tfgrid-sdk-go/node-registrar) @@ -76,10 +75,10 @@ It offers operations like registring, listing, and updating farms and nodes, as Once the server is running, Swagger documentation can be accessed at: ```bash -http://
:/swagger/index.html +http://:/swagger/index.html ``` -Replace `
` and `` with the appropriate values. +Replace `` and `` with the appropriate values. ## How to Use the Server @@ -112,7 +111,7 @@ docker build -t registrar:latest -f node-registrar/Dockerfile . --max-open-conn=10 \ --max-idle-conn=5 \ --server-port=8080 \ - -- \ + --host= \ --network=main\ --admin_twin_id=1 --debug diff --git a/node-registrar/cmds/main.go b/node-registrar/cmds/main.go index 677c0ce..80d67b0 100644 --- a/node-registrar/cmds/main.go +++ b/node-registrar/cmds/main.go @@ -19,8 +19,8 @@ type flags struct { db.Config debug bool version bool - addr string - serverPort uint + host string + port uint network string adminTwinID uint64 } @@ -57,13 +57,13 @@ func Run() error { flag.BoolVar(&f.version, "v", false, "shows the package version") flag.BoolVar(&f.debug, "debug", false, "allow debug logs") - flag.UintVar(&f.serverPort, "server-port", 8080, "server port") - flag.StringVar(&f.addr, "address", "", "address or domain on which the server will be served") + flag.UintVar(&f.port, "server-port", 8080, "server port") + flag.StringVar(&f.host, "host", "", "host on which the server will be served") // Deprecated flag handling - flag.Func("domain", "deprecated: use --address instead", func(val string) error { - log.Warn().Msg("Warning: --domain flag is deprecated, please use --address instead") - f.addr = val + flag.Func("domain", "deprecated: use --host instead", func(val string) error { + log.Warn().Msg("Warning: --domain flag is deprecated, please use --host instead") + f.host = val return nil }) @@ -102,9 +102,9 @@ func Run() error { s := server.NewServer(db, f.network, f.adminTwinID) - log.Info().Msgf("server is running on port :%d", f.serverPort) + log.Info().Msgf("server is running on port :%d", f.port) - err = s.Run(fmt.Sprintf("%s:%d", f.addr, f.serverPort)) + err = s.Run(fmt.Sprintf("%s:%d", f.host, f.port)) if err != nil { return errors.Wrap(err, "failed to run gin server") } @@ -113,32 +113,46 @@ func Run() error { } func (f flags) validate() error { - if f.serverPort < 1 || f.serverPort > 65535 { - return errors.Errorf("invalid port %d, server port should be in the valid port range 1–65535", f.serverPort) + if f.port < 1 || f.port > 65535 { + return errors.Errorf("invalid port %d, server port should be in the valid port range 1–65535", f.port) } if f.SqlLogLevel < 1 || f.SqlLogLevel > 4 { return errors.Errorf("invalid sql log level %d, sql log level should be in the range 1-4", f.SqlLogLevel) } + if f.adminTwinID == 0 { return errors.Errorf("invalid admin twin id %d, admin twin id should not be 0", f.adminTwinID) } - if strings.TrimSpace(f.addr) == "" { - return errors.New("invalid domain/address, should not be empty") + if err := f.validateHost(); err != nil { + return err } - // Skip validation for common binding addresses - if f.addr == "0.0.0.0" || f.addr == "localhost" || f.addr == "127.0.0.1" { - return f.Config.Validate() + return f.Validate() +} + +func (f flags) validateHost() error { + host := strings.TrimSpace(f.host) + if host == "" { + return errors.New("host cannot be empty") } - if net.ParseIP(f.addr) == nil { - // if not valid IP address, check if valid domain - if _, err := net.LookupHost(f.addr); err != nil { - return errors.Wrapf(err, "invalid domain %s", f.addr) - } + // Check common binding addresses + switch host { + case "localhost", "0.0.0.0", "127.0.0.1": + return nil } - return f.Validate() + // Check if valid IP address + if ip := net.ParseIP(host); ip != nil { + return nil + } + + // Check if valid hostname + if _, err := net.LookupHost(host); err != nil { + return errors.Wrapf(err, "invalid host %q: must be a valid IP address, hostname, or domain name", host) + } + + return nil } From 17402f323e007d4441102bcd7b861d4ed7065fd1 Mon Sep 17 00:00:00 2001 From: Eslam-Nawara Date: Sun, 13 Jul 2025 17:14:34 +0300 Subject: [PATCH 4/4] add ipv4 loopback --- node-registrar/cmds/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node-registrar/cmds/main.go b/node-registrar/cmds/main.go index 80d67b0..2bfa477 100644 --- a/node-registrar/cmds/main.go +++ b/node-registrar/cmds/main.go @@ -140,7 +140,7 @@ func (f flags) validateHost() error { // Check common binding addresses switch host { - case "localhost", "0.0.0.0", "127.0.0.1": + case "localhost", "0.0.0.0", "127.0.0.1", "::1": return nil }