diff --git a/cli/access.go b/cli/access.go index 95e02cc..d6212b6 100644 --- a/cli/access.go +++ b/cli/access.go @@ -36,9 +36,12 @@ type accessResponseURLs struct { type Access struct { base `kong:"-"` - ConfigPath string `kong:"arg,required,type='existingfile',help='Path to the configuration file.',name='config-path'"` // nolint: lll - Port uint `kong:"help='Port number. Default port is taken from configuration file, bind-to parameter',type:'uint'"` // nolint: lll - Hex bool `kong:"help='Print secret in hex encoding.'"` + PublicIPv4 net.IP `kong:"help='Public IPv4 address for proxy. By default it is resolved via remote website',name='ipv4',short='i'"` // nolint: lll + PublicIPv6 net.IP `kong:"help='Public IPv6 address for proxy. By default it is resolved via remote website',name='ipv6',short='I'"` // nolint: lll + Port uint `kong:"help='Port number. Default port is taken from configuration file, bind-to parameter',type:'uint',short='p'"` // nolint: lll + Hex bool `kong:"help='Print secret in hex encoding.',short='x'"` + + ConfigPath string `kong:"arg,required,type='existingfile',help='Path to the configuration file.',name='config-path'"` // nolint: lll } func (c *Access) Run(cli *CLI, version string) error { @@ -60,7 +63,7 @@ func (c *Access) Execute(cli *CLI) error { go func() { defer wg.Done() - ip := c.Config.Network.PublicIP.IPv4.Value(nil) + ip := cli.Access.PublicIPv4 if ip == nil { ip = c.getIP("tcp4") } @@ -75,7 +78,7 @@ func (c *Access) Execute(cli *CLI) error { go func() { defer wg.Done() - ip := c.Config.Network.PublicIP.IPv6.Value(nil) + ip := cli.Access.PublicIPv6 if ip == nil { ip = c.getIP("tcp6") } diff --git a/cli/access_test.go b/cli/access_test.go index d442d4a..f1c1435 100644 --- a/cli/access_test.go +++ b/cli/access_test.go @@ -1,6 +1,7 @@ package cli_test import ( + "net" "net/http" "testing" @@ -122,12 +123,8 @@ func (suite *AccessTestSuite) SetupTest() { } func (suite *AccessTestSuite) TestGenerateNoCalls() { - suite.NoError( - suite.cli.Access.Config.Network.PublicIP.IPv4.UnmarshalText( - []byte("10.0.0.10"))) - suite.NoError( - suite.cli.Access.Config.Network.PublicIP.IPv6.UnmarshalText( - []byte("2001:0db8:85a3:0000:0000:8a2e:0370:7334"))) + suite.cli.Access.PublicIPv4 = net.ParseIP("10.0.0.10") + suite.cli.Access.PublicIPv6 = net.ParseIP("2001:0db8:85a3:0000:0000:8a2e:0370:7334") output := suite.CaptureStdout(func() { suite.NoError(suite.cli.Access.Execute(suite.cli)) @@ -148,9 +145,7 @@ func (suite *AccessTestSuite) TestGenerateNoCalls() { } func (suite *AccessTestSuite) TestGenerateIPv4Call() { - suite.NoError( - suite.cli.Access.Config.Network.PublicIP.IPv6.UnmarshalText( - []byte("2001:0db8:85a3:0000:0000:8a2e:0370:7334"))) + suite.cli.Access.PublicIPv6 = net.ParseIP("2001:0db8:85a3:0000:0000:8a2e:0370:7334") httpmock.RegisterResponder(http.MethodGet, "https://ifconfig.co", httpmock.NewStringResponder(http.StatusOK, "10.11.12.13")) @@ -174,9 +169,7 @@ func (suite *AccessTestSuite) TestGenerateIPv4Call() { } func (suite *AccessTestSuite) TestIPv4CallFail() { - suite.NoError( - suite.cli.Access.Config.Network.PublicIP.IPv6.UnmarshalText( - []byte("2001:0db8:85a3:0000:0000:8a2e:0370:7334"))) + suite.cli.Access.PublicIPv6 = net.ParseIP("2001:0db8:85a3:0000:0000:8a2e:0370:7334") httpmock.RegisterResponder(http.MethodGet, "https://ifconfig.co", httpmock.NewStringResponder(http.StatusForbidden, "")) diff --git a/cli/cli.go b/cli/cli.go index 6cfb2b4..f620e21 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -5,5 +5,5 @@ import "github.com/alecthomas/kong" type CLI struct { GenerateSecret GenerateSecret `kong:"cmd,help='Generate new proxy secret'"` Access Access `kong:"cmd,help='Print access information.'"` - Version kong.VersionFlag `kong:"help='Print version.'"` + Version kong.VersionFlag `kong:"help='Print version.',short='v'"` } diff --git a/cli/generate_secret.go b/cli/generate_secret.go index 224ba85..e618dfd 100644 --- a/cli/generate_secret.go +++ b/cli/generate_secret.go @@ -10,7 +10,7 @@ type GenerateSecret struct { base `kong:"-"` HostName string `kong:"arg,required,help='Hostname to use for domain fronting.',name='hostname'"` - Hex bool `kong:"help='Print secret in hex encoding.'"` + Hex bool `kong:"help='Print secret in hex encoding.',short='x'"` } func (c *GenerateSecret) Run(cli *CLI, _ string) error { diff --git a/config/config.go b/config/config.go index 3176867..dd7f9c8 100644 --- a/config/config.go +++ b/config/config.go @@ -35,10 +35,6 @@ type Config struct { } `json:"blocklist"` } `json:"defense"` Network struct { - PublicIP struct { - IPv4 TypeIP `json:"ipv4"` - IPv6 TypeIP `json:"ipv6"` - } `json:"public-ip"` Timeout struct { TCP TypeDuration `json:"tcp"` HTTP TypeDuration `json:"http"` @@ -113,10 +109,6 @@ type configRaw struct { } `toml:"blocklist" json:"blocklist,omitempty"` } `toml:"defense" json:"defense,omitempty"` Network struct { - PublicIP struct { - IPv4 string `toml:"ipv4" json:"ipv4,omitempty"` - IPv6 string `toml:"ipv6" json:"ipv6,omitempty"` - } `toml:"public-ip" json:"public-ip,omitempty"` Timeout struct { TCP string `toml:"tcp" json:"tcp,omitempty"` HTTP string `toml:"http" json:"http,omitempty"` diff --git a/example.config.toml b/example.config.toml index 0522909..c3d3fbb 100644 --- a/example.config.toml +++ b/example.config.toml @@ -98,13 +98,6 @@ proxies = [ # "socks5://user:password@host:port?open_threshold=5&half_open_timeout=1m&reset_failures_timeout=10s" ] -# public ip addresses of the server. Actually, it is required only to -# generate a correct access file. if you use default values here, mtg -# will try to resolve these IPs on its own. -[network.public-ip] -ipv4 = "" -ipv6 = "" - # network timeouts define different settings for timeouts. tcp timeout # define a global timeout on establishing of network connections. idle # means a timeout on pumping data between sockset when nothing is @@ -171,7 +164,7 @@ urls = [ # "/local.file" ] # How often do we need to update a blocklist set. -update-each = "1d" +update-each = "24h" # statsd statistics integration. [stats.statsd]