From a714d03e2c5a0e06ca69757e0b748e77802ef8bf Mon Sep 17 00:00:00 2001 From: Simone Basso Date: Mon, 31 Jul 2017 10:31:07 +0200 Subject: [PATCH] feature(server): allow to bind specific addresses (#263) The main use case for ooniprobe is to bind 127.0.0.1 only. --- config/config.go | 2 ++ config/config_test.go | 1 + gorush/server_unix.go | 4 ++-- gorush/server_windows.go | 4 ++-- main.go | 9 +++++++-- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/config/config.go b/config/config.go index 56edee4..d3f25cf 100644 --- a/config/config.go +++ b/config/config.go @@ -21,6 +21,7 @@ type ConfYaml struct { // SectionCore is sub section of config. type SectionCore struct { Enabled bool `yaml:"enabled"` + Address string `yaml:"address"` Port string `yaml:"port"` MaxNotification int64 `yaml:"max_notification"` WorkerNum int64 `yaml:"worker_num"` @@ -128,6 +129,7 @@ func BuildDefaultPushConf() ConfYaml { var conf ConfYaml // Core + conf.Core.Address = "" conf.Core.Port = "8088" conf.Core.Enabled = true conf.Core.WorkerNum = int64(runtime.NumCPU()) diff --git a/config/config_test.go b/config/config_test.go index 1a5200c..6ce9c45 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -55,6 +55,7 @@ func (suite *ConfigTestSuite) SetupTest() { func (suite *ConfigTestSuite) TestValidateConfDefault() { // Core + assert.Equal(suite.T(), "", suite.ConfGorushDefault.Core.Address) assert.Equal(suite.T(), "8088", suite.ConfGorushDefault.Core.Port) assert.Equal(suite.T(), true, suite.ConfGorushDefault.Core.Enabled) assert.Equal(suite.T(), int64(runtime.NumCPU()), suite.ConfGorushDefault.Core.WorkerNum) diff --git a/gorush/server_unix.go b/gorush/server_unix.go index e9d870b..9031e1b 100644 --- a/gorush/server_unix.go +++ b/gorush/server_unix.go @@ -36,13 +36,13 @@ func RunHTTPServer() (err error) { } err = gracehttp.Serve(&http.Server{ - Addr: ":" + PushConf.Core.Port, + Addr: PushConf.Core.Address + ":" + PushConf.Core.Port, Handler: routerEngine(), TLSConfig: config, }) } else { err = gracehttp.Serve(&http.Server{ - Addr: ":" + PushConf.Core.Port, + Addr: PushConf.Core.Address + ":" + PushConf.Core.Port, Handler: routerEngine(), }) } diff --git a/gorush/server_windows.go b/gorush/server_windows.go index c83fe61..e6ce8c6 100644 --- a/gorush/server_windows.go +++ b/gorush/server_windows.go @@ -17,9 +17,9 @@ func RunHTTPServer() (err error) { s := autoTLSServer() err = s.ListenAndServeTLS("", "") } else if PushConf.Core.SSL && PushConf.Core.CertPath != "" && PushConf.Core.KeyPath != "" { - err = http.ListenAndServeTLS(":"+PushConf.Core.Port, PushConf.Core.CertPath, PushConf.Core.KeyPath, routerEngine()) + err = http.ListenAndServeTLS(PushConf.Core.Address+":"+PushConf.Core.Port, PushConf.Core.CertPath, PushConf.Core.KeyPath, routerEngine()) } else { - err = http.ListenAndServe(":"+PushConf.Core.Port, routerEngine()) + err = http.ListenAndServe(PushConf.Core.Address+":"+PushConf.Core.Port, routerEngine()) } return diff --git a/main.go b/main.go index 1772141..3c80f6e 100644 --- a/main.go +++ b/main.go @@ -38,6 +38,7 @@ var usageStr = ` Usage: gorush [options] Server Options: + -A, --address
Address to bind (default: any) -p, --port Use port for clients (default: 8088) -c, --config Configuration file path -m, --message Notification message @@ -118,6 +119,8 @@ func main() { flag.StringVar(&opts.Ios.Password, "password", "", "iOS certificate password for gorush") flag.StringVar(&opts.Android.APIKey, "k", "", "Android api key configuration for gorush") flag.StringVar(&opts.Android.APIKey, "apikey", "", "Android api key configuration for gorush") + flag.StringVar(&opts.Core.Address, "A", "", "address to bind") + flag.StringVar(&opts.Core.Address, "address", "", "address to bind") flag.StringVar(&opts.Core.Port, "p", "", "port number for gorush") flag.StringVar(&opts.Core.Port, "port", "", "port number for gorush") flag.StringVar(&token, "t", "", "token string") @@ -185,14 +188,16 @@ func main() { gorush.PushConf.Stat.Redis.Addr = opts.Stat.Redis.Addr } - // overwrite server port + // overwrite server port and address if opts.Core.Port != "" { gorush.PushConf.Core.Port = opts.Core.Port } + if opts.Core.Address != "" { + gorush.PushConf.Core.Address = opts.Core.Address + } if err = gorush.InitLog(); err != nil { log.Println(err) - return }