From 02f5c5f832bcb39480416de3ad4d2c3a7725a523 Mon Sep 17 00:00:00 2001 From: mrz1836 Date: Mon, 4 Apr 2022 09:53:57 -0400 Subject: [PATCH] Fixed some issues from removing cache providers --- actions/paymail/paymail_interface_test.go | 228 ++++++++++++++++++++++ config/config.go | 2 +- config/envs/test.json | 2 +- go.mod | 32 ++- go.sum | 5 + 5 files changed, 260 insertions(+), 9 deletions(-) create mode 100644 actions/paymail/paymail_interface_test.go diff --git a/actions/paymail/paymail_interface_test.go b/actions/paymail/paymail_interface_test.go new file mode 100644 index 000000000..c0ca6de83 --- /dev/null +++ b/actions/paymail/paymail_interface_test.go @@ -0,0 +1,228 @@ +package pmail + +import ( + "context" + "encoding/hex" + "encoding/json" + "testing" + + "github.com/BuxOrg/bux" + "github.com/BuxOrg/bux/taskmanager" + "github.com/BuxOrg/bux/tester" + "github.com/BuxOrg/bux/utils" + "github.com/bitcoinschema/go-bitcoin/v2" + "github.com/libsv/go-bk/bec" + "github.com/libsv/go-bk/bip32" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/tonicpow/go-paymail" + "github.com/tonicpow/go-paymail/server" +) + +const ( + alias = "paymail" + domain = "tester.com" + fullPaymail = "paymail@tester.com" +) + +var ( + // testTxHex = "020000000165bb8d2733298b2d3b441a871868d6323c5392facf0d3eced3a6c6a17dc84c10000000006a473044022057b101e9a017cdcc333ef66a4a1e78720ae15adf7d1be9c33abec0fe56bc849d022013daa203095522039fadaba99e567ec3cf8615861d3b7258d5399c9f1f4ace8f412103b9c72aebee5636664b519e5f7264c78614f1e57fa4097ae83a3012a967b1c4b9ffffffff03e0930400000000001976a91413473d21dc9e1fb392f05a028b447b165a052d4d88acf9020000000000001976a91455decebedd9a6c2c2d32cf0ee77e2640c3955d3488ac00000000000000000c006a09446f7457616c6c657400000000" + // testTxID = "1b52eac9d1eb0adf3ce6a56dee1c4768780b8126e288aca65dd1db32f173b853" + testXPub = "xpub661MyMwAqRbcFrBJbKwBGCB7d3fr2SaAuXGM95BA62X41m6eW2ehRQGW4xLi9wkEXUGnQZYxVVj4PxXnyrLk7jdqvBAs1Qq9gf6ykMvjR7J" + testXPubID = "1a0b10d4eda0636aae1709e7e7080485a4d99af3ca2962c6e677cf5b53d8ab8c" +) + +func TestPaymailInterface(t *testing.T) { + t.Parallel() + + t.Run("GetPaymailByAlias", func(t *testing.T) { + ctx, client, deferMe, xPub, paymailModelService, externalXPubKey, external := initPaymailTesting(t) + defer deferMe() + + paymailAddress, err := paymailModelService.GetPaymailByAlias(ctx, alias, domain, nil) + require.NoError(t, err) + assert.IsType(t, paymail.AddressInformation{}, *paymailAddress) + assert.Equal(t, alias, paymailAddress.Alias) + assert.Equal(t, domain, paymailAddress.Domain) + assert.Equal(t, externalXPubKey, paymailAddress.PubKey) + assert.Equal(t, external, paymailAddress.LastAddress) + assert.Equal(t, "Tester", paymailAddress.Name) + + destination := checkCreatedDestination(ctx, t, client, xPub, external, "GetPaymailByAlias") + assert.Equal(t, "GetPaymailByAlias", destination.Metadata[paymailRequestField]) + }) + + t.Run("GetPaymailByAlias with metadata", func(t *testing.T) { + ctx, client, deferMe, xPub, paymailModelService, externalXPubKey, external := initPaymailTesting(t) + defer deferMe() + + metadata := &server.RequestMetadata{ + UserAgent: "test-user-agent", + Note: "test-note", + } + paymailAddress, err := paymailModelService.GetPaymailByAlias(ctx, alias, domain, metadata) + require.NoError(t, err) + assert.IsType(t, paymail.AddressInformation{}, *paymailAddress) + assert.Equal(t, alias, paymailAddress.Alias) + assert.Equal(t, domain, paymailAddress.Domain) + assert.Equal(t, externalXPubKey, paymailAddress.PubKey) + assert.Equal(t, external, paymailAddress.LastAddress) + assert.Equal(t, "Tester", paymailAddress.Name) + + destination := checkCreatedDestination(ctx, t, client, xPub, external, "GetPaymailByAlias") + assert.Equal(t, "GetPaymailByAlias", destination.Metadata[paymailRequestField]) + assert.Equal(t, "test-user-agent", destination.Metadata["user-agent"]) + assert.Equal(t, "test-note", destination.Metadata["note"]) + }) + + t.Run("CreateAddressResolutionResponse", func(t *testing.T) { + ctx, client, deferMe, xPub, paymailModelService, _, external := initPaymailTesting(t) + defer deferMe() + + resolutionInformation, err := paymailModelService.CreateAddressResolutionResponse(ctx, alias, domain, false, nil) + require.NoError(t, err) + assert.IsType(t, paymail.ResolutionPayload{}, *resolutionInformation) + assert.Equal(t, external, resolutionInformation.Address) + + destination := checkCreatedDestination(ctx, t, client, xPub, external, "CreateAddressResolutionResponse") + assert.Equal(t, destination.LockingScript, resolutionInformation.Output) + assert.Equal(t, "CreateAddressResolutionResponse", destination.Metadata[paymailRequestField]) + }) + + t.Run("CreateP2PDestinationResponse", func(t *testing.T) { + ctx, client, deferMe, xPub, paymailModelService, _, external := initPaymailTesting(t) + defer deferMe() + + paymentDestinationInformation, err := paymailModelService.CreateP2PDestinationResponse(ctx, alias, domain, 12000, nil) + require.NoError(t, err) + assert.IsType(t, paymail.PaymentDestinationPayload{}, *paymentDestinationInformation) + + destination := checkCreatedDestination(ctx, t, client, xPub, external, "CreateP2PDestinationResponse") + + assert.Equal(t, 1, len(paymentDestinationInformation.Outputs)) + assert.Equal(t, destination.Address, paymentDestinationInformation.Outputs[0].Address) + assert.Equal(t, uint64(12000), paymentDestinationInformation.Outputs[0].Satoshis) + assert.Equal(t, destination.LockingScript, paymentDestinationInformation.Outputs[0].Script) + assert.Equal(t, destination.Metadata[bux.ReferenceIDField], paymentDestinationInformation.Reference) + }) + + // todo: fix this test! (add missing tests) + /* + t.Run("RecordTransaction", func(t *testing.T) { + ctx, _, _, paymailModelService, _, _ := initPaymailTesting(t) + + p2pTx := &paymail.P2PTransaction{ + Hex: testTxHex, + MetaData: &paymail.P2PMetaData{ + Note: "test note", + PubKey: "some pub key", + Sender: "I am the sender", + Signature: "some signature", + }, + Reference: "myReferenceID", + } + + p2PTransactionResponse, err := paymailModelService.RecordTransaction(ctx, p2pTx, nil) + require.NoError(t, err) + assert.IsType(t, paymail.P2PTransactionResponse{}, *p2PTransactionResponse) + assert.IsType(t, testTxID, p2PTransactionResponse.TxID) + }) + */ +} + +func checkCreatedDestination(ctx context.Context, t *testing.T, client bux.ClientInterface, xPub *bux.Xpub, + external, paymailMetaSignature string) *bux.Destination { + + // check that the destination was created properly + destination, err := client.GetDestinationByAddress(ctx, testXPubID, external) + require.NoError(t, err) + + assert.IsType(t, bux.Destination{}, *destination) + assert.Equal(t, xPub.ID, destination.XpubID) + assert.Equal(t, uint32(0), destination.Chain) + assert.Equal(t, uint32(0), destination.Num) + assert.Equal(t, external, destination.Address) + assert.Equal(t, paymailMetaSignature, destination.Metadata[paymailRequestField]) + assert.Equal(t, utils.ScriptTypePubKeyHash, destination.Type) + + return destination +} + +func initPaymailTesting(t *testing.T) (context.Context, bux.ClientInterface, func(), *bux.Xpub, + *PaymailInterface, string, string) { + ctx, client, deferMe := getPaymailClient(t) + + xPub, err := client.NewXpub(ctx, testXPub) + require.NoError(t, err) + require.NotNil(t, xPub) + assert.IsType(t, bux.Xpub{}, *xPub) + + var hdKey *bip32.ExtendedKey + hdKey, err = utils.ValidateXPub(testXPub) + require.NoError(t, err) + require.NotNil(t, hdKey) + + // derive the first child for the fullPaymail xPub + var paymailKey *bip32.ExtendedKey + paymailKey, err = bitcoin.GetHDKeyChild(hdKey, utils.ChainExternal) + require.NoError(t, err) + require.NotNil(t, paymailKey) + + // derive the second child for the address / pubKey + var externalPaymailKey *bip32.ExtendedKey + externalPaymailKey, err = bitcoin.GetHDKeyChild(paymailKey, 0) + require.NoError(t, err) + + var externalPaymailXPub *bec.PublicKey + externalPaymailXPub, err = externalPaymailKey.ECPubKey() + require.NoError(t, err) + + externalXPubKey := hex.EncodeToString(externalPaymailXPub.SerialiseCompressed()) + + // todo: this needs a function or cleanup? + savePaymailAddress := &bux.PaymailAddress{ + Alias: alias, + Avatar: "img url", + Domain: domain, + ExternalXpubKey: paymailKey.String(), + ID: utils.Hash(fullPaymail), + Model: *bux.NewBaseModel(bux.ModelPaymail, client.DefaultModelOptions()...), + Username: "Tester", + XpubID: xPub.ID, + } + err = savePaymailAddress.Save(ctx) + require.NoError(t, err) + + paymailModelService := new(PaymailInterface) + paymailModelService.client = client + + c := []byte("{\"paymail_server\": {\n \"enabled\": true,\n \"domains\": [\n \"localhost\"\n ],\n \"sender_validation_enabled\": false\n }}") + err = json.Unmarshal(c, &paymailModelService.appConfig) + require.NoError(t, err) + + // expected address, derived from the full xPub + var external string + external, _, err = utils.DeriveAddresses(hdKey, 0) + require.NoError(t, err) + + return ctx, client, deferMe, xPub, paymailModelService, externalXPubKey, external +} + +func getPaymailClient(t *testing.T) (context.Context, bux.ClientInterface, func()) { + ctx := context.Background() + client, err := bux.NewClient(ctx, + bux.WithSQLite(tester.SQLiteTestConfig(true, false)), + bux.WithFreeCache(), + bux.WithTaskQ(taskmanager.DefaultTaskQConfig(tester.RandomTablePrefix()+"_queue"), taskmanager.FactoryMemory), + bux.WithDebugging(), + bux.WithAutoMigrate(append(bux.BaseModels, &bux.PaymailAddress{})...), + ) + require.NoError(t, err) + + // Create a defer function + f := func() { + _ = client.Close(ctx) + } + + return ctx, client, f +} diff --git a/config/config.go b/config/config.go index 87bac4b1d..dae990b30 100644 --- a/config/config.go +++ b/config/config.go @@ -99,7 +99,7 @@ type ( // MonitorOptions is the configuration for blockchain monitoring MonitorOptions struct { Enabled bool `json:"enabled" mapstructure:"enabled"` // true/false - CentrifugeServer string `json:"centrifuge_server" mapstructure:"centrifuge_server"` // how many days in the past should we monitor an address (default: 7) + CentrifugeServer string `json:"centrifuge_server" mapstructure:"centrifuge_server"` // The server url address MonitorDays int `json:"monitor_days" mapstructure:"monitor_days"` // how many days in the past should we monitor an address (default: 7) FalsePositiveRate float64 `json:"false_positive_rate" mapstructure:"false_positive_rate"` // how many false positives do we except (default: 0.01) MaxNumberOfDestinations int `json:"max_number_of_destinations" mapstructure:"max_number_of_destinations"` // how many destinations can the filter hold (default: 100,000) diff --git a/config/envs/test.json b/config/envs/test.json index 205dab8aa..55de3954e 100644 --- a/config/envs/test.json +++ b/config/envs/test.json @@ -12,7 +12,7 @@ "signing_disabled": false }, "cache": { - "engine": "ristretto" + "engine": "freecache" }, "datastore": { "auto_migrate": true, diff --git a/go.mod b/go.mod index ec2636966..44ebef901 100644 --- a/go.mod +++ b/go.mod @@ -2,12 +2,16 @@ module github.com/BuxOrg/bux-server go 1.17 +// replace github.com/BuxOrg/bux => ../bux + require ( github.com/99designs/gqlgen v0.17.2 github.com/BuxOrg/bux v0.2.7 + github.com/bitcoinschema/go-bitcoin/v2 v2.0.0-alpha.3 github.com/go-ozzo/ozzo-validation v3.6.0+incompatible github.com/go-redis/redis/v8 v8.11.5 github.com/julienschmidt/httprouter v1.3.0 + github.com/libsv/go-bk v0.1.6 github.com/mrz1836/go-api-router v0.4.12 github.com/mrz1836/go-logger v0.2.5 github.com/mrz1836/go-sanitize v1.1.5 @@ -16,13 +20,14 @@ require ( github.com/newrelic/go-agent/v3/integrations/nrhttprouter v1.0.1 github.com/spf13/viper v1.11.0 github.com/stretchr/testify v1.7.1 + github.com/tonicpow/go-paymail v0.7.5 github.com/vektah/gqlparser/v2 v2.4.1 ) require ( + github.com/acobaugh/osrelease v0.1.0 // indirect github.com/agnivade/levenshtein v1.1.1 // indirect github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect - github.com/bitcoinschema/go-bitcoin/v2 v2.0.0-alpha.3 // indirect github.com/bitcoinschema/go-bob v0.1.9 // indirect github.com/bitcoinschema/go-map v0.0.14 // indirect github.com/bitcoinsv/bsvd v0.0.0-20190609155523-4c29707f7173 // indirect @@ -31,12 +36,17 @@ require ( github.com/capnm/sysinfo v0.0.0-20130621111458-5909a53897f3 // indirect github.com/centrifugal/centrifuge-go v0.8.2 // indirect github.com/centrifugal/protocol v0.8.4 // indirect + github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/coocood/freecache v1.2.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/dolthub/go-mysql-server v0.11.1-0.20211214000816-612f47e4b4cf // indirect + github.com/dolthub/vitess v0.0.0-20211210194914-4566b1ebcad8 // indirect + github.com/fergusstrange/embedded-postgres v1.15.0 // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/go-kit/kit v0.12.0 // indirect github.com/go-redis/redis_rate/v9 v9.1.2 // indirect github.com/go-resty/resty/v2 v2.7.0 // indirect github.com/go-sql-driver/mysql v1.6.0 // indirect @@ -44,6 +54,7 @@ require ( github.com/gofrs/uuid v4.2.0+incompatible // indirect github.com/gojektech/heimdall/v6 v6.1.0 // indirect github.com/gojektech/valkyrie v0.0.0-20190210220504-8f62c1e7ba45 // indirect + github.com/golang/glog v1.0.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/gomodule/redigo v1.8.8 // indirect @@ -61,15 +72,16 @@ require ( github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect github.com/jackc/pgtype v1.10.0 // indirect github.com/jackc/pgx/v4 v4.15.0 // indirect + github.com/jarcoal/httpmock v1.1.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/klauspost/compress v1.15.1 // indirect github.com/korovkin/limiter v0.0.0-20220321204241-2880bd9cecaf // indirect - github.com/kr/text v0.2.0 // indirect + github.com/lestrrat-go/strftime v1.0.5 // indirect + github.com/lib/pq v1.10.5 // indirect github.com/libsv/go-bc v0.1.10 // indirect - github.com/libsv/go-bk v0.1.6 // indirect github.com/libsv/go-bt v1.0.6 // indirect github.com/libsv/go-bt/v2 v2.1.0-beta.2.0.20211221142324-0d686850c5e0 // indirect github.com/magiconair/properties v1.8.6 // indirect @@ -77,6 +89,7 @@ require ( github.com/matryer/respond v1.0.1 // indirect github.com/mattn/go-sqlite3 v1.14.12 // indirect github.com/miekg/dns v1.1.48 // indirect + github.com/mitchellh/hashstructure v1.1.0 // indirect github.com/mitchellh/mapstructure v1.4.3 // indirect github.com/mrz1836/go-cache v0.6.5 // indirect github.com/mrz1836/go-mattercloud v0.5.3 // indirect @@ -84,26 +97,30 @@ require ( github.com/mrz1836/go-parameters v0.2.8 // indirect github.com/mrz1836/go-whatsonchain v0.10.4 // indirect github.com/newrelic/go-agent/v3/integrations/nrmongo v1.0.2 // indirect - github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect + github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pelletier/go-toml v1.9.4 // indirect github.com/pelletier/go-toml/v2 v2.0.0-beta.8 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rafaeljusto/redigomock v2.4.0+incompatible // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/segmentio/asm v1.1.4 // indirect github.com/segmentio/encoding v0.3.4 // indirect + github.com/shopspring/decimal v1.3.1 // indirect + github.com/sirupsen/logrus v1.8.1 // indirect github.com/spf13/afero v1.8.2 // indirect github.com/spf13/cast v1.4.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/src-d/go-oniguruma v1.1.0 // indirect github.com/stretchr/objx v0.3.0 // indirect github.com/subosito/gotenv v1.2.0 // indirect github.com/tidwall/gjson v1.14.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect github.com/tonicpow/go-minercraft v0.7.1 // indirect - github.com/tonicpow/go-paymail v0.7.5 // indirect - github.com/tryvium-travels/memongo v0.4.0 // indirect + github.com/tryvium-travels/memongo v0.5.0 // indirect github.com/tylertreat/BoomFilters v0.0.0-20210315201527-1a82519a3e43 // indirect github.com/ugorji/go/codec v1.2.7 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect @@ -113,6 +130,7 @@ require ( github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.1 // indirect github.com/xdg-go/stringprep v1.0.3 // indirect + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect go.mongodb.org/mongo-driver v1.9.0 // indirect golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect @@ -126,8 +144,8 @@ require ( google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4 // indirect google.golang.org/grpc v1.45.0 // indirect google.golang.org/protobuf v1.28.0 // indirect - gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect gopkg.in/ini.v1 v1.66.4 // indirect + gopkg.in/src-d/go-errors.v1 v1.0.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect gorm.io/driver/mysql v1.3.3 // indirect diff --git a/go.sum b/go.sum index 2f6688b7f..d582233eb 100644 --- a/go.sum +++ b/go.sum @@ -67,9 +67,11 @@ github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXY github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= 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/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/acobaugh/osrelease v0.0.0-20181218015638-a93a0a55a249/go.mod h1:iU1PxQMQwoHZZWmMKrMkrNlY+3+p9vxIjpZOVyxWa0g= github.com/acobaugh/osrelease v0.1.0 h1:Yb59HQDGGNhCj4suHaFQQfBps5wyoKLSSX/J/+UifRE= @@ -593,6 +595,7 @@ github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8= github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is= github.com/lestrrat-go/strftime v1.0.4/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g= github.com/lestrrat-go/strftime v1.0.5 h1:A7H3tT8DhTz8u65w+JRpiBxM4dINQhUXAZnhBa2xeOE= @@ -835,6 +838,7 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanity-io/litter v1.2.0 h1:DGJO0bxH/+C2EukzOSBmAlxmkhVMGqzvcx/rvySYw9M= github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= @@ -867,6 +871,7 @@ github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9 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/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo=