@@ -19,8 +19,8 @@ type flags struct {
1919 db.Config
2020 debug bool
2121 version bool
22- addr string
23- serverPort uint
22+ host string
23+ port uint
2424 network string
2525 adminTwinID uint64
2626}
@@ -57,13 +57,13 @@ func Run() error {
5757
5858 flag .BoolVar (& f .version , "v" , false , "shows the package version" )
5959 flag .BoolVar (& f .debug , "debug" , false , "allow debug logs" )
60- flag .UintVar (& f .serverPort , "server-port" , 8080 , "server port" )
61- flag .StringVar (& f .addr , "address " , "" , "address or domain on which the server will be served" )
60+ flag .UintVar (& f .port , "server-port" , 8080 , "server port" )
61+ flag .StringVar (& f .host , "host " , "" , "host on which the server will be served" )
6262
6363 // Deprecated flag handling
64- flag .Func ("domain" , "deprecated: use --address instead" , func (val string ) error {
65- log .Warn ().Msg ("Warning: --domain flag is deprecated, please use --address instead" )
66- f .addr = val
64+ flag .Func ("domain" , "deprecated: use --host instead" , func (val string ) error {
65+ log .Warn ().Msg ("Warning: --domain flag is deprecated, please use --host instead" )
66+ f .host = val
6767 return nil
6868 })
6969
@@ -102,9 +102,9 @@ func Run() error {
102102
103103 s := server .NewServer (db , f .network , f .adminTwinID )
104104
105- log .Info ().Msgf ("server is running on port :%d" , f .serverPort )
105+ log .Info ().Msgf ("server is running on port :%d" , f .port )
106106
107- err = s .Run (fmt .Sprintf ("%s:%d" , f .addr , f .serverPort ))
107+ err = s .Run (fmt .Sprintf ("%s:%d" , f .host , f .port ))
108108 if err != nil {
109109 return errors .Wrap (err , "failed to run gin server" )
110110 }
@@ -113,32 +113,46 @@ func Run() error {
113113}
114114
115115func (f flags ) validate () error {
116- if f .serverPort < 1 || f .serverPort > 65535 {
117- return errors .Errorf ("invalid port %d, server port should be in the valid port range 1–65535" , f .serverPort )
116+ if f .port < 1 || f .port > 65535 {
117+ return errors .Errorf ("invalid port %d, server port should be in the valid port range 1–65535" , f .port )
118118 }
119119
120120 if f .SqlLogLevel < 1 || f .SqlLogLevel > 4 {
121121 return errors .Errorf ("invalid sql log level %d, sql log level should be in the range 1-4" , f .SqlLogLevel )
122122 }
123+
123124 if f .adminTwinID == 0 {
124125 return errors .Errorf ("invalid admin twin id %d, admin twin id should not be 0" , f .adminTwinID )
125126 }
126127
127- if strings . TrimSpace ( f . addr ) == "" {
128- return errors . New ( "invalid domain/address, should not be empty" )
128+ if err := f . validateHost (); err != nil {
129+ return err
129130 }
130131
131- // Skip validation for common binding addresses
132- if f .addr == "0.0.0.0" || f .addr == "localhost" || f .addr == "127.0.0.1" {
133- return f .Config .Validate ()
132+ return f .Validate ()
133+ }
134+
135+ func (f flags ) validateHost () error {
136+ host := strings .TrimSpace (f .host )
137+ if host == "" {
138+ return errors .New ("host cannot be empty" )
134139 }
135140
136- if net .ParseIP (f .addr ) == nil {
137- // if not valid IP address, check if valid domain
138- if _ , err := net .LookupHost (f .addr ); err != nil {
139- return errors .Wrapf (err , "invalid domain %s" , f .addr )
140- }
141+ // Check common binding addresses
142+ switch host {
143+ case "localhost" , "0.0.0.0" , "127.0.0.1" :
144+ return nil
141145 }
142146
143- return f .Validate ()
147+ // Check if valid IP address
148+ if ip := net .ParseIP (host ); ip != nil {
149+ return nil
150+ }
151+
152+ // Check if valid hostname
153+ if _ , err := net .LookupHost (host ); err != nil {
154+ return errors .Wrapf (err , "invalid host %q: must be a valid IP address, hostname, or domain name" , host )
155+ }
156+
157+ return nil
144158}
0 commit comments