mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-09-01 00:04:02 +03:00
Fix lint issues
This commit is contained in:
+1
-1
@@ -16,5 +16,5 @@ func (r *Run) Run(cli *CLI, version string) error {
|
|||||||
return fmt.Errorf("cannot init config: %w", err)
|
return fmt.Errorf("cannot init config: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return runProxy(conf, version)
|
return runProxy(conf, version)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ func makeNetwork(conf *config.Config, version string) (mtglib.Network, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proxyURLs := make([]*url.URL, 0, len(conf.Network.Proxies))
|
proxyURLs := make([]*url.URL, 0, len(conf.Network.Proxies))
|
||||||
|
|
||||||
for _, v := range conf.Network.Proxies {
|
for _, v := range conf.Network.Proxies {
|
||||||
if value := v.Get(nil); value != nil {
|
if value := v.Get(nil); value != nil {
|
||||||
proxyURLs = append(proxyURLs, value)
|
proxyURLs = append(proxyURLs, value)
|
||||||
|
|||||||
@@ -13,17 +13,17 @@ type SimpleRun struct {
|
|||||||
BindTo string `kong:"arg,required,name='bind-to',help='A host:port to bind proxy to.'"`
|
BindTo string `kong:"arg,required,name='bind-to',help='A host:port to bind proxy to.'"`
|
||||||
Secret string `kong:"arg,required,name='secret',help='Proxy secret.'"`
|
Secret string `kong:"arg,required,name='secret',help='Proxy secret.'"`
|
||||||
|
|
||||||
Debug bool `kong:"name='debug',short='d',help='Run in debug mode.'"`
|
Debug bool `kong:"name='debug',short='d',help='Run in debug mode.'"` // nolint: lll
|
||||||
Concurrency uint64 `kong:"name='concurrency',short='c',default='8192',help='Max number of concurrent connection to proxy.'"`
|
Concurrency uint64 `kong:"name='concurrency',short='c',default='8192',help='Max number of concurrent connection to proxy.'"` // nolint: lll
|
||||||
TCPBuffer string `kong:"name='tcp-buffer',short='b',default='4KB',help='Size of TCP buffer to use.'"`
|
TCPBuffer string `kong:"name='tcp-buffer',short='b',default='4KB',help='Size of TCP buffer to use.'"` // nolint: lll
|
||||||
PreferIP string `kong:"name='prefer-ip',short='i',default='prefer-ipv6',help='IP preference. By default we prefer IPv6 with fallback to IPv4.'"`
|
PreferIP string `kong:"name='prefer-ip',short='i',default='prefer-ipv6',help='IP preference. By default we prefer IPv6 with fallback to IPv4.'"` // nolint: lll
|
||||||
DomainFrontingPort uint64 `kong:"name='domain-fronting-port',short='p',default='443',help='A port to access for domain fronting.'"`
|
DomainFrontingPort uint64 `kong:"name='domain-fronting-port',short='p',default='443',help='A port to access for domain fronting.'"` // nolint: lll
|
||||||
DOHIP net.IP `kong:"name='doh-ip',short='d',default='9.9.9.9',help='IP address of DNS-over-HTTP to use.'"`
|
DOHIP net.IP `kong:"name='doh-ip',short='n',default='9.9.9.9',help='IP address of DNS-over-HTTP to use.'"` // nolint: lll
|
||||||
Timeout time.Duration `kong:"name='timeout',short='t',default='10s',help='Network timeout to use'"`
|
Timeout time.Duration `kong:"name='timeout',short='t',default='10s',help='Network timeout to use'"` // nolint: lll
|
||||||
AntiReplayCacheSize string `kong:"name='antireplay-cache-size',short='a',default='1MB',help='A size of anti-replay cache to use.'"`
|
AntiReplayCacheSize string `kong:"name='antireplay-cache-size',short='a',default='1MB',help='A size of anti-replay cache to use.'"` // nolint: lll
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SimpleRun) Run(cli *CLI, version string) error {
|
func (s *SimpleRun) Run(cli *CLI, version string) error { // nolint: cyclop
|
||||||
conf := &config.Config{}
|
conf := &config.Config{}
|
||||||
|
|
||||||
if err := conf.BindTo.Set(s.BindTo); err != nil {
|
if err := conf.BindTo.Set(s.BindTo); err != nil {
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ func (c *Config) Validate() error {
|
|||||||
return fmt.Errorf("invalid secret %s", c.Secret.String())
|
return fmt.Errorf("invalid secret %s", c.Secret.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.BindTo.Get("") == "" {
|
if c.BindTo.Get("") == "" {
|
||||||
return fmt.Errorf("incorrect bind-to parameter %s", c.BindTo.String())
|
return fmt.Errorf("incorrect bind-to parameter %s", c.BindTo.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type ConfigTestSuite struct {
|
type ConfigTestSuite struct {
|
||||||
suite.Suite
|
suite.Suite
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *ConfigTestSuite) ReadConfig(filename string) []byte {
|
func (suite *ConfigTestSuite) ReadConfig(filename string) []byte {
|
||||||
|
|||||||
@@ -13,12 +13,12 @@ type TypeBlocklistURI struct {
|
|||||||
|
|
||||||
func (t *TypeBlocklistURI) Set(value string) error {
|
func (t *TypeBlocklistURI) Set(value string) error {
|
||||||
if stat, err := os.Stat(value); err == nil || os.IsExist(err) {
|
if stat, err := os.Stat(value); err == nil || os.IsExist(err) {
|
||||||
switch {
|
switch {
|
||||||
case stat.IsDir():
|
case stat.IsDir():
|
||||||
return fmt.Errorf("value is correct filepath but directory")
|
return fmt.Errorf("value is correct filepath but directory")
|
||||||
case stat.Mode().Perm() & 0o400 == 0:
|
case stat.Mode().Perm()&0o400 == 0:
|
||||||
return fmt.Errorf("value is correct filepath but not readable")
|
return fmt.Errorf("value is correct filepath but not readable")
|
||||||
}
|
}
|
||||||
|
|
||||||
value, err = filepath.Abs(value)
|
value, err = filepath.Abs(value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -102,9 +102,9 @@ func (suite *TypeBlocklistURITestSuite) TestGet() {
|
|||||||
value := config.TypeBlocklistURI{}
|
value := config.TypeBlocklistURI{}
|
||||||
suite.Equal("/path", value.Get("/path"))
|
suite.Equal("/path", value.Get("/path"))
|
||||||
|
|
||||||
suite.NoError(value.Set("http://lalala.ru"))
|
suite.NoError(value.Set("http://lalala.ru"))
|
||||||
suite.Equal("http://lalala.ru", value.Get("/path"))
|
suite.Equal("http://lalala.ru", value.Get("/path"))
|
||||||
suite.Equal("http://lalala.ru", value.Get(""))
|
suite.Equal("http://lalala.ru", value.Get(""))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTypeBlocklistURI(t *testing.T) {
|
func TestTypeBlocklistURI(t *testing.T) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ type TypeBytes struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *TypeBytes) Set(value string) error {
|
func (t *TypeBytes) Set(value string) error {
|
||||||
normalizedValue := typeBytesStringCleaner.Replace(strings.ToUpper(value))
|
normalizedValue := typeBytesStringCleaner.Replace(strings.ToUpper(value))
|
||||||
|
|
||||||
parsedValue, err := units.ParseBase2Bytes(normalizedValue)
|
parsedValue, err := units.ParseBase2Bytes(normalizedValue)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -64,20 +64,20 @@ func (suite *TypeBytesTestSuite) TestUnmarshalOk() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *TypeBytesTestSuite) TestMarshalOk() {
|
func (suite *TypeBytesTestSuite) TestMarshalOk() {
|
||||||
value := typeBytesTestStruct{}
|
value := typeBytesTestStruct{}
|
||||||
suite.NoError(value.Value.Set("1kib"))
|
suite.NoError(value.Value.Set("1kib"))
|
||||||
|
|
||||||
data, err := json.Marshal(value)
|
data, err := json.Marshal(value)
|
||||||
suite.NoError(err)
|
suite.NoError(err)
|
||||||
suite.JSONEq(`{"value": "1kib"}`, string(data))
|
suite.JSONEq(`{"value": "1kib"}`, string(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *TypeBytesTestSuite) TestGet() {
|
func (suite *TypeBytesTestSuite) TestGet() {
|
||||||
value := config.TypeBytes{}
|
value := config.TypeBytes{}
|
||||||
suite.EqualValues(1000, value.Get(1000))
|
suite.EqualValues(1000, value.Get(1000))
|
||||||
|
|
||||||
suite.NoError(value.Set("1mib"))
|
suite.NoError(value.Set("1mib"))
|
||||||
suite.EqualValues(1048576, value.Get(1000))
|
suite.EqualValues(1048576, value.Get(1000))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTypeBytes(t *testing.T) {
|
func TestTypeBytes(t *testing.T) {
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ type TypeConcurrency struct {
|
|||||||
func (t *TypeConcurrency) Set(value string) error {
|
func (t *TypeConcurrency) Set(value string) error {
|
||||||
concurrencyValue, err := strconv.ParseUint(value, 10, 64)
|
concurrencyValue, err := strconv.ParseUint(value, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Value is not uint (%s): %w", value, err)
|
return fmt.Errorf("value is not uint (%s): %w", value, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if concurrencyValue == 0 {
|
if concurrencyValue == 0 {
|
||||||
return fmt.Errorf("Value should be >0 (%s)", value)
|
return fmt.Errorf("value should be >0 (%s)", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Value = uint(concurrencyValue)
|
t.Value = uint(concurrencyValue)
|
||||||
|
|||||||
@@ -86,12 +86,12 @@ func (suite *TypeDurationTestSuite) TestMarshalOk() {
|
|||||||
data, err := json.Marshal(testStruct)
|
data, err := json.Marshal(testStruct)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
expectedJson, err := json.Marshal(map[string]string{
|
expectedJSON, err := json.Marshal(map[string]string{
|
||||||
"value": expected,
|
"value": expected,
|
||||||
})
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.JSONEq(t, string(expectedJson), string(data))
|
assert.JSONEq(t, string(expectedJSON), string(data))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ type TypeErrorRate struct {
|
|||||||
func (t *TypeErrorRate) Set(value string) error {
|
func (t *TypeErrorRate) Set(value string) error {
|
||||||
parsedValue, err := strconv.ParseFloat(value, 64)
|
parsedValue, err := strconv.ParseFloat(value, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Value is not a float (%s): %w", value, err)
|
return fmt.Errorf("value is not a float (%s): %w", value, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if parsedValue <= 0.0 || parsedValue >= 100.0 {
|
if parsedValue <= 0.0 || parsedValue >= 100.0 {
|
||||||
return fmt.Errorf("Value should be 0 < x < 100 (%s)", value)
|
return fmt.Errorf("value should be 0 < x < 100 (%s)", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Value = parsedValue
|
t.Value = parsedValue
|
||||||
|
|||||||
@@ -62,9 +62,9 @@ func (suite *TypeErrorRateTestSuite) TestMarshalOk() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
encodedJson, err := json.Marshal(testStruct)
|
encodedJSON, err := json.Marshal(testStruct)
|
||||||
suite.NoError(err)
|
suite.NoError(err)
|
||||||
suite.JSONEq(`{"value": 1.01}`, string(encodedJson))
|
suite.JSONEq(`{"value": 1.01}`, string(encodedJSON))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *TypeErrorRateTestSuite) TestGet() {
|
func (suite *TypeErrorRateTestSuite) TestGet() {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ func (t *TypeIP) Set(value string) error {
|
|||||||
return fmt.Errorf("incorret ip %s", value)
|
return fmt.Errorf("incorret ip %s", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Value = ip
|
t.Value = ip
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ type TypeMetricPrefix struct {
|
|||||||
|
|
||||||
func (t *TypeMetricPrefix) Set(value string) error {
|
func (t *TypeMetricPrefix) Set(value string) error {
|
||||||
if ok, err := regexp.MatchString("^[a-z0-9]+$", value); !ok || err != nil {
|
if ok, err := regexp.MatchString("^[a-z0-9]+$", value); !ok || err != nil {
|
||||||
return fmt.Errorf("incorrect metric prefix %s: %w", value, err)
|
return fmt.Errorf("incorrect metric prefix %s: %w", value, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Value = value
|
t.Value = value
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type TypePort struct {
|
type TypePort struct {
|
||||||
Value uint16
|
Value uint
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TypePort) Set(value string) error {
|
func (t *TypePort) Set(value string) error {
|
||||||
@@ -19,12 +19,12 @@ func (t *TypePort) Set(value string) error {
|
|||||||
return fmt.Errorf("incorrect port number (%s)", value)
|
return fmt.Errorf("incorrect port number (%s)", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Value = uint16(portValue)
|
t.Value = uint(portValue)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t TypePort) Get(defaultValue uint16) uint16 {
|
func (t TypePort) Get(defaultValue uint) uint {
|
||||||
if t.Value == 0 {
|
if t.Value == 0 {
|
||||||
return defaultValue
|
return defaultValue
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ func (t *TypePreferIP) Set(value string) error {
|
|||||||
switch value {
|
switch value {
|
||||||
case TypePreferIPPreferIPv4, TypePreferIPPreferIPv6,
|
case TypePreferIPPreferIPv4, TypePreferIPPreferIPv6,
|
||||||
TypePreferOnlyIPv4, TypePreferOnlyIPv6:
|
TypePreferOnlyIPv4, TypePreferOnlyIPv6:
|
||||||
t.Value = value
|
t.Value = value
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ type TypeProxyURL struct {
|
|||||||
func (t *TypeProxyURL) Set(value string) error {
|
func (t *TypeProxyURL) Set(value string) error {
|
||||||
parsedURL, err := url.Parse(value)
|
parsedURL, err := url.Parse(value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Value is not corect URL (%s): %w", value, err)
|
return fmt.Errorf("value is not corect URL (%s): %w", value, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if parsedURL.Host == "" {
|
if parsedURL.Host == "" {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ func (t *TypeStatsdTagFormat) Set(value string) error {
|
|||||||
switch lowercasedValue {
|
switch lowercasedValue {
|
||||||
case TypeStatsdTagFormatDatadog, TypeStatsdTagFormatInfluxdb,
|
case TypeStatsdTagFormatDatadog, TypeStatsdTagFormatInfluxdb,
|
||||||
TypeStatsdTagFormatGraphite:
|
TypeStatsdTagFormatGraphite:
|
||||||
t.Value = lowercasedValue
|
t.Value = lowercasedValue
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -55,15 +55,6 @@ type ProxyOpts struct {
|
|||||||
// This is an optional setting.
|
// This is an optional setting.
|
||||||
Concurrency uint
|
Concurrency uint
|
||||||
|
|
||||||
// DomainFrontingPort is a port we use to connect to a fronting
|
|
||||||
// domain.
|
|
||||||
//
|
|
||||||
// This is required because secret does not specify a port. It
|
|
||||||
// specifies a hostname only.
|
|
||||||
//
|
|
||||||
// This is an optional setting.
|
|
||||||
DomainFrontingPort uint16
|
|
||||||
|
|
||||||
// IdleTimeout is a timeout for relay when we have to break a
|
// IdleTimeout is a timeout for relay when we have to break a
|
||||||
// stream.
|
// stream.
|
||||||
//
|
//
|
||||||
@@ -90,6 +81,15 @@ type ProxyOpts struct {
|
|||||||
// This is an optional setting.
|
// This is an optional setting.
|
||||||
PreferIP string
|
PreferIP string
|
||||||
|
|
||||||
|
// DomainFrontingPort is a port we use to connect to a fronting
|
||||||
|
// domain.
|
||||||
|
//
|
||||||
|
// This is required because secret does not specify a port. It
|
||||||
|
// specifies a hostname only.
|
||||||
|
//
|
||||||
|
// This is an optional setting.
|
||||||
|
DomainFrontingPort uint
|
||||||
|
|
||||||
// UseTestDCs defines if we have to connect to production or to staging
|
// UseTestDCs defines if we have to connect to production or to staging
|
||||||
// DCs of Telegram.
|
// DCs of Telegram.
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user