From 3996b9a6b8737174666144cfd278a7a6926a503f Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 10 Aug 2020 13:21:30 +0300 Subject: [PATCH 1/8] Remove pools from faketls --- faketls/client_protocol.go | 5 ++--- faketls/cloak.go | 5 +---- faketls/pools.go | 39 -------------------------------------- 3 files changed, 3 insertions(+), 46 deletions(-) delete mode 100644 faketls/pools.go diff --git a/faketls/client_protocol.go b/faketls/client_protocol.go index 135c42256..08e896d78 100644 --- a/faketls/client_protocol.go +++ b/faketls/client_protocol.go @@ -2,6 +2,7 @@ package faketls import ( "bufio" + "bytes" "encoding/binary" "errors" "fmt" @@ -63,9 +64,7 @@ func (c *ClientProtocol) tlsHandshake(conn io.ReadWriter) error { return fmt.Errorf("cannot read initial record: %w", err) } - buf := acquireBytesBuffer() - defer releaseBytesBuffer(buf) - + buf := &bytes.Buffer{} helloRecord.Data.WriteBytes(buf) clientHello, err := tlstypes.ParseClientHello(buf.Bytes()) diff --git a/faketls/cloak.go b/faketls/cloak.go index d9a2cc2ca..1e3a5b00e 100644 --- a/faketls/cloak.go +++ b/faketls/cloak.go @@ -67,8 +67,5 @@ func cloak(one, another io.ReadWriteCloser) { func cloakPipe(one io.Writer, another io.Reader, wg *sync.WaitGroup) { defer wg.Done() - buf := acquireCloakBuffer() - defer releaseCloakBuffer(buf) - - io.CopyBuffer(one, another, *buf) // nolint: errcheck + io.Copy(one, another) // nolint: errcheck } diff --git a/faketls/pools.go b/faketls/pools.go deleted file mode 100644 index ca7b6c4d1..000000000 --- a/faketls/pools.go +++ /dev/null @@ -1,39 +0,0 @@ -package faketls - -import ( - "bytes" - "sync" -) - -const cloakBufferSize = 1024 - -var ( - poolBytesBuffer = sync.Pool{ - New: func() interface{} { - return &bytes.Buffer{} - }, - } - poolCloakBuffer = sync.Pool{ - New: func() interface{} { - rv := make([]byte, cloakBufferSize) - return &rv - }, - } -) - -func acquireBytesBuffer() *bytes.Buffer { - return poolBytesBuffer.Get().(*bytes.Buffer) -} - -func acquireCloakBuffer() *[]byte { - return poolCloakBuffer.Get().(*[]byte) -} - -func releaseBytesBuffer(buf *bytes.Buffer) { - buf.Reset() - poolBytesBuffer.Put(buf) -} - -func releaseCloakBuffer(buf *[]byte) { - poolCloakBuffer.Put(buf) -} From 95b16cd805e96889f281aba2f3d1f530be9b7308 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 10 Aug 2020 13:27:23 +0300 Subject: [PATCH 2/8] Cleanup pools from tlstypes --- tlstypes/handshake.go | 11 +++++------ tlstypes/pools.go | 23 ----------------------- 2 files changed, 5 insertions(+), 29 deletions(-) delete mode 100644 tlstypes/pools.go diff --git a/tlstypes/handshake.go b/tlstypes/handshake.go index f70fc923f..3775b457e 100644 --- a/tlstypes/handshake.go +++ b/tlstypes/handshake.go @@ -1,6 +1,7 @@ package tlstypes import ( + "bytes" "io" "github.com/9seconds/mtg/utils" @@ -15,8 +16,7 @@ type Handshake struct { } func (h *Handshake) WriteBytes(writer io.Writer) { - packetBuf := acquireBytesBuffer() - defer releaseBytesBuffer(packetBuf) + packetBuf := bytes.Buffer{} writer.Write([]byte{byte(h.Type)}) // nolint: errcheck @@ -24,7 +24,7 @@ func (h *Handshake) WriteBytes(writer io.Writer) { packetBuf.Write(h.Random[:]) packetBuf.WriteByte(byte(len(h.SessionID))) packetBuf.Write(h.SessionID) - h.Tail.WriteBytes(packetBuf) + h.Tail.WriteBytes(&packetBuf) sizeUint24 := utils.ToUint24(uint32(packetBuf.Len())) sizeUint24Bytes := sizeUint24[:] @@ -35,10 +35,9 @@ func (h *Handshake) WriteBytes(writer io.Writer) { } func (h *Handshake) Len() int { - buf := acquireBytesBuffer() - defer releaseBytesBuffer(buf) + buf := bytes.Buffer{} - h.WriteBytes(buf) + h.WriteBytes(&buf) return buf.Len() } diff --git a/tlstypes/pools.go b/tlstypes/pools.go deleted file mode 100644 index f51aae72b..000000000 --- a/tlstypes/pools.go +++ /dev/null @@ -1,23 +0,0 @@ -package tlstypes - -import ( - "bytes" - "sync" -) - -var ( - poolBytesBuffer = sync.Pool{ - New: func() interface{} { - return &bytes.Buffer{} - }, - } -) - -func acquireBytesBuffer() *bytes.Buffer { - return poolBytesBuffer.Get().(*bytes.Buffer) -} - -func releaseBytesBuffer(buf *bytes.Buffer) { - buf.Reset() - poolBytesBuffer.Put(buf) -} From 86a8f6927388404f60a3ad2367efbdd619d31c11 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 10 Aug 2020 13:27:32 +0300 Subject: [PATCH 3/8] Cleanup pools from wrappes --- wrappers/packet/mtproto_frame.go | 6 ++--- wrappers/packet/pools.go | 23 ------------------- wrappers/packetack/client_abridged.go | 4 +--- .../packetack/client_intermediate_secure.go | 6 ++--- wrappers/packetack/pools.go | 23 ------------------- wrappers/stream/faketls.go | 6 ++--- wrappers/stream/mtproto_cipher.go | 5 ++-- wrappers/stream/obfuscated2.go | 7 +++--- wrappers/stream/pools.go | 23 ------------------- 9 files changed, 14 insertions(+), 89 deletions(-) delete mode 100644 wrappers/packet/pools.go delete mode 100644 wrappers/packetack/pools.go delete mode 100644 wrappers/stream/pools.go diff --git a/wrappers/packet/mtproto_frame.go b/wrappers/packet/mtproto_frame.go index 6190d39fa..dd51a71da 100644 --- a/wrappers/packet/mtproto_frame.go +++ b/wrappers/packet/mtproto_frame.go @@ -42,8 +42,7 @@ type wrapperMtprotoFrame struct { } func (w *wrapperMtprotoFrame) Read() (conntypes.Packet, error) { // nolint: funlen - buf := acquireMtprotoFrameBytesBuffer() - defer releaseMtprotoFrameBytesBuffer(buf) + buf := &bytes.Buffer{} sum := crc32.NewIEEE() writer := io.MultiWriter(buf, sum) @@ -114,8 +113,7 @@ func (w *wrapperMtprotoFrame) Write(p conntypes.Packet) error { messageLength := 4 + 4 + len(p) + 4 paddingLength := (aes.BlockSize - messageLength%aes.BlockSize) % aes.BlockSize - buf := acquireMtprotoFrameBytesBuffer() - defer releaseMtprotoFrameBytesBuffer(buf) + buf := &bytes.Buffer{} binary.Write(buf, binary.LittleEndian, uint32(messageLength)) // nolint: errcheck binary.Write(buf, binary.LittleEndian, w.writeSeqNo) // nolint: errcheck diff --git a/wrappers/packet/pools.go b/wrappers/packet/pools.go deleted file mode 100644 index c27e30ecd..000000000 --- a/wrappers/packet/pools.go +++ /dev/null @@ -1,23 +0,0 @@ -package packet - -import ( - "bytes" - "sync" -) - -var ( - poolMtprotoFrameBytesBuffer = sync.Pool{ - New: func() interface{} { - return &bytes.Buffer{} - }, - } -) - -func acquireMtprotoFrameBytesBuffer() *bytes.Buffer { - return poolMtprotoFrameBytesBuffer.Get().(*bytes.Buffer) -} - -func releaseMtprotoFrameBytesBuffer(buf *bytes.Buffer) { - buf.Reset() - poolMtprotoFrameBytesBuffer.Put(buf) -} diff --git a/wrappers/packetack/client_abridged.go b/wrappers/packetack/client_abridged.go index 556a4f2a8..1b8aa9aeb 100644 --- a/wrappers/packetack/client_abridged.go +++ b/wrappers/packetack/client_abridged.go @@ -88,9 +88,7 @@ func (w *wrapperClientAbridged) Write(packet conntypes.Packet, acks *conntypes.C return nil case packetLength < clientAbridgedLargePacketLength: length24 := utils.ToUint24(uint32(packetLength)) - - buf := acquireClientBytesBuffer() - defer releaseClientBytesBuffer(buf) + buf := bytes.Buffer{} buf.WriteByte(byte(clientAbridgedSmallPacketLength)) buf.Write(length24[:]) diff --git a/wrappers/packetack/client_intermediate_secure.go b/wrappers/packetack/client_intermediate_secure.go index 9c3c448f0..2af15ab7b 100644 --- a/wrappers/packetack/client_intermediate_secure.go +++ b/wrappers/packetack/client_intermediate_secure.go @@ -1,6 +1,7 @@ package packetack import ( + "bytes" "encoding/binary" "fmt" "math/rand" @@ -34,10 +35,9 @@ func (w *wrapperClientIntermediateSecure) Write(packet conntypes.Packet, acks *c return nil } - buf := acquireClientBytesBuffer() - defer releaseClientBytesBuffer(buf) - + buf := &bytes.Buffer{} paddingLength := rand.Intn(4) + buf.Grow(4 + len(packet) + paddingLength) binary.Write(buf, binary.LittleEndian, uint32(len(packet)+paddingLength)) // nolint: errcheck diff --git a/wrappers/packetack/pools.go b/wrappers/packetack/pools.go deleted file mode 100644 index 30a0d7d39..000000000 --- a/wrappers/packetack/pools.go +++ /dev/null @@ -1,23 +0,0 @@ -package packetack - -import ( - "bytes" - "sync" -) - -var ( - poolClientBytesBuffer = sync.Pool{ - New: func() interface{} { - return &bytes.Buffer{} - }, - } -) - -func acquireClientBytesBuffer() *bytes.Buffer { - return poolClientBytesBuffer.Get().(*bytes.Buffer) -} - -func releaseClientBytesBuffer(buf *bytes.Buffer) { - buf.Reset() - poolClientBytesBuffer.Put(buf) -} diff --git a/wrappers/stream/faketls.go b/wrappers/stream/faketls.go index d074dcbb1..346493517 100644 --- a/wrappers/stream/faketls.go +++ b/wrappers/stream/faketls.go @@ -39,13 +39,11 @@ func (w *wrapperFakeTLS) WriteTimeout(p []byte, timeout time.Duration) (int, err func (w *wrapperFakeTLS) write(p []byte, writeFunc func([]byte) (int, error)) (int, error) { sum := 0 - - buf := acquireBytesBuffer() - defer releaseBytesBuffer(buf) + buf := bytes.Buffer{} for _, v := range tlstypes.MakeRecords(p) { buf.Reset() - v.WriteBytes(buf) + v.WriteBytes(&buf) _, err := writeFunc(buf.Bytes()) if err != nil { diff --git a/wrappers/stream/mtproto_cipher.go b/wrappers/stream/mtproto_cipher.go index fd9916944..5cbf2033a 100644 --- a/wrappers/stream/mtproto_cipher.go +++ b/wrappers/stream/mtproto_cipher.go @@ -1,6 +1,7 @@ package stream import ( + "bytes" "crypto/aes" "crypto/cipher" "crypto/md5" // nolint: gosec @@ -53,8 +54,8 @@ func mtprotoDeriveKeys(purpose mtprotoCipherPurpose, resp *rpc.NonceResponse, client, remote *net.TCPAddr, secret []byte) ([]byte, []byte) { - message := acquireBytesBuffer() - defer releaseBytesBuffer(message) + + message := bytes.Buffer{} message.Write(resp.Nonce) // nolint: gosec message.Write(req.Nonce) // nolint: gosec diff --git a/wrappers/stream/obfuscated2.go b/wrappers/stream/obfuscated2.go index e005c846d..bd9278b36 100644 --- a/wrappers/stream/obfuscated2.go +++ b/wrappers/stream/obfuscated2.go @@ -1,6 +1,7 @@ package stream import ( + "bytes" "crypto/cipher" "fmt" "net" @@ -40,8 +41,7 @@ func (w *wrapperObfuscated2) Read(p []byte) (int, error) { } func (w *wrapperObfuscated2) WriteTimeout(p []byte, timeout time.Duration) (int, error) { - buffer := acquireBytesBuffer() - defer releaseBytesBuffer(buffer) + buffer := bytes.Buffer{} buffer.Write(p) @@ -53,8 +53,7 @@ func (w *wrapperObfuscated2) WriteTimeout(p []byte, timeout time.Duration) (int, } func (w *wrapperObfuscated2) Write(p []byte) (int, error) { - buffer := acquireBytesBuffer() - defer releaseBytesBuffer(buffer) + buffer := bytes.Buffer{} buffer.Write(p) diff --git a/wrappers/stream/pools.go b/wrappers/stream/pools.go deleted file mode 100644 index 3fd990703..000000000 --- a/wrappers/stream/pools.go +++ /dev/null @@ -1,23 +0,0 @@ -package stream - -import ( - "bytes" - "sync" -) - -var ( - poolBytesBuffer = sync.Pool{ - New: func() interface{} { - return &bytes.Buffer{} - }, - } -) - -func acquireBytesBuffer() *bytes.Buffer { - return poolBytesBuffer.Get().(*bytes.Buffer) -} - -func releaseBytesBuffer(buf *bytes.Buffer) { - buf.Reset() - poolBytesBuffer.Put(buf) -} From 8ac786581b1573914b2744bd953728a4ef6a7773 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 10 Aug 2020 13:30:07 +0300 Subject: [PATCH 4/8] Update golangci lint --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fa2855f84..7aa09b6e9 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.24.0 +GOLANGCI_LINT_VERSION := v1.30.0 VERSION_GO := $(shell go version) VERSION_DATE := $(shell date -Ru) From 7a6695f6c4b9026875195f5fc1b8a2e5fe77bb03 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 10 Aug 2020 14:39:50 +0300 Subject: [PATCH 5/8] Update golangci-lint --- .golangci.toml | 2 +- Makefile | 2 +- antireplay/init.go | 3 +- cli/proxy.go | 5 ++- config/config.go | 2 ++ config/global_ips.go | 2 +- conntypes/protocol.go | 2 ++ conntypes/type.go | 4 ++- faketls/client_protocol.go | 5 +-- faketls/cloak.go | 2 ++ hub/connection.go | 4 +-- hub/connection_list.go | 1 + main.go | 3 +- mtproto/protocol.go | 2 +- mtproto/rpc/consts.go | 2 +- mtproto/rpc/handshake_response.go | 8 ++--- mtproto/rpc/nonce_response.go | 12 +++---- ntp/ntp.go | 6 ++-- obfuscated2/client_protocol.go | 1 + obfuscated2/frame.go | 2 +- protocol/request.go | 3 +- proxy/direct.go | 3 +- proxy/middle.go | 10 +++--- proxy/proxy.go | 6 ++-- stats/stats_prometheus.go | 11 ++++--- stats/stats_statsd.go | 9 ++--- telegram/api/api.go | 6 +++- telegram/base.go | 7 ++-- telegram/middle.go | 3 +- tlstypes/consts.go | 16 +++++---- tlstypes/server_hello.go | 7 ++-- utils/stream_cipher.go | 3 +- wrappers/packet/mtproto_frame.go | 5 ++- wrappers/packetack/client_abridged.go | 3 +- wrappers/packetack/client_intermediate.go | 3 +- .../packetack/client_intermediate_secure.go | 5 ++- wrappers/packetack/proxy.go | 3 +- wrappers/stream/blockcipher.go | 3 +- wrappers/stream/conn.go | 8 +++-- wrappers/stream/ctx.go | 8 +++-- wrappers/stream/faketls.go | 6 ++-- wrappers/stream/mtproto_cipher.go | 33 +++++++++---------- wrappers/stream/obfuscated2.go | 3 +- wrappers/stream/rewind.go | 4 +-- wrappers/stream/stats_telegram.go | 3 +- wrappers/stream/stats_traffic.go | 3 +- wrappers/stream/timeout.go | 3 +- 47 files changed, 133 insertions(+), 114 deletions(-) diff --git a/.golangci.toml b/.golangci.toml index 23d00957a..558b5f243 100644 --- a/.golangci.toml +++ b/.golangci.toml @@ -10,4 +10,4 @@ format = "colored-line-number" [linters] enable-all = true -disable = ["gochecknoglobals", "gomnd"] +disable = ["gochecknoglobals", "gas", "gomnd", "goerr113"] diff --git a/Makefile b/Makefile index 7aa09b6e9..c7bf8c7c8 100644 --- a/Makefile +++ b/Makefile @@ -71,4 +71,4 @@ prepare: install-lint .PHONY: install-lint install-lint: @curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \ - | $(MOD_OFF) bash -s -- -b $(GOPATH)/bin $(GOLANGCI_LINT_VERSION) + | $(MOD_OFF) bash -s -- -b . $(GOLANGCI_LINT_VERSION) diff --git a/antireplay/init.go b/antireplay/init.go index 3fa30f892..4ad995011 100644 --- a/antireplay/init.go +++ b/antireplay/init.go @@ -3,9 +3,8 @@ package antireplay import ( "sync" - "github.com/VictoriaMetrics/fastcache" - "github.com/9seconds/mtg/config" + "github.com/VictoriaMetrics/fastcache" ) type CacheInterface interface { diff --git a/cli/proxy.go b/cli/proxy.go index a42a78032..b54d09e65 100644 --- a/cli/proxy.go +++ b/cli/proxy.go @@ -5,9 +5,6 @@ import ( "os" "time" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" - "github.com/9seconds/mtg/antireplay" "github.com/9seconds/mtg/config" "github.com/9seconds/mtg/faketls" @@ -18,6 +15,8 @@ import ( "github.com/9seconds/mtg/stats" "github.com/9seconds/mtg/telegram" "github.com/9seconds/mtg/utils" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" ) func Proxy() error { // nolint: funlen diff --git a/config/config.go b/config/config.go index 68fc71739..a56c34cf1 100644 --- a/config/config.go +++ b/config/config.go @@ -22,6 +22,8 @@ func (s SecretMode) String() string { return "simple" case SecretModeSecured: return "secured" + case SecretModeTLS: + return "tls" } return "tls" diff --git a/config/global_ips.go b/config/global_ips.go index e27b969fc..0dd78da8b 100644 --- a/config/global_ips.go +++ b/config/global_ips.go @@ -60,7 +60,7 @@ func fetchIP(ctx context.Context, network string) (net.IP, error) { return nil, fmt.Errorf("cannot perform a request: %w", err) } - defer resp.Body.Close() // nolint: errcheck + defer resp.Body.Close() respDataBytes, err := ioutil.ReadAll(resp.Body) if err != nil { diff --git a/conntypes/protocol.go b/conntypes/protocol.go index 15a1c694b..b89ac6537 100644 --- a/conntypes/protocol.go +++ b/conntypes/protocol.go @@ -8,6 +8,8 @@ func (c ConnectionProtocol) String() string { return "any" case ConnectionProtocolIPv4: return "ipv4" + case ConnectionProtocolIPv6: + return "ipv6" } return "ipv6" diff --git a/conntypes/type.go b/conntypes/type.go index 11634f251..c41d42fbf 100644 --- a/conntypes/type.go +++ b/conntypes/type.go @@ -21,7 +21,9 @@ func (t ConnectionType) Tag() []byte { return ConnectionTagAbridged case ConnectionTypeIntermediate: return ConnectionTagIntermediate - default: + case ConnectionTypeSecure, ConnectionTypeUnknown: return ConnectionTagSecure } + + return ConnectionTagSecure } diff --git a/faketls/client_protocol.go b/faketls/client_protocol.go index 08e896d78..b95b7d6f3 100644 --- a/faketls/client_protocol.go +++ b/faketls/client_protocol.go @@ -49,8 +49,8 @@ func (c *ClientProtocol) Handshake(socket conntypes.StreamReadWriteCloser) (conn } conn := stream.NewFakeTLS(socket) - conn, err := c.ClientProtocol.Handshake(conn) + conn, err := c.ClientProtocol.Handshake(conn) if err != nil { return nil, err } @@ -89,6 +89,7 @@ func (c *ClientProtocol) tlsHandshake(conn io.ReadWriter) error { if antireplay.Cache.HasTLS(clientHello.Random[:]) { stats.Stats.ReplayDetected() + return errors.New("replay attack is detected") } @@ -107,8 +108,8 @@ func (c *ClientProtocol) cloakHost(clientConn io.ReadWriteCloser) { stats.Stats.CloakedRequest() addr := net.JoinHostPort(config.C.CloakHost, strconv.Itoa(config.C.CloakPort)) - hostConn, err := net.Dial("tcp", addr) + hostConn, err := net.Dial("tcp", addr) if err != nil { return } diff --git a/faketls/cloak.go b/faketls/cloak.go index 1e3a5b00e..b134de882 100644 --- a/faketls/cloak.go +++ b/faketls/cloak.go @@ -53,9 +53,11 @@ func cloak(one, another io.ReadWriteCloser) { return case <-lastActivityTimer.C: cancel() + return case <-maxTimer.C: cancel() + return } } diff --git a/hub/connection.go b/hub/connection.go index 8769514e1..9f1d5e87d 100644 --- a/hub/connection.go +++ b/hub/connection.go @@ -6,12 +6,11 @@ import ( "sync" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/mtproto" "github.com/9seconds/mtg/mtproto/rpc" "github.com/9seconds/mtg/protocol" + "go.uber.org/zap" ) const connectionTTL = time.Hour @@ -90,6 +89,7 @@ func (c *connection) readLoop() { response, err := rpc.ParseProxyResponse(packet) if err != nil { c.logger.Debugw("Failed response", "error", err) + continue } diff --git a/hub/connection_list.go b/hub/connection_list.go index 7b5f2a806..d1d6a6172 100644 --- a/hub/connection_list.go +++ b/hub/connection_list.go @@ -25,6 +25,7 @@ func (c *connectionList) get(conn *ProxyConn) (*connection, error) { if err = newConn.Attach(conn); err != nil { newConn.Close() + return nil, fmt.Errorf("cannot attach to the newly created connection: %w", err) } diff --git a/main.go b/main.go index 3e87f14bb..b16f04007 100644 --- a/main.go +++ b/main.go @@ -7,11 +7,10 @@ import ( "strings" "time" - kingpin "gopkg.in/alecthomas/kingpin.v2" - "github.com/9seconds/mtg/cli" "github.com/9seconds/mtg/config" "github.com/9seconds/mtg/utils" + kingpin "gopkg.in/alecthomas/kingpin.v2" ) var version = "dev" // has to be set by ldflags diff --git a/mtproto/protocol.go b/mtproto/protocol.go index b7dae2e91..c37a84738 100644 --- a/mtproto/protocol.go +++ b/mtproto/protocol.go @@ -19,8 +19,8 @@ func TelegramProtocol(req *protocol.TelegramRequest) (conntypes.PacketReadWriteC } rpcNonceConn := packet.NewMtprotoFrame(conn, rpc.SeqNoNonce) - rpcNonceReq, err := doRPCNonceRequest(rpcNonceConn) + rpcNonceReq, err := doRPCNonceRequest(rpcNonceConn) if err != nil { return nil, fmt.Errorf("cannot do nonce request: %w", err) } diff --git a/mtproto/rpc/consts.go b/mtproto/rpc/consts.go index 59512a368..9cb7ed4ce 100644 --- a/mtproto/rpc/consts.go +++ b/mtproto/rpc/consts.go @@ -7,7 +7,7 @@ const ( SeqNoHandshake = -1 ) -// Different constants for RPC protocol +// Different constants for RPC protocol. var ( TagCloseExt = []byte{0xa2, 0x34, 0xb6, 0x5e} TagProxyAns = []byte{0x0d, 0xda, 0x03, 0x44} diff --git a/mtproto/rpc/handshake_response.go b/mtproto/rpc/handshake_response.go index 1f1d50981..dc25109e2 100644 --- a/mtproto/rpc/handshake_response.go +++ b/mtproto/rpc/handshake_response.go @@ -17,10 +17,10 @@ type HandshakeResponse struct { func (r *HandshakeResponse) Bytes() []byte { buf := &bytes.Buffer{} - buf.Write(r.Type) // nolint: gosec - buf.Write(r.Flags) // nolint: gosec - buf.Write(r.SenderPID) // nolint: gosec - buf.Write(r.PeerPID) // nolint: gosec + buf.Write(r.Type) + buf.Write(r.Flags) + buf.Write(r.SenderPID) + buf.Write(r.PeerPID) return buf.Bytes() } diff --git a/mtproto/rpc/nonce_response.go b/mtproto/rpc/nonce_response.go index b214eb54e..a6d831e27 100644 --- a/mtproto/rpc/nonce_response.go +++ b/mtproto/rpc/nonce_response.go @@ -15,13 +15,13 @@ type NonceResponse struct { // Bytes returns serialized form of the nonce response. func (r *NonceResponse) Bytes() []byte { - buf := &bytes.Buffer{} + buf := bytes.Buffer{} - buf.Write(r.Type) // nolint: gosec - buf.Write(r.KeySelector) // nolint: gosec - buf.Write(r.Crypto) // nolint: gosec - buf.Write(r.CryptoTS) // nolint: gosec - buf.Write(r.Nonce) // nolint: gosec + buf.Write(r.Type) + buf.Write(r.KeySelector) + buf.Write(r.Crypto) + buf.Write(r.CryptoTS) + buf.Write(r.Nonce) return buf.Bytes() } diff --git a/ntp/ntp.go b/ntp/ntp.go index d50e6a705..97d5d63f4 100644 --- a/ntp/ntp.go +++ b/ntp/ntp.go @@ -5,17 +5,16 @@ import ( "math/rand" "time" + "github.com/9seconds/mtg/config" "github.com/beevik/ntp" "go.uber.org/zap" - - "github.com/9seconds/mtg/config" ) const autoUpdatePeriod = time.Minute // Fetch fetches the data on time drift. func Fetch() (time.Duration, error) { - url := config.C.NTPServers[rand.Intn(len(config.C.NTPServers))] + url := config.C.NTPServers[rand.Intn(len(config.C.NTPServers))] // nolint: gosec resp, err := ntp.Query(url) if err != nil { @@ -40,6 +39,7 @@ func AutoUpdate() { diff, err := Fetch() if err != nil { logger.Debugw("Cannot fetch time from NTP", "error", err) + continue } diff --git a/obfuscated2/client_protocol.go b/obfuscated2/client_protocol.go index d85387c80..955ae9e55 100644 --- a/obfuscated2/client_protocol.go +++ b/obfuscated2/client_protocol.go @@ -84,6 +84,7 @@ func (c *ClientProtocol) Handshake(socket conntypes.StreamReadWriteCloser) (conn replayKey := decryptedFrame.Unique() if antireplay.Cache.HasObfuscated2(replayKey) { stats.Stats.ReplayDetected() + return nil, errors.New("replay attack is detected") } diff --git a/obfuscated2/frame.go b/obfuscated2/frame.go index 6df81c899..e05cbd053 100644 --- a/obfuscated2/frame.go +++ b/obfuscated2/frame.go @@ -15,7 +15,7 @@ const ( frameLen = 64 ) -// [frameOffsetFirst:frameOffsetKey:frameOffsetIV:frameOffsetMagic:frameOffsetDC:frameOffsetEnd] +// [frameOffsetFirst:frameOffsetKey:frameOffsetIV:frameOffsetMagic:frameOffsetDC:frameOffsetEnd]. type Frame struct { data [frameLen]byte } diff --git a/protocol/request.go b/protocol/request.go index 00a33f8a1..5f5d98dd2 100644 --- a/protocol/request.go +++ b/protocol/request.go @@ -3,9 +3,8 @@ package protocol import ( "context" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" + "go.uber.org/zap" ) type TelegramRequest struct { diff --git a/proxy/direct.go b/proxy/direct.go index 2d13a13be..f304147b4 100644 --- a/proxy/direct.go +++ b/proxy/direct.go @@ -4,11 +4,10 @@ import ( "io" "sync" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/obfuscated2" "github.com/9seconds/mtg/protocol" + "go.uber.org/zap" ) const directPipeBufferSize = 1024 diff --git a/proxy/middle.go b/proxy/middle.go index c0995dc3c..7f569919c 100644 --- a/proxy/middle.go +++ b/proxy/middle.go @@ -3,17 +3,17 @@ package proxy import ( "sync" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/protocol" "github.com/9seconds/mtg/wrappers/packetack" + "go.uber.org/zap" ) func middleConnection(request *protocol.TelegramRequest) { telegramConn, err := packetack.NewProxy(request) if err != nil { request.Logger.Debugw("Cannot dial to Telegram", "error", err) + return } defer telegramConn.Close() @@ -27,7 +27,7 @@ func middleConnection(request *protocol.TelegramRequest) { clientConn = packetack.NewClientIntermediate(request.ClientConn) case conntypes.ConnectionTypeSecure: clientConn = packetack.NewClientIntermediateSecure(request.ClientConn) - default: + case conntypes.ConnectionTypeUnknown: panic("unknown connection type") } @@ -53,15 +53,17 @@ func middlePipe(dst conntypes.PacketAckWriteCloser, for { acks := conntypes.ConnectionAcks{} - packet, err := src.Read(&acks) + packet, err := src.Read(&acks) if err != nil { logger.Debugw("Cannot read packet", "error", err) + return } if err = dst.Write(packet, &acks); err != nil { logger.Debugw("Cannot send packet", "error", err) + return } } diff --git a/proxy/proxy.go b/proxy/proxy.go index 7bc462d12..7be2a197f 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -4,14 +4,13 @@ import ( "context" "net" - "go.uber.org/zap" - "github.com/9seconds/mtg/config" "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/protocol" "github.com/9seconds/mtg/stats" "github.com/9seconds/mtg/utils" "github.com/9seconds/mtg/wrappers/stream" + "go.uber.org/zap" ) type Proxy struct { @@ -53,6 +52,7 @@ func (p *Proxy) accept(conn net.Conn) { if err := utils.InitTCP(conn, config.C.ClientReadBuffer(), config.C.ClientWriteBuffer()); err != nil { logger.Errorw("Cannot initialize client TCP connection", "error", err) + return } @@ -66,8 +66,8 @@ func (p *Proxy) accept(conn net.Conn) { defer clientConn.Close() clientProtocol := p.ClientProtocolMaker() - clientConn, err := clientProtocol.Handshake(clientConn) + clientConn, err := clientProtocol.Handshake(clientConn) if err != nil { stats.Stats.AuthenticationFailed() logger.Warnw("Cannot perform client handshake", "error", err) diff --git a/stats/stats_prometheus.go b/stats/stats_prometheus.go index 7bddbb0cb..687c63518 100644 --- a/stats/stats_prometheus.go +++ b/stats/stats_prometheus.go @@ -5,11 +5,10 @@ import ( "net/http" "strconv" - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promhttp" - "github.com/9seconds/mtg/config" "github.com/9seconds/mtg/conntypes" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promhttp" ) type statsPrometheus struct { @@ -51,10 +50,14 @@ func (s *statsPrometheus) changeConnections(connectionType conntypes.ConnectionT labels[0] = "abridged" case conntypes.ConnectionTypeSecure: labels[0] = "secured" + case conntypes.ConnectionTypeIntermediate: + labels[0] = "intermediate" + case conntypes.ConnectionTypeUnknown: + panic("unknown connection type") } if addr.IP.To4() == nil { - labels[1] = "ipv6" // nolint: goconst + labels[1] = "ipv6" } s.connections.WithLabelValues(labels[:]...).Add(increment) diff --git a/stats/stats_statsd.go b/stats/stats_statsd.go index 4c89344dc..f7106f36f 100644 --- a/stats/stats_statsd.go +++ b/stats/stats_statsd.go @@ -8,11 +8,10 @@ import ( "sync" "time" - statsd "github.com/smira/go-statsd" - "go.uber.org/zap" - "github.com/9seconds/mtg/config" "github.com/9seconds/mtg/conntypes" + statsd "github.com/smira/go-statsd" + "go.uber.org/zap" ) var ( @@ -91,8 +90,10 @@ func (s *statsStatsd) changeConnections(connectionType conntypes.ConnectionType, tags = append(tags, tagConnectionTypeAbridged) case conntypes.ConnectionTypeIntermediate: tags = append(tags, tagConnectionTypeIntermediate) - default: + case conntypes.ConnectionTypeSecure: tags = append(tags, tagConnectionTypeSecured) + case conntypes.ConnectionTypeUnknown: + panic("Unknown connection type") } if addr.IP.To4() == nil { diff --git a/telegram/api/api.go b/telegram/api/api.go index de989db0c..ab02acbb8 100644 --- a/telegram/api/api.go +++ b/telegram/api/api.go @@ -1,6 +1,7 @@ package api import ( + "context" "fmt" "io" "io/ioutil" @@ -18,7 +19,10 @@ var httpClient = http.Client{ } func request(url string) (io.ReadCloser, error) { - req, err := http.NewRequest("GET", url, nil) + ctx, cancel := context.WithTimeout(context.Background(), apiHTTPTimeout) + defer cancel() + + req, err := http.NewRequestWithContext(ctx, "GET", url, nil) if err != nil { panic(err) } diff --git a/telegram/base.go b/telegram/base.go index d45498370..4a6c383a4 100644 --- a/telegram/base.go +++ b/telegram/base.go @@ -5,12 +5,11 @@ import ( "math/rand" "net" - "go.uber.org/zap" - "github.com/9seconds/mtg/config" "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/utils" "github.com/9seconds/mtg/wrappers/stream" + "go.uber.org/zap" ) type baseTelegram struct { @@ -34,11 +33,13 @@ func (b *baseTelegram) dial(dc conntypes.DC, conn, err := b.dialer.Dial("tcp", addr) if err != nil { b.logger.Infow("Cannot dial to Telegram", "address", addr, "error", err) + continue } if err := utils.InitTCP(conn, config.C.ProxyReadBuffer(), config.C.ProxyWriteBuffer()); err != nil { b.logger.Infow("Cannot initialize TCP socket", "address", addr, "error", err) + continue } @@ -83,7 +84,7 @@ func (b *baseTelegram) chooseAddress(addresses map[conntypes.DC][]string, case len(addrs) == 1: return addrs[0] case len(addrs) > 1: - return addrs[rand.Intn(len(addrs))] + return addrs[rand.Intn(len(addrs))] // nolint: gosec } return "" diff --git a/telegram/middle.go b/telegram/middle.go index d0917a90b..3683f4dbe 100644 --- a/telegram/middle.go +++ b/telegram/middle.go @@ -5,10 +5,9 @@ import ( "sync" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/telegram/api" + "go.uber.org/zap" ) const middleTelegramBackgroundUpdateEvery = time.Hour diff --git a/tlstypes/consts.go b/tlstypes/consts.go index 6e4156a28..c69c0e3f3 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 + CipherSuiteType_TLS_AES_256_GCM_SHA384 // nolint: stylecheck,golint + CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256 // nolint: stylecheck,golint ) func (c CipherSuiteType) Bytes() []byte { @@ -31,6 +31,8 @@ func (c CipherSuiteType) Bytes() []byte { return CipherSuiteType_TLS_AES_128_GCM_SHA256_Bytes case CipherSuiteType_TLS_AES_256_GCM_SHA384: return CipherSuiteType_TLS_AES_256_GCM_SHA384_Bytes + case CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256: + return CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256_Bytes } return CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256_Bytes @@ -46,6 +48,8 @@ func (v Version) Bytes() []byte { return Version12Bytes case Version11: return Version11Bytes + case Version10, VersionUnknown: + return Version10Bytes } return Version10Bytes @@ -65,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 + 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 ) type Byter interface { diff --git a/tlstypes/server_hello.go b/tlstypes/server_hello.go index a92325ca3..efd624cee 100644 --- a/tlstypes/server_hello.go +++ b/tlstypes/server_hello.go @@ -8,9 +8,8 @@ import ( "io" mrand "math/rand" - "golang.org/x/crypto/curve25519" - "github.com/9seconds/mtg/config" + "golang.org/x/crypto/curve25519" ) type ServerHello struct { @@ -37,8 +36,8 @@ func (s ServerHello) WelcomePacket() []byte { } recChangeCipher.WriteBytes(buf) - hostCert := make([]byte, 1024+mrand.Intn(3092)) - rand.Read(hostCert) // nolint: errcheck + hostCert := make([]byte, 1024+mrand.Intn(3092)) // nolint: gosec + rand.Read(hostCert) // nolint: errcheck recData := Record{ Type: RecordTypeApplicationData, diff --git a/utils/stream_cipher.go b/utils/stream_cipher.go index 072d60771..44f0b2746 100644 --- a/utils/stream_cipher.go +++ b/utils/stream_cipher.go @@ -6,6 +6,7 @@ import ( ) func MakeStreamCipher(key, iv []byte) cipher.Stream { - block, _ := aes.NewCipher(key) // nolint: gosec + block, _ := aes.NewCipher(key) + return cipher.NewCTR(block, iv) } diff --git a/wrappers/packet/mtproto_frame.go b/wrappers/packet/mtproto_frame.go index dd51a71da..119b733b0 100644 --- a/wrappers/packet/mtproto_frame.go +++ b/wrappers/packet/mtproto_frame.go @@ -10,9 +10,8 @@ import ( "io/ioutil" "net" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" + "go.uber.org/zap" ) const ( @@ -85,7 +84,7 @@ func (w *wrapperMtprotoFrame) Read() (conntypes.Packet, error) { // nolint: funl return nil, fmt.Errorf("unexpected sequence number %d (wait for %d)", seqNo, w.readSeqNo) } - data, _ := ioutil.ReadAll(buf) // nolint: gosec + data, _ := ioutil.ReadAll(buf) buf.Reset() // write to buf, not to writer. This is because we are going to fetch // crc32 checksum. diff --git a/wrappers/packetack/client_abridged.go b/wrappers/packetack/client_abridged.go index 1b8aa9aeb..2952de0f1 100644 --- a/wrappers/packetack/client_abridged.go +++ b/wrappers/packetack/client_abridged.go @@ -6,10 +6,9 @@ import ( "io" "net" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/utils" + "go.uber.org/zap" ) const ( diff --git a/wrappers/packetack/client_intermediate.go b/wrappers/packetack/client_intermediate.go index 71ca5f5b3..ac60fb4e4 100644 --- a/wrappers/packetack/client_intermediate.go +++ b/wrappers/packetack/client_intermediate.go @@ -7,9 +7,8 @@ import ( "io" "net" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" + "go.uber.org/zap" ) const clientIntermediateQuickAckLength = 0x80000000 diff --git a/wrappers/packetack/client_intermediate_secure.go b/wrappers/packetack/client_intermediate_secure.go index 2af15ab7b..1151a3782 100644 --- a/wrappers/packetack/client_intermediate_secure.go +++ b/wrappers/packetack/client_intermediate_secure.go @@ -6,9 +6,8 @@ import ( "fmt" "math/rand" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" + "go.uber.org/zap" ) type wrapperClientIntermediateSecure struct { @@ -36,7 +35,7 @@ func (w *wrapperClientIntermediateSecure) Write(packet conntypes.Packet, acks *c } buf := &bytes.Buffer{} - paddingLength := rand.Intn(4) + paddingLength := rand.Intn(4) // nolint: gosec buf.Grow(4 + len(packet) + paddingLength) diff --git a/wrappers/packetack/proxy.go b/wrappers/packetack/proxy.go index bd98edfaa..facbaa4f6 100644 --- a/wrappers/packetack/proxy.go +++ b/wrappers/packetack/proxy.go @@ -64,6 +64,7 @@ func (w *wrapperProxy) Read(acks *conntypes.ConnectionAcks) (conntypes.Packet, e func (w *wrapperProxy) Close() error { w.proxy.Close() + return nil } @@ -77,7 +78,7 @@ func NewProxy(request *protocol.TelegramRequest) (conntypes.PacketAckReadWriteCl flags |= rpc.ProxyRequestFlagsIntermediate case conntypes.ConnectionTypeSecure: flags |= rpc.ProxyRequestFlagsIntermediate | rpc.ProxyRequestFlagsPad - default: + case conntypes.ConnectionTypeUnknown: panic("unknown connection type") } diff --git a/wrappers/stream/blockcipher.go b/wrappers/stream/blockcipher.go index 3fc7a4016..6503e4f62 100644 --- a/wrappers/stream/blockcipher.go +++ b/wrappers/stream/blockcipher.go @@ -7,10 +7,9 @@ import ( "net" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/utils" + "go.uber.org/zap" ) type wrapperBlockCipher struct { diff --git a/wrappers/stream/conn.go b/wrappers/stream/conn.go index 572483917..47e186733 100644 --- a/wrappers/stream/conn.go +++ b/wrappers/stream/conn.go @@ -5,10 +5,9 @@ import ( "net" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/config" "github.com/9seconds/mtg/conntypes" + "go.uber.org/zap" ) type connPurpose uint8 @@ -29,6 +28,7 @@ type wrapperConn struct { func (w *wrapperConn) WriteTimeout(p []byte, timeout time.Duration) (int, error) { if err := w.parent.SetWriteDeadline(time.Now().Add(timeout)); err != nil { w.Close() + return 0, fmt.Errorf("cannot set write deadline to the socket: %w", err) } @@ -40,7 +40,7 @@ func (w *wrapperConn) Write(p []byte) (int, error) { w.logger.Debugw("write to stream", "bytes", n, "error", err) if err != nil { - w.Close() // nolint: gosec + w.Close() } return n, err @@ -49,6 +49,7 @@ func (w *wrapperConn) Write(p []byte) (int, error) { func (w *wrapperConn) ReadTimeout(p []byte, timeout time.Duration) (int, error) { if err := w.parent.SetReadDeadline(time.Now().Add(timeout)); err != nil { w.Close() + return 0, fmt.Errorf("cannot set read deadline to the socket: %w", err) } @@ -68,6 +69,7 @@ func (w *wrapperConn) Read(p []byte) (int, error) { func (w *wrapperConn) Close() error { w.logger.Debugw("Close connection") + return w.parent.Close() } diff --git a/wrappers/stream/ctx.go b/wrappers/stream/ctx.go index c744062b1..86e735990 100644 --- a/wrappers/stream/ctx.go +++ b/wrappers/stream/ctx.go @@ -6,9 +6,8 @@ import ( "net" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" + "go.uber.org/zap" ) type wrapperCtx struct { @@ -21,6 +20,7 @@ func (w *wrapperCtx) WriteTimeout(p []byte, timeout time.Duration) (int, error) select { case <-w.ctx.Done(): w.Close() + return 0, fmt.Errorf("cannot write because context was closed: %w", w.ctx.Err()) default: return w.parent.WriteTimeout(p, timeout) @@ -31,6 +31,7 @@ func (w *wrapperCtx) Write(p []byte) (int, error) { select { case <-w.ctx.Done(): w.Close() + return 0, fmt.Errorf("cannot write because context was closed: %w", w.ctx.Err()) default: return w.parent.Write(p) @@ -41,6 +42,7 @@ func (w *wrapperCtx) ReadTimeout(p []byte, timeout time.Duration) (int, error) { select { case <-w.ctx.Done(): w.Close() + return 0, fmt.Errorf("cannot write because context was closed: %w", w.ctx.Err()) default: return w.parent.ReadTimeout(p, timeout) @@ -51,6 +53,7 @@ func (w *wrapperCtx) Read(p []byte) (int, error) { select { case <-w.ctx.Done(): w.Close() + return 0, fmt.Errorf("cannot write because context was closed: %w", w.ctx.Err()) default: return w.parent.Read(p) @@ -59,6 +62,7 @@ func (w *wrapperCtx) Read(p []byte) (int, error) { func (w *wrapperCtx) Close() error { w.cancel() + return w.parent.Close() } diff --git a/wrappers/stream/faketls.go b/wrappers/stream/faketls.go index 346493517..c0587c62c 100644 --- a/wrappers/stream/faketls.go +++ b/wrappers/stream/faketls.go @@ -7,10 +7,9 @@ import ( "net" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/tlstypes" + "go.uber.org/zap" ) type wrapperFakeTLS struct { @@ -33,6 +32,7 @@ func (w *wrapperFakeTLS) WriteTimeout(p []byte, timeout time.Duration) (int, err if elapsed > timeout { return w.parent.WriteTimeout(b, timeout-elapsed) } + return 0, errors.New("timeout") }) } @@ -95,6 +95,8 @@ func NewFakeTLS(socket conntypes.StreamReadWriteCloser) conntypes.StreamReadWrit rec.Data.WriteBytes(buf) return buf.Bytes(), nil + case tlstypes.RecordTypeHandshake: + return nil, errors.New("unsupported record type handshake") default: return nil, fmt.Errorf("unsupported record type %v", rec.Type) } diff --git a/wrappers/stream/mtproto_cipher.go b/wrappers/stream/mtproto_cipher.go index 5cbf2033a..5a59f7ca9 100644 --- a/wrappers/stream/mtproto_cipher.go +++ b/wrappers/stream/mtproto_cipher.go @@ -4,8 +4,8 @@ import ( "bytes" "crypto/aes" "crypto/cipher" - "crypto/md5" // nolint: gosec - "crypto/sha1" // nolint: gosec + "crypto/md5" + "crypto/sha1" "encoding/binary" "net" @@ -54,12 +54,11 @@ func mtprotoDeriveKeys(purpose mtprotoCipherPurpose, resp *rpc.NonceResponse, client, remote *net.TCPAddr, secret []byte) ([]byte, []byte) { - message := bytes.Buffer{} - message.Write(resp.Nonce) // nolint: gosec - message.Write(req.Nonce) // nolint: gosec - message.Write(req.CryptoTS) // nolint: gosec + message.Write(resp.Nonce) + message.Write(req.Nonce) + message.Write(req.CryptoTS) clientIPv4 := mtprotoEmptyIP[:] serverIPv4 := mtprotoEmptyIP[:] @@ -69,34 +68,34 @@ func mtprotoDeriveKeys(purpose mtprotoCipherPurpose, serverIPv4 = utils.ReverseBytes(remote.IP.To4()) } - message.Write(serverIPv4) // nolint: gosec + message.Write(serverIPv4) var port [2]byte binary.LittleEndian.PutUint16(port[:], uint16(client.Port)) - message.Write(port[:]) // nolint: gosec + message.Write(port[:]) switch purpose { case mtprotoCipherPurposeClient: - message.WriteString("CLIENT") // nolint: gosec + message.WriteString("CLIENT") case mtprotoCipherPurposeServer: - message.WriteString("SERVER") // nolint: gosec + message.WriteString("SERVER") default: panic("Unexpected cipher purpose") } - message.Write(clientIPv4) // nolint: gosec + message.Write(clientIPv4) binary.LittleEndian.PutUint16(port[:], uint16(remote.Port)) - message.Write(port[:]) // nolint: gosec - message.Write(secret) // nolint: gosec - message.Write(resp.Nonce) // nolint: gosec + message.Write(port[:]) + message.Write(secret) + message.Write(resp.Nonce) if client.IP.To4() == nil { - message.Write(client.IP.To16()) // nolint: gosec - message.Write(remote.IP.To16()) // nolint: gosec + message.Write(client.IP.To16()) + message.Write(remote.IP.To16()) } - message.Write(req.Nonce) // nolint: gosec + message.Write(req.Nonce) data := message.Bytes() md5sum := md5.Sum(data[1:]) // nolint: gas diff --git a/wrappers/stream/obfuscated2.go b/wrappers/stream/obfuscated2.go index bd9278b36..11ec2f8dd 100644 --- a/wrappers/stream/obfuscated2.go +++ b/wrappers/stream/obfuscated2.go @@ -7,9 +7,8 @@ import ( "net" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" + "go.uber.org/zap" ) type wrapperObfuscated2 struct { diff --git a/wrappers/stream/rewind.go b/wrappers/stream/rewind.go index 1170d9dac..e1a0177e1 100644 --- a/wrappers/stream/rewind.go +++ b/wrappers/stream/rewind.go @@ -7,9 +7,8 @@ import ( "sync" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" + "go.uber.org/zap" ) type ReadWriteCloseRewinder interface { @@ -88,6 +87,7 @@ func (w *wrapperRewind) RemoteAddr() *net.TCPAddr { func (w *wrapperRewind) Close() error { w.buf.Reset() + return w.parent.Close() } diff --git a/wrappers/stream/stats_telegram.go b/wrappers/stream/stats_telegram.go index 064790c65..3c1f39dac 100644 --- a/wrappers/stream/stats_telegram.go +++ b/wrappers/stream/stats_telegram.go @@ -5,10 +5,9 @@ import ( "sync" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/stats" + "go.uber.org/zap" ) type wrapperTelegramStats struct { diff --git a/wrappers/stream/stats_traffic.go b/wrappers/stream/stats_traffic.go index 911daa269..ab77362bb 100644 --- a/wrappers/stream/stats_traffic.go +++ b/wrappers/stream/stats_traffic.go @@ -4,10 +4,9 @@ import ( "net" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/stats" + "go.uber.org/zap" ) type wrapperTrafficStats struct { diff --git a/wrappers/stream/timeout.go b/wrappers/stream/timeout.go index 6dee0725a..2447fe271 100644 --- a/wrappers/stream/timeout.go +++ b/wrappers/stream/timeout.go @@ -4,9 +4,8 @@ import ( "net" "time" - "go.uber.org/zap" - "github.com/9seconds/mtg/conntypes" + "go.uber.org/zap" ) const ( From 5fd7062972af0179977bc6371befdeb6c9ae5343 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 10 Aug 2020 14:41:22 +0300 Subject: [PATCH 6/8] Update dependencies --- go.mod | 14 +-- go.sum | 325 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 314 insertions(+), 25 deletions(-) diff --git a/go.mod b/go.mod index 4e33047c6..33751b9a7 100644 --- a/go.mod +++ b/go.mod @@ -6,16 +6,16 @@ require ( github.com/VictoriaMetrics/fastcache v1.5.7 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d github.com/beevik/ntp v0.3.0 - github.com/golang/protobuf v1.3.5 // indirect - github.com/prometheus/client_golang v1.5.1 - github.com/prometheus/procfs v0.0.11 // indirect + github.com/prometheus/client_golang v1.7.1 + github.com/prometheus/common v0.11.1 // indirect github.com/smira/go-statsd v1.3.1 - go.uber.org/zap v1.14.1 - golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59 + go.uber.org/zap v1.15.0 + golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect - golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect - golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775 + golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect + golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9 golang.org/x/tools v0.0.0-20200319210407-521f4a0cd458 // indirect + google.golang.org/protobuf v1.25.0 // indirect gopkg.in/alecthomas/kingpin.v2 v2.2.6 honnef.co/go/tools v0.0.1-2020.1.3 // indirect ) diff --git a/go.sum b/go.sum index 4b4377502..741326813 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,14 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VictoriaMetrics/fastcache v1.5.7 h1:4y6y0G8PRzszQUYIQHHssv/jgPHAb5qQuuDNdCbyAgw= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= @@ -14,6 +21,15 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2c github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/beevik/ntp v0.3.0 h1:xzVrPrE4ziasFXgBVBZJDP0Wg/KpMwk2KHJ4Ba8GrDw= github.com/beevik/ntp v0.3.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= @@ -22,85 +38,251 @@ github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA= -github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.11.1 h1:0ZISXCMRuCZcxF77aT1BXY5m74mX2vrGYl1dSwBI0Jo= +github.com/prometheus/common v0.11.1/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d h1:GoAlyOgbOEIFdaDqxJVlbOQ1DtGmZWs/Qau0hIlk+WQ= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.0.11 h1:DhHlBtkHWPYi8O2y31JkK0TF+DGM+51OopZjH/Ia5qI= -github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smira/go-statsd v1.3.1 h1:JalGiHNdK7GqVAPpg7j0Kwp2jZrz/fCg/B4ZuNuBY2w= github.com/smira/go-statsd v1.3.1/go.mod h1:1srXJ9/pbnN04G8f4F1jUzsGOnwkPKXciyqpewGlkC4= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= @@ -109,22 +291,45 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM= +go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59 h1:3zb4D3T4G8jdExgVU/95+vQXfpEPiMdCaZgmGVxjNHM= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= @@ -134,38 +339,77 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zH golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775 h1:TC0v2RSO1u2kn1ZugjrFXkRZAEaqMN/RW+OTZkBzmLE= -golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9 h1:yi1hN8dcqI9l8klZfy4B8mJvFmmAxJEePIQQFNSd7Cs= +golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200319210407-521f4a0cd458 h1:DgonIcqC7u+gVZX7lpuReBil5B/i8fvW/hAQdhT6/ao= golang.org/x/tools v0.0.0-20200319210407-521f4a0cd458/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= @@ -173,6 +417,37 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -180,7 +455,14 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= @@ -188,7 +470,14 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= From 3acbacbdb3cf8474ae4482e34446db83b2a7f015 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 10 Aug 2020 15:01:38 +0300 Subject: [PATCH 7/8] Install lint in a local directory --- .gitignore | 1 + Makefile | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 50fa452ed..c7aea2a24 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ mtg vendor/ version.go ccbuilds/ +.bin/ diff --git a/Makefile b/Makefile index c7bf8c7c8..231253091 100644 --- a/Makefile +++ b/Makefile @@ -53,7 +53,7 @@ crosscompile-dir: .PHONY: lint lint: vendor - @$(MOD_OFF) golangci-lint run + @$(MOD_OFF) "$(ROOT_DIR)/.bin/golangci-lint" run .PHONY: clean clean: @@ -70,5 +70,6 @@ prepare: install-lint .PHONY: install-lint install-lint: - @curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \ - | $(MOD_OFF) bash -s -- -b . $(GOLANGCI_LINT_VERSION) + @mkdir -p ./bin || true && \ + curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \ + | $(MOD_OFF) bash -s -- -b "$(ROOT_DIR)/.bin" $(GOLANGCI_LINT_VERSION) From 7ef1e99f66ddf166e7991bc677df4789ba8d4d1e Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 10 Aug 2020 15:02:05 +0300 Subject: [PATCH 8/8] Add 1.14 to a travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 38030b4b7..80a522425 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ sudo: false dist: trusty go: + - 1.14.x - 1.13.x - master