diff --git a/.golangci.toml b/.golangci.toml index 558b5f2..04dcc43 100644 --- a/.golangci.toml +++ b/.golangci.toml @@ -10,4 +10,4 @@ format = "colored-line-number" [linters] enable-all = true -disable = ["gochecknoglobals", "gas", "gomnd", "goerr113"] +disable = ["gochecknoglobals", "gas", "gomnd", "goerr113", "exhaustivestruct"] diff --git a/Makefile b/Makefile index 8de0d8a..f490128 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ APP_NAME := $(IMAGE_NAME) CC_BINARIES := $(shell bash -c "echo -n $(APP_NAME)-{linux,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}") -GOLANGCI_LINT_VERSION := v1.31.0 +GOLANGCI_LINT_VERSION := v1.37.1 VERSION_GO := $(shell go version) VERSION_DATE := $(shell date -Ru) diff --git a/cli/proxy.go b/cli/proxy.go index b54d09e..038239e 100644 --- a/cli/proxy.go +++ b/cli/proxy.go @@ -19,7 +19,7 @@ import ( "go.uber.org/zap/zapcore" ) -func Proxy() error { // nolint: funlen +func Proxy() error { // nolint: funlen,cyclop ctx := utils.GetSignalContext() atom := zap.NewAtomicLevel() diff --git a/cli/utils.go b/cli/utils.go index f26c1b6..948d875 100644 --- a/cli/utils.go +++ b/cli/utils.go @@ -9,7 +9,7 @@ import ( func Fatal(arg interface{}) { if value, ok := arg.(error); ok { - arg = fmt.Errorf("fatal error: %+v", value) + arg = fmt.Errorf("fatal error: %+v", value) // nolint: errorlint } PrintStderr(arg) @@ -21,7 +21,7 @@ func PrintStderr(args ...interface{}) { } func PrintStdout(args ...interface{}) { - fmt.Println(args...) + fmt.Println(args...) // nolint: forbidigo } func PrintJSONStderr(data interface{}) { diff --git a/config/config.go b/config/config.go index a56c34c..5e97f86 100644 --- a/config/config.go +++ b/config/config.go @@ -160,7 +160,7 @@ type Opt struct { var C = Config{} -func Init(options ...Opt) error { // nolint: gocyclo, funlen +func Init(options ...Opt) error { // nolint: gocyclo, funlen, cyclop for _, opt := range options { switch opt.Option { case OptionTypeDebug: diff --git a/faketls/client_protocol.go b/faketls/client_protocol.go index b95b7d6..8208ac0 100644 --- a/faketls/client_protocol.go +++ b/faketls/client_protocol.go @@ -52,10 +52,10 @@ func (c *ClientProtocol) Handshake(socket conntypes.StreamReadWriteCloser) (conn conn, err := c.ClientProtocol.Handshake(conn) if err != nil { - return nil, err + return nil, err // nolint: wrapcheck } - return conn, err + return conn, err // nolint: wrapcheck } func (c *ClientProtocol) tlsHandshake(conn io.ReadWriter) error { diff --git a/hub/connection.go b/hub/connection.go index 9f1d5e8..e96cae9 100644 --- a/hub/connection.go +++ b/hub/connection.go @@ -30,7 +30,7 @@ type connection struct { channelConnDetach chan conntypes.ConnID } -func (c *connection) run() { +func (c *connection) run() { // nolint: cyclop defer c.Close() ttl := time.NewTimer(connectionTTL) diff --git a/mtproto/protocol.go b/mtproto/protocol.go index c37a847..a880d10 100644 --- a/mtproto/protocol.go +++ b/mtproto/protocol.go @@ -51,7 +51,7 @@ func doRPCNonceRequest(conn conntypes.BasePacketWriter) (*rpc.NonceRequest, erro } if err := conn.Write(rpcNonceReq.Bytes()); err != nil { - return nil, err + return nil, err // nolint: wrapcheck } return rpcNonceReq, nil diff --git a/proxy/direct.go b/proxy/direct.go index f304147..03fd9af 100644 --- a/proxy/direct.go +++ b/proxy/direct.go @@ -15,7 +15,7 @@ const directPipeBufferSize = 1024 func directConnection(request *protocol.TelegramRequest) error { telegramConnRaw, err := obfuscated2.TelegramProtocol(request) if err != nil { - return err + return err // nolint: wrapcheck } telegramConn := telegramConnRaw.(conntypes.StreamReadWriteCloser) diff --git a/stats/stats_statsd.go b/stats/stats_statsd.go index f7106f3..26fce1c 100644 --- a/stats/stats_statsd.go +++ b/stats/stats_statsd.go @@ -168,17 +168,18 @@ func (s *statsStatsd) prepareVals(metric string, tags []*statsStatsdTag) (string func (s *statsStatsd) initGauge(metric, key string, tags []statsd.Tag) { s.seenMutex.RLock() - _, ok := s.seen[key] - s.seenMutex.RUnlock() + if _, ok := s.seen[key]; ok { + s.seenMutex.RUnlock() - if ok { return + } else { // nolint: golint,revive + s.seenMutex.RUnlock() } s.seenMutex.Lock() defer s.seenMutex.Unlock() - if _, ok = s.seen[key]; !ok { + if _, ok := s.seen[key]; !ok { s.seen[key] = struct{}{} s.client.Gauge(metric, 0, tags...) } diff --git a/telegram/api/api.go b/telegram/api/api.go index ab02acb..7cdef71 100644 --- a/telegram/api/api.go +++ b/telegram/api/api.go @@ -40,5 +40,5 @@ func request(url string) (io.ReadCloser, error) { return nil, fmt.Errorf("cannot perform a request: %w", err) } - return resp.Body, err + return resp.Body, err // nolint: wrapcheck } diff --git a/tlstypes/consts.go b/tlstypes/consts.go index c69c0e3..79d5a10 100644 --- a/tlstypes/consts.go +++ b/tlstypes/consts.go @@ -20,9 +20,9 @@ const ( type CipherSuiteType uint8 const ( - CipherSuiteType_TLS_AES_128_GCM_SHA256 CipherSuiteType = iota // nolint: stylecheck,golint - CipherSuiteType_TLS_AES_256_GCM_SHA384 // nolint: stylecheck,golint - CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256 // nolint: stylecheck,golint + CipherSuiteType_TLS_AES_128_GCM_SHA256 CipherSuiteType = iota // nolint: stylecheck,golint,revive + CipherSuiteType_TLS_AES_256_GCM_SHA384 // nolint: stylecheck,golint,revive + CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256 // nolint: stylecheck,golint,revive ) func (c CipherSuiteType) Bytes() []byte { @@ -69,9 +69,9 @@ var ( Version12Bytes = []byte{0x03, 0x03} Version13Bytes = []byte{0x03, 0x04} - CipherSuiteType_TLS_AES_128_GCM_SHA256_Bytes = []byte{0x13, 0x01} // nolint: stylecheck,golint - CipherSuiteType_TLS_AES_256_GCM_SHA384_Bytes = []byte{0x13, 0x02} // nolint: stylecheck,golint - CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256_Bytes = []byte{0x13, 0x03} // nolint: stylecheck,golint + CipherSuiteType_TLS_AES_128_GCM_SHA256_Bytes = []byte{0x13, 0x01} // nolint: stylecheck,golint,revive + CipherSuiteType_TLS_AES_256_GCM_SHA384_Bytes = []byte{0x13, 0x02} // nolint: stylecheck,golint,revive + CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256_Bytes = []byte{0x13, 0x03} // nolint: stylecheck,golint,revive ) type Byter interface { diff --git a/utils/read_full.go b/utils/read_full.go index 912aa19..1a86ab1 100644 --- a/utils/read_full.go +++ b/utils/read_full.go @@ -11,7 +11,7 @@ func ReadFull(src io.Reader) (rv []byte, err error) { for n == len(buf) { n, err = src.Read(buf) if err != nil { - return nil, err + return nil, err // nolint: wrapcheck } rv = append(rv, buf[:n]...) diff --git a/wrappers/packet/mtproto_frame.go b/wrappers/packet/mtproto_frame.go index 119b733..805f361 100644 --- a/wrappers/packet/mtproto_frame.go +++ b/wrappers/packet/mtproto_frame.go @@ -40,7 +40,7 @@ type wrapperMtprotoFrame struct { writeSeqNo int32 } -func (w *wrapperMtprotoFrame) Read() (conntypes.Packet, error) { // nolint: funlen +func (w *wrapperMtprotoFrame) Read() (conntypes.Packet, error) { // nolint: funlen, cyclop buf := &bytes.Buffer{} sum := crc32.NewIEEE() @@ -132,7 +132,7 @@ func (w *wrapperMtprotoFrame) Write(p conntypes.Packet) error { _, err := w.parent.Write(buf.Bytes()) - return err + return err // nolint: wrapcheck } func (w *wrapperMtprotoFrame) Close() error { diff --git a/wrappers/rwc/ping.go b/wrappers/rwc/ping.go index 2b224c2..548bef8 100644 --- a/wrappers/rwc/ping.go +++ b/wrappers/rwc/ping.go @@ -20,7 +20,7 @@ func (w *wrapperPing) Read(p []byte) (int, error) { } } - return n, err + return n, err // nolint: wrapcheck } func (w *wrapperPing) Write(p []byte) (int, error) { @@ -32,7 +32,7 @@ func (w *wrapperPing) Write(p []byte) (int, error) { } } - return n, err + return n, err // nolint: wrapcheck } func (w *wrapperPing) Close() error { diff --git a/wrappers/stream/conn.go b/wrappers/stream/conn.go index 47e1867..d55c55c 100644 --- a/wrappers/stream/conn.go +++ b/wrappers/stream/conn.go @@ -43,7 +43,7 @@ func (w *wrapperConn) Write(p []byte) (int, error) { w.Close() } - return n, err + return n, err // nolint: wrapcheck } func (w *wrapperConn) ReadTimeout(p []byte, timeout time.Duration) (int, error) { @@ -64,7 +64,7 @@ func (w *wrapperConn) Read(p []byte) (int, error) { w.Close() } - return n, err + return n, err // nolint: wrapcheck } func (w *wrapperConn) Close() error { diff --git a/wrappers/stream/faketls.go b/wrappers/stream/faketls.go index c0587c6..17a1fe6 100644 --- a/wrappers/stream/faketls.go +++ b/wrappers/stream/faketls.go @@ -85,7 +85,7 @@ func NewFakeTLS(socket conntypes.StreamReadWriteCloser) conntypes.StreamReadWrit for { rec, err := tlstypes.ReadRecord(faketls.parent) if err != nil { - return nil, err + return nil, err // nolint: wrapcheck } switch rec.Type { diff --git a/wrappers/stream/obfuscated2.go b/wrappers/stream/obfuscated2.go index 11ec2f8..da2199a 100644 --- a/wrappers/stream/obfuscated2.go +++ b/wrappers/stream/obfuscated2.go @@ -31,7 +31,7 @@ func (w *wrapperObfuscated2) ReadTimeout(p []byte, timeout time.Duration) (int, func (w *wrapperObfuscated2) Read(p []byte) (int, error) { n, err := w.parent.Read(p) if err != nil { - return n, err + return n, err // nolint: wrapcheck } w.decryptor.XORKeyStream(p, p[:n]) diff --git a/wrappers/stream/rewind.go b/wrappers/stream/rewind.go index e1a0177..b0e6afb 100644 --- a/wrappers/stream/rewind.go +++ b/wrappers/stream/rewind.go @@ -2,6 +2,7 @@ package stream import ( "bytes" + "errors" "io" "net" "sync" @@ -36,8 +37,8 @@ func (w *wrapperRewind) Read(p []byte) (int, error) { defer w.mutex.Unlock() if w.rewinded { - if n, err := w.buf.Read(p); err != io.EOF { - return n, err + if n, err := w.buf.Read(p); errors.Is(err, io.EOF) { + return n, err // nolint: wrapcheck } } @@ -47,7 +48,7 @@ func (w *wrapperRewind) Read(p []byte) (int, error) { w.buf.Write(p[:n]) } - return n, err + return n, err // nolint: wrapcheck } func (w *wrapperRewind) ReadTimeout(p []byte, timeout time.Duration) (int, error) { @@ -55,8 +56,8 @@ func (w *wrapperRewind) ReadTimeout(p []byte, timeout time.Duration) (int, error defer w.mutex.Unlock() if w.rewinded { - if n, err := w.buf.Read(p); err != io.EOF { - return n, err + if n, err := w.buf.Read(p); errors.Is(err, io.EOF) { + return n, err // nolint: wrapcheck } } @@ -66,7 +67,7 @@ func (w *wrapperRewind) ReadTimeout(p []byte, timeout time.Duration) (int, error w.buf.Write(p[:n]) } - return n, err + return n, err // nolint: wrapcheck } func (w *wrapperRewind) Conn() net.Conn { diff --git a/wrappers/stream/stats_telegram.go b/wrappers/stream/stats_telegram.go index 3c1f39d..9fe6d9e 100644 --- a/wrappers/stream/stats_telegram.go +++ b/wrappers/stream/stats_telegram.go @@ -56,7 +56,7 @@ func (w *wrapperTelegramStats) Close() error { stats.Stats.TelegramDisconnected(w.dc, w.RemoteAddr()) }) - return err + return err // nolint: wrapcheck } func NewTelegramStats(dc conntypes.DC, parent conntypes.StreamReadWriteCloser) conntypes.StreamReadWriteCloser { diff --git a/wrappers/stream/stats_traffic.go b/wrappers/stream/stats_traffic.go index ab77362..cc7d224 100644 --- a/wrappers/stream/stats_traffic.go +++ b/wrappers/stream/stats_traffic.go @@ -17,28 +17,28 @@ func (w *wrapperTrafficStats) Write(p []byte) (int, error) { n, err := w.parent.Write(p) stats.Stats.EgressTraffic(n) - return n, err + return n, err // nolint: wrapcheck } func (w *wrapperTrafficStats) WriteTimeout(p []byte, timeout time.Duration) (int, error) { n, err := w.parent.WriteTimeout(p, timeout) stats.Stats.EgressTraffic(n) - return n, err + return n, err // nolint: wrapcheck } func (w *wrapperTrafficStats) Read(p []byte) (int, error) { n, err := w.parent.Read(p) stats.Stats.IngressTraffic(n) - return n, err + return n, err // nolint: wrapcheck } func (w *wrapperTrafficStats) ReadTimeout(p []byte, timeout time.Duration) (int, error) { n, err := w.parent.ReadTimeout(p, timeout) stats.Stats.IngressTraffic(n) - return n, err + return n, err // nolint: wrapcheck } func (w *wrapperTrafficStats) Conn() net.Conn {