From 15e9fe143b70c1017b9a75bcbc46ddad50c4f537 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Tue, 13 Dec 2022 14:46:52 +0000 Subject: [PATCH 01/27] refactored out the http retries that the performance tool does fso that the pods can reuse the same, and made an experimental endpoint to call another endpoint via the service address --- aeadutils.go | 118 +++++++++++++++++++++++++++++- backend.go | 18 +++++ cmd/performance/performance.go | 126 ++------------------------------- path_aead.go | 39 ++++++++++ 4 files changed, 181 insertions(+), 120 deletions(-) diff --git a/aeadutils.go b/aeadutils.go index ac7812e..a1dbd9c 100644 --- a/aeadutils.go +++ b/aeadutils.go @@ -2,18 +2,25 @@ package aeadplugin import ( "bytes" + "crypto/tls" "encoding/json" "fmt" + "io" + "net/http" + "net/url" "strconv" "strings" + "time" + + backoff "github.com/cenkalti/backoff/v4" "github.com/google/tink/go/aead" "github.com/google/tink/go/daead" "github.com/google/tink/go/insecurecleartextkeyset" "github.com/google/tink/go/keyset" "github.com/google/tink/go/tink" - hclog "github.com/hashicorp/go-hclog" + "github.com/hashicorp/go-retryablehttp" ) func CreateInsecureHandleAndAead(rawKeyset string) (*keyset.Handle, tink.AEAD, error) { @@ -444,3 +451,112 @@ func muteKeyMaterial(theKey string) string { } return mutedMaterial } + +func createHttpClient(httpProxy string) *retryablehttp.Client { + var tr *http.Transport + if httpProxy == "" { + tr = &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + } else { + proxyUrl, _ := url.Parse(httpProxy) + tr = &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + Proxy: http.ProxyURL(proxyUrl), + } + } + + httpClient := &http.Client{Transport: tr} + client := retryablehttp.NewClient() + client.HTTPClient = httpClient + client.RetryMax = 10 // max 10 retries + client.RetryWaitMax = 300 * time.Second // max 5 mins between retries + return client +} + +func goDoHttp(inputData map[string]interface{}, url string, bodyMap map[string]interface{}, httpProxy string, token string) error { + + client := createHttpClient(httpProxy) + payloadBytes, err := json.Marshal(inputData) + if err != nil { + fmt.Printf("goDoHttp json.Marshal Error=%v\n", err) + return err + } + inputBody := bytes.NewReader(payloadBytes) + + req, err := retryablehttp.NewRequest(http.MethodPost, url, inputBody) + + if err != nil { + fmt.Printf("goDoHttp http.NewRequest Error=%v\n", err) + return err + } + req.Header.Set("X-Vault-Token", token) + req.Header.Set("Content-Type", "application/json") + + resp, err := client.Do(req) + if err != nil { + fmt.Printf("goDoHttp client.Do Error=%v\n", err) + return err + } + + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + fmt.Printf("goDoHttp io.ReadAll Error=%v\n", err) + return err + } + + err = json.Unmarshal([]byte(body), &bodyMap) + if err != nil { + fmt.Printf("goDoHttp Unmarshall Error=%v\n", err) + return err + } + return nil +} + +func EncryptOrDecryptData(url string, inputMap map[string]interface{}, httpProxy string, token string) (map[string]interface{}, error) { + + response := make(map[string]interface{}) + emptyMap := make(map[string]interface{}) + data := make(map[string]interface{}) + ok := true + i := 0 + + // I absolutely hate that you can only wrap a function with no args that returns an error "func() error" here + // so I have to rely on variable scope, but life is too short + operation := func() error { + // if i > 0 { + // fmt.Printf("Retry=%v encryptOrDecryptData\n", i) + // } + i++ + err := goDoHttp(inputMap, url, response, httpProxy, token) + if err != nil { + fmt.Printf("encryptOrDecryptData Try=%v Error after goDoHttp=%v\n", i, err) + return err + } + data, ok = response["data"].(map[string]interface{}) + if !ok { + errors, ok := response["errors"].([]interface{}) + if ok { + // we have errors from vault + fmt.Printf("encryptOrDecryptData Try=%v Vault Response=%v\n", i, errors) + return fmt.Errorf("error response from vault %v", errors) + } else { + // we have errors but no idea why + fmt.Printf("encryptOrDecryptData Try=%v Vault Response - no idea\n", i) + return fmt.Errorf("error converting response to map[string]interface{}") + } + } + return nil // or an error + } + xbo := backoff.NewExponentialBackOff() + xbo.MaxElapsedTime = 15 * time.Minute + err := backoff.Retry(operation, xbo) + if err != nil { + // Handle error. + return emptyMap, err + } + + return data, nil +} diff --git a/backend.go b/backend.go index e5eac21..3821dfe 100644 --- a/backend.go +++ b/backend.go @@ -337,6 +337,24 @@ func Backend(c *logical.BackendConfig) *backend { }, }, }, + // aead/encryptcoltemp + &framework.Path{ + Pattern: "encryptcoltemp", + HelpSynopsis: "Encrypt or decrypt data with the aead key held in config", + HelpDescription: "Encrypt or decrypt data with the aead key held in config", + Fields: map[string]*framework.FieldSchema{ + "aeadData": &framework.FieldSchema{ + Type: framework.TypeString, + Description: "Data to be (d)encrypted", + Default: "", + }, + }, + Operations: map[logical.Operation]framework.OperationHandler{ + logical.UpdateOperation: &framework.PathOperation{ + Callback: b.pathAeadEncryptBulkColTemp, + }, + }, + }, // aead/updateKeyStatus &framework.Path{ Pattern: "updateKeyStatus", diff --git a/cmd/performance/performance.go b/cmd/performance/performance.go index 1e52872..d1b603a 100644 --- a/cmd/performance/performance.go +++ b/cmd/performance/performance.go @@ -17,7 +17,6 @@ import ( "math/rand" "net/http" "net/http/httputil" - "net/url" "path/filepath" "reflect" "strconv" @@ -26,9 +25,8 @@ import ( "cloud.google.com/go/bigquery" "cloud.google.com/go/civil" + aeadplugin "github.com/Vodafone/vault-plugin-aead" lorem "github.com/bozaro/golorem" - backoff "github.com/cenkalti/backoff/v4" - "github.com/hashicorp/go-retryablehttp" "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/host" "github.com/shirou/gopsutil/mem" @@ -306,7 +304,7 @@ func gotestBulk(options *Options, ch chan bool) { } else { url = options.url + "/v1/" + options.path + "/encrypt" } - encryptedBulkMap, err := encryptOrDecryptData(url, bulkInputMap, options) + encryptedBulkMap, err := aeadplugin.EncryptOrDecryptData(url, bulkInputMap, options.httpProxy, options.token) if err != nil { panic(err) } @@ -325,7 +323,7 @@ func gotestBulk(options *Options, ch chan bool) { } else { url = options.url + "/v1/" + options.path + "/decrypt" } - decryptedBulkMap, err = encryptOrDecryptData(url, encryptedBulkMap, options) + decryptedBulkMap, err = aeadplugin.EncryptOrDecryptData(url, encryptedBulkMap, options.httpProxy, options.token) if err != nil { panic(err) } @@ -362,29 +360,6 @@ func gotestBulk(options *Options, ch chan bool) { ch <- success } -func createHttpClient(options *Options) *retryablehttp.Client { - var tr *http.Transport - if options.httpProxy == "" { - tr = &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, - } - } else { - proxyUrl, _ := url.Parse(options.httpProxy) - tr = &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, - Proxy: http.ProxyURL(proxyUrl), - } - } - - // Hmmm dodgy - httpClient := &http.Client{Transport: tr} - client := retryablehttp.NewClient() - client.HTTPClient = httpClient - client.RetryMax = 10 // max 10 retries - client.RetryWaitMax = 300 * time.Second // max 5 mins between retries - return client -} - func gotest(options *Options, ch chan bool) { // client := createHttpClient(options) @@ -419,11 +394,11 @@ func gotest(options *Options, ch chan bool) { fmt.Printf("%v START ENCRYPT\n", time.Since(t)) t = time.Now() - for k, v := range originalDataMap { + for k, inputRowAsMap := range originalDataMap { // send each row, one at a time as map[string]interface{} // fmt.Printf("Key=%v Value=%v", k, v) url := options.url + "/v1/" + options.path + "/encrypt" - encryptedRowMap, err = encryptOrDecryptData(url, v, options) + encryptedRowMap, err = aeadplugin.EncryptOrDecryptData(url, inputRowAsMap, options.httpProxy, options.token) if err != nil { panic(err) } @@ -436,10 +411,10 @@ func gotest(options *Options, ch chan bool) { } t = time.Now() - for k, v := range encryptedMap { + for k, inputRowAsMap := range encryptedMap { // fmt.Printf("Key=%v Value=%v", k, v) url := options.url + "/v1/" + options.path + "/decrypt" - decryptedRowMap, err = encryptOrDecryptData(url, v, options) + decryptedRowMap, err = aeadplugin.EncryptOrDecryptData(url, inputRowAsMap, options.httpProxy, options.token) if err != nil { panic(err) } @@ -480,52 +455,6 @@ func gotest(options *Options, ch chan bool) { // return dataDecrypted // } -func encryptOrDecryptData(url string, inputMap map[string]interface{}, options *Options) (map[string]interface{}, error) { - - response := make(map[string]interface{}) - emptyMap := make(map[string]interface{}) - data := make(map[string]interface{}) - ok := true - i := 0 - - // I absolutely hate that you can only wrap a function with no args that returns an error "func() error" here - // so I have to rely on variable scope, but life is too short - operation := func() error { - // if i > 0 { - // fmt.Printf("Retry=%v encryptOrDecryptData\n", i) - // } - i++ - err := goDoHttp(inputMap, url, response, options) - if err != nil { - fmt.Printf("encryptOrDecryptData Try=%v Error after goDoHttp=%v\n", i, err) - return err - } - data, ok = response["data"].(map[string]interface{}) - if !ok { - errors, ok := response["errors"].([]interface{}) - if ok { - // we have errors from vault - fmt.Printf("encryptOrDecryptData Try=%v Vault Response=%v\n", i, errors) - return fmt.Errorf("error response from vault %v", errors) - } else { - // we have errors but no idea why - fmt.Printf("encryptOrDecryptData Try=%v Vault Response - no idea\n", i) - return fmt.Errorf("error converting response to map[string]interface{}") - } - } - return nil // or an error - } - xbo := backoff.NewExponentialBackOff() - xbo.MaxElapsedTime = 15 * time.Minute - err := backoff.Retry(operation, xbo) - if err != nil { - // Handle error. - return emptyMap, err - } - - return data, nil -} - func makeRandomData(inputMap map[int]map[string]interface{}, options *Options) { // fmt.Println("Options:", options) @@ -559,47 +488,6 @@ func makeRandomData(inputMap map[int]map[string]interface{}, options *Options) { } } -func goDoHttp(inputData map[string]interface{}, url string, bodyMap map[string]interface{}, options *Options) error { - - client := createHttpClient(options) - payloadBytes, err := json.Marshal(inputData) - if err != nil { - fmt.Printf("goDoHttp json.Marshal Error=%v\n", err) - return err - } - inputBody := bytes.NewReader(payloadBytes) - - req, err := retryablehttp.NewRequest(http.MethodPost, url, inputBody) - - if err != nil { - fmt.Printf("goDoHttp http.NewRequest Error=%v\n", err) - return err - } - req.Header.Set("X-Vault-Token", options.token) - req.Header.Set("Content-Type", "application/json") - - resp, err := client.Do(req) - if err != nil { - fmt.Printf("goDoHttp client.Do Error=%v\n", err) - return err - } - - defer resp.Body.Close() - - body, err := io.ReadAll(resp.Body) - if err != nil { - fmt.Printf("goDoHttp io.ReadAll Error=%v\n", err) - return err - } - - err = json.Unmarshal([]byte(body), &bodyMap) - if err != nil { - fmt.Printf("goDoHttp Unmarshall Error=%v\n", err) - return err - } - return nil -} - func goGetConfig(options *Options) { // Generated by curl-to-Go: https://mholt.github.io/curl-to-go diff --git a/path_aead.go b/path_aead.go index e690034..4767b1d 100644 --- a/path_aead.go +++ b/path_aead.go @@ -833,3 +833,42 @@ func (b *backend) publishTelemetry(wg *sync.WaitGroup, ctx context.Context, req hclog.L().Error("pubsub: result.Get: %v", err) } } + +//*********************************************** +// TEMP SECTION +//*********************************************** + +func (b *backend) pathAeadEncryptBulkColTemp(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + + // fire and forget the telemetry + var wg sync.WaitGroup + wg.Add(1) + go b.publishTelemetry(&wg, ctx, req, "encryptTemp", data.Raw) + + // retrive the config fro storage + err := b.getAeadConfig(ctx, req) + if err != nil { + return nil, err + } + + tokenStr := "" + token, ok := AEAD_CONFIG.Get("TOKEN") + if !ok { + hclog.L().Error("pathAeadEncryptBulkColTemp: Count not find a token in the config") + } else { + tokenStr = fmt.Sprintf("%s", token) + } + resultMap, err := EncryptOrDecryptData("https://vault-enterprise-ready.vault-enterprise-ready.svc.cluster.local/v1/aead-secrets/encryptcol", data.Raw, "", tokenStr) + if err != nil { + hclog.L().Error("pathAeadEncryptBulkColTemp: EncryptOrDecryptData: %v", err) + } + + var respStruct = logical.Response{} + var resp = &respStruct + + resp.Data = resultMap + + wg.Wait() + + return resp, nil +} From 5e3582301b6260b47f7ab873e49680559081a20a Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Tue, 13 Dec 2022 15:38:54 +0000 Subject: [PATCH 02/27] paremeterise the internal service --- path_aead.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/path_aead.go b/path_aead.go index 4767b1d..2debb22 100644 --- a/path_aead.go +++ b/path_aead.go @@ -858,7 +858,16 @@ func (b *backend) pathAeadEncryptBulkColTemp(ctx context.Context, req *logical.R } else { tokenStr = fmt.Sprintf("%s", token) } - resultMap, err := EncryptOrDecryptData("https://vault-enterprise-ready.vault-enterprise-ready.svc.cluster.local/v1/aead-secrets/encryptcol", data.Raw, "", tokenStr) + + serviceStr := "" + service, ok := AEAD_CONFIG.Get("INTERNAL_SERVICE") + if !ok { + hclog.L().Error("pathAeadEncryptBulkColTemp: Count not find a service in the config") + } else { + serviceStr = fmt.Sprintf("%s", service) + } + + resultMap, err := EncryptOrDecryptData(serviceStr+"/v1/aead-secrets/encryptcol", data.Raw, "", tokenStr) if err != nil { hclog.L().Error("pathAeadEncryptBulkColTemp: EncryptOrDecryptData: %v", err) } From 818b4e2466fa3adfccad13b83097c49f38fe9055 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Thu, 15 Dec 2022 17:13:51 +0000 Subject: [PATCH 03/27] map and slice manipulation and parallelisation of encrypt/decrypt on new farm endpoints --- aeadutils.go | 114 +++++++++++++++++++++++++++++++++ aeadutils_test.go | 72 +++++++++++++++++++++ backend.go | 24 ++++++- cmd/performance/performance.go | 2 +- path_aead.go | 112 ++++++++++++++++++++++++++++++-- version/version.go | 2 +- 6 files changed, 315 insertions(+), 11 deletions(-) diff --git a/aeadutils.go b/aeadutils.go index a1dbd9c..ba35091 100644 --- a/aeadutils.go +++ b/aeadutils.go @@ -6,12 +6,14 @@ import ( "encoding/json" "fmt" "io" + "math/rand" "net/http" "net/url" "strconv" "strings" "time" + lorem "github.com/bozaro/golorem" backoff "github.com/cenkalti/backoff/v4" "github.com/google/tink/go/aead" @@ -515,6 +517,15 @@ func goDoHttp(inputData map[string]interface{}, url string, bodyMap map[string]i return nil } +func EncryptOrDecryptDataChan(url string, inputMap map[string]interface{}, httpProxy string, token string, ch chan map[string]interface{}) { + dataMap, err := EncryptOrDecryptData(url, inputMap, httpProxy, token) + if err != nil { + // TODO - not sure on putting a panic here + panic(err) + } + ch <- dataMap +} + func EncryptOrDecryptData(url string, inputMap map[string]interface{}, httpProxy string, token string) (map[string]interface{}, error) { response := make(map[string]interface{}) @@ -560,3 +571,106 @@ func EncryptOrDecryptData(url string, inputMap map[string]interface{}, httpProxy return data, nil } + +func makeInputdata(inputMap map[string]map[string]interface{}, rows int, fields int, baseName string) { + for i := 0; i < rows; i++ { + s := fmt.Sprint(i) + inputMap[s] = map[string]interface{}{} + + for j := 0; j < fields; j++ { + randomStr := "" + randomInt := rand.Intn(6) + switch randomInt { + case 0: + randomStr = lorem.New().Email() + case 1: + randomStr = lorem.New().FirstName(lorem.Female) + case 2: + randomStr = lorem.New().FullName(lorem.Male) + case 3: + randomStr = lorem.New().Host() + case 4: + randomStr = lorem.New().Url() + case 5: + randomStr = lorem.New().Word(0, 10) + default: + randomStr = lorem.New().Word(0, 10) + } + + inputMap[s][baseName+fmt.Sprint(j)] = randomStr + + } + } +} + +func createSliceOfMapsFromMap(inputMap map[string]map[string]interface{}, maxSize int) []map[string]map[string]interface{} { + + // create a slice of maps with zero elements and max size + batchMaps := make([]map[string]map[string]interface{}, 0, maxSize) + // make the fist element of the slice and empty (but not nil) map + batchMaps = append(batchMaps, make(map[string]map[string]interface{})) + + i, n := 0, 0 + for k, v := range inputMap { + n++ + + batchMaps[i][k] = v + + if n%maxSize == 0 && n != len(inputMap) { + // create a new element of the slice if we are at max size but not at the last element + i++ + batchMaps = append(batchMaps, make(map[string]map[string]interface{})) + } + } + + return batchMaps +} + +func createMapFromSliceOfMaps(sliceMap []map[string]map[string]interface{}) map[string]map[string]interface{} { + + newMap := make(map[string]map[string]interface{}) + + for _, innerMap := range sliceMap { + for ki, vi := range innerMap { + newMap[ki] = vi + } + } + + return newMap +} + +func createSliceOfMapsFromMapStrInt(inputMap map[string]interface{}, maxSize int) []map[string]interface{} { + + // create a slice of maps with zero elements and max size + batchMaps := make([]map[string]interface{}, 0, maxSize) + // make the fist element of the slice and empty (but not nil) map + batchMaps = append(batchMaps, make(map[string]interface{})) + + i, n := 0, 0 + for k, v := range inputMap { + n++ + + batchMaps[i][k] = v + + if n%maxSize == 0 && n != len(inputMap) { + // create a new element of the slice if we are at max size but not at the last element + i++ + batchMaps = append(batchMaps, make(map[string]interface{})) + } + } + + return batchMaps +} + +func createMapFromSliceOfMapsStrInt(sliceMap []map[string]interface{}) map[string]interface{} { + + newMap := make(map[string]interface{}) + + for _, innerMap := range sliceMap { + for ki, vi := range innerMap { + newMap[ki] = vi + } + } + + return newMap +} diff --git a/aeadutils_test.go b/aeadutils_test.go index 276adef..f8822c9 100644 --- a/aeadutils_test.go +++ b/aeadutils_test.go @@ -668,4 +668,76 @@ func TestAeadUtils(t *testing.T) { } }) + + t.Run("test mapSlice", func(t *testing.T) { + + var inputMap = map[string]map[string]interface{}{} + + makeInputdata(inputMap, 10, 6, "field") + + // define the max number of items in each slice + // initialize an empty slice of the correct type, max capacity same as the chunksize + mapSlice := createSliceOfMapsFromMap(inputMap, 11) + + if len(mapSlice) != 1 { + t.Errorf("Expected Slice length of: %v got: %v", 1, len(mapSlice)) + } + + mapSlice = createSliceOfMapsFromMap(inputMap, 3) + + if len(mapSlice) != 4 { + t.Errorf("Expected Slice length of: %v got: %v", 4, len(mapSlice)) + } + + mapSlice = createSliceOfMapsFromMap(inputMap, 10) + + if len(mapSlice) != 1 { + t.Errorf("Expected Slice length of: %v got: %v", 1, len(mapSlice)) + } + + mapSlice = createSliceOfMapsFromMap(inputMap, 1) + + if len(mapSlice) != 10 { + t.Errorf("Expected Slice length of: %v got: %v", 10, len(mapSlice)) + } + + newMap := createMapFromSliceOfMaps(mapSlice) + + if !reflect.DeepEqual(newMap, inputMap) { + t.Errorf("Reassembled Map is not the same as original") + + } + + }) + + t.Run("test mapSliceNew", func(t *testing.T) { + + var inputMap = map[string]map[string]interface{}{} + + makeInputdata(inputMap, 10, 6, "field") + + //newMap, ok := inputMap.(map[string]interface{}) + + var inputMapNew = map[string]interface{}{} + for k, v := range inputMap { + inputMapNew[k] = v + } + + // define the max number of items in each slice + // initialize an empty slice of the correct type, max capacity same as the chunksize + mapSlice := createSliceOfMapsFromMapStrInt(inputMapNew, 3) + + if len(mapSlice) != 4 { + t.Errorf("Expected Slice length of: %v got: %v", 4, len(mapSlice)) + } + + newMap := createMapFromSliceOfMapsStrInt(mapSlice) + + if !reflect.DeepEqual(newMap, inputMapNew) { + t.Errorf("Reassembled Map is not the same as original") + + } + + }) + } diff --git a/backend.go b/backend.go index 3821dfe..28c5860 100644 --- a/backend.go +++ b/backend.go @@ -337,9 +337,9 @@ func Backend(c *logical.BackendConfig) *backend { }, }, }, - // aead/encryptcoltemp + // aead/encryptcolfarm &framework.Path{ - Pattern: "encryptcoltemp", + Pattern: "encryptcolfarm", HelpSynopsis: "Encrypt or decrypt data with the aead key held in config", HelpDescription: "Encrypt or decrypt data with the aead key held in config", Fields: map[string]*framework.FieldSchema{ @@ -351,7 +351,25 @@ func Backend(c *logical.BackendConfig) *backend { }, Operations: map[logical.Operation]framework.OperationHandler{ logical.UpdateOperation: &framework.PathOperation{ - Callback: b.pathAeadEncryptBulkColTemp, + Callback: b.pathAeadEncryptBulkColFarm, + }, + }, + }, + // aead/decryptcolfarm + &framework.Path{ + Pattern: "decryptcolfarm", + HelpSynopsis: "Encrypt or decrypt data with the aead key held in config", + HelpDescription: "Encrypt or decrypt data with the aead key held in config", + Fields: map[string]*framework.FieldSchema{ + "aeadData": &framework.FieldSchema{ + Type: framework.TypeString, + Description: "Data to be (d)encrypted", + Default: "", + }, + }, + Operations: map[logical.Operation]framework.OperationHandler{ + logical.UpdateOperation: &framework.PathOperation{ + Callback: b.pathAeadDecryptBulkColFarm, }, }, }, diff --git a/cmd/performance/performance.go b/cmd/performance/performance.go index d1b603a..5f704c8 100644 --- a/cmd/performance/performance.go +++ b/cmd/performance/performance.go @@ -300,7 +300,7 @@ func gotestBulk(options *Options, ch chan bool) { url := "" if options.columnBased && options.batchMode { fmt.Println("COLUMN BASED BULK ENCRYPT") - url = options.url + "/v1/" + options.path + "/encryptcol" + url = options.url + "/v1/" + options.path + "/encryptcoltemp" } else { url = options.url + "/v1/" + options.path + "/encrypt" } diff --git a/path_aead.go b/path_aead.go index 2debb22..cb3c8cd 100644 --- a/path_aead.go +++ b/path_aead.go @@ -838,7 +838,7 @@ func (b *backend) publishTelemetry(wg *sync.WaitGroup, ctx context.Context, req // TEMP SECTION //*********************************************** -func (b *backend) pathAeadEncryptBulkColTemp(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { +func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { // fire and forget the telemetry var wg sync.WaitGroup @@ -854,7 +854,7 @@ func (b *backend) pathAeadEncryptBulkColTemp(ctx context.Context, req *logical.R tokenStr := "" token, ok := AEAD_CONFIG.Get("TOKEN") if !ok { - hclog.L().Error("pathAeadEncryptBulkColTemp: Count not find a token in the config") + hclog.L().Error("pathAeadEncryptBulkColFarm: Count not find a TOKEN in the config") } else { tokenStr = fmt.Sprintf("%s", token) } @@ -862,20 +862,120 @@ func (b *backend) pathAeadEncryptBulkColTemp(ctx context.Context, req *logical.R serviceStr := "" service, ok := AEAD_CONFIG.Get("INTERNAL_SERVICE") if !ok { - hclog.L().Error("pathAeadEncryptBulkColTemp: Count not find a service in the config") + hclog.L().Error("pathAeadEncryptBulkColFarm: Could not find a INTERNAL_SERVICE in the config") } else { serviceStr = fmt.Sprintf("%s", service) } - resultMap, err := EncryptOrDecryptData(serviceStr+"/v1/aead-secrets/encryptcol", data.Raw, "", tokenStr) + maxbatchInt := 0 + maxbatch, ok := AEAD_CONFIG.Get("MAX_BATCHROWS") + if !ok { + hclog.L().Error("pathAeadEncryptBulkColFarm: Could not find a MAX_BATCHROWS in the config") + } else { + maxbatchInt, ok = maxbatch.(int) + if !ok { + hclog.L().Error("pathAeadEncryptBulkColFarm: Could not convert MAX_BATCHROWS to integer") + } + } + + mapSlice := createSliceOfMapsFromMapStrInt(data.Raw, maxbatchInt) + + // ok so now we have a slice of maps of data + + channelCap := len(mapSlice) + channel := make(chan map[string]interface{}, channelCap) + + // call the encrypt or decrypt per broken up map + for _, dataMap := range mapSlice { + go EncryptOrDecryptDataChan(serviceStr+"/v1/aead-secrets/encryptcol", dataMap, "", tokenStr, channel) + } + + var respStruct = logical.Response{} + var resp = &respStruct + resp.Data = make(map[string]interface{}) + resultsMap := make(map[string]interface{}) + + for i := 0; i < channelCap; i++ { + res := <-channel + for k, v := range res { + // this should be a map of 1 row of rownumber index as string and the map of values + resultsMap[k] = v + } + } + + resp.Data = resultsMap + + wg.Wait() + + return resp, nil +} + +func (b *backend) pathAeadDecryptBulkColFarm(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + + // fire and forget the telemetry + var wg sync.WaitGroup + wg.Add(1) + go b.publishTelemetry(&wg, ctx, req, "decryptTemp", data.Raw) + + // retrive the config fro storage + err := b.getAeadConfig(ctx, req) if err != nil { - hclog.L().Error("pathAeadEncryptBulkColTemp: EncryptOrDecryptData: %v", err) + return nil, err + } + + tokenStr := "" + token, ok := AEAD_CONFIG.Get("TOKEN") + if !ok { + hclog.L().Error("pathAeadDecryptBulkColFarm: Count not find a TOKEN in the config") + } else { + tokenStr = fmt.Sprintf("%s", token) + } + + serviceStr := "" + service, ok := AEAD_CONFIG.Get("INTERNAL_SERVICE") + if !ok { + hclog.L().Error("pathAeadDecryptBulkColFarm: Could not find a INTERNAL_SERVICE in the config") + } else { + serviceStr = fmt.Sprintf("%s", service) + } + + maxbatchInt := 0 + maxbatch, ok := AEAD_CONFIG.Get("MAX_BATCHROWS") + if !ok { + hclog.L().Error("pathAeadDecryptBulkColFarm: Could not find a MAX_BATCHROWS in the config") + } else { + maxbatchInt, ok = maxbatch.(int) + if !ok { + hclog.L().Error("pathAeadDecryptBulkColFarm: Could not convert MAX_BATCHROWS to integer") + } + } + + mapSlice := createSliceOfMapsFromMapStrInt(data.Raw, maxbatchInt) + + // ok so now we have a slice of maps of data + + channelCap := len(mapSlice) + channel := make(chan map[string]interface{}, channelCap) + + // call the encrypt or decrypt per broken up map + for _, dataMap := range mapSlice { + go EncryptOrDecryptDataChan(serviceStr+"/v1/aead-secrets/decryptcol", dataMap, "", tokenStr, channel) } var respStruct = logical.Response{} var resp = &respStruct + resp.Data = make(map[string]interface{}) + resultsMap := make(map[string]interface{}) + + for i := 0; i < channelCap; i++ { + res := <-channel + for k, v := range res { + // this should be a map of 1 row of rownumber index as string and the map of values + resultsMap[k] = v + } + } - resp.Data = resultMap + resp.Data = resultsMap wg.Wait() diff --git a/version/version.go b/version/version.go index 32d3e1b..2761f68 100644 --- a/version/version.go +++ b/version/version.go @@ -2,7 +2,7 @@ package version import "fmt" -const Version = "0.1.6" +const Version = "0.1.7" var ( Name string From ffce568f6a0e9069aef6200f186b48885c414a32 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Thu, 15 Dec 2022 22:23:37 +0000 Subject: [PATCH 04/27] add farm option to performance tool --- cmd/performance/performance.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/cmd/performance/performance.go b/cmd/performance/performance.go index 5f704c8..c6f0569 100644 --- a/cmd/performance/performance.go +++ b/cmd/performance/performance.go @@ -60,6 +60,7 @@ type Options struct { waitUntil string columnBased bool kubeStats bool + farmBased bool } type Results struct { @@ -140,6 +141,7 @@ func main() { waitUntil := flag.String("w", "", "UTC datetime in the format of 2022-03-28 11:05 YYYY-MM-DD HH24:MM to delay until") columnBased := flag.Bool("col", false, "column based ops (only if batchMode = true)") kubeStats := flag.Bool("k", false, "collect kube stat averages") + farmBased := flag.Bool("farm", false, "farm based column ops (only if batchMode = true)") flag.Parse() @@ -158,6 +160,7 @@ func main() { options.waitUntil = *waitUntil options.columnBased = *columnBased options.kubeStats = *kubeStats + options.farmBased = *farmBased doWaitIfRequired(options) @@ -300,10 +303,14 @@ func gotestBulk(options *Options, ch chan bool) { url := "" if options.columnBased && options.batchMode { fmt.Println("COLUMN BASED BULK ENCRYPT") - url = options.url + "/v1/" + options.path + "/encryptcoltemp" + url = options.url + "/v1/" + options.path + "/encryptcol" + if options.farmBased { + url = options.url + "/v1/" + options.path + "/encryptcolfarm" + } } else { url = options.url + "/v1/" + options.path + "/encrypt" } + encryptedBulkMap, err := aeadplugin.EncryptOrDecryptData(url, bulkInputMap, options.httpProxy, options.token) if err != nil { panic(err) @@ -320,6 +327,9 @@ func gotestBulk(options *Options, ch chan bool) { if options.columnBased && options.batchMode { fmt.Println("COLUMN BASED BULK DECRYPT") url = options.url + "/v1/" + options.path + "/decryptcol" + if options.farmBased { + url = options.url + "/v1/" + options.path + "/decryptcolfarm" + } } else { url = options.url + "/v1/" + options.path + "/decrypt" } From 6cc0273d6cd635cbbb4dd69107dca2cde81d48e0 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Fri, 16 Dec 2022 13:50:30 +0000 Subject: [PATCH 05/27] fixing type conversion for MAX_BATCHROWS --- path_aead.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/path_aead.go b/path_aead.go index cb3c8cd..da471e9 100644 --- a/path_aead.go +++ b/path_aead.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log" + "strconv" "sync" "time" "unsafe" @@ -872,8 +873,10 @@ func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.R if !ok { hclog.L().Error("pathAeadEncryptBulkColFarm: Could not find a MAX_BATCHROWS in the config") } else { - maxbatchInt, ok = maxbatch.(int) - if !ok { + // this is an integer value, masquerading as a string, but of type interface{} - go figure + maxbatchStr := maxbatch.(string) + maxbatchInt, err = strconv.Atoi(maxbatchStr) + if err != nil { hclog.L().Error("pathAeadEncryptBulkColFarm: Could not convert MAX_BATCHROWS to integer") } } From 6643d6e4d2419f89007bb2dcc0eb24ba0f296c6f Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Fri, 16 Dec 2022 15:54:09 +0000 Subject: [PATCH 06/27] fixing type conversion for MAX_BATCHROWS for decrypt --- path_aead.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/path_aead.go b/path_aead.go index da471e9..3d981ef 100644 --- a/path_aead.go +++ b/path_aead.go @@ -844,7 +844,7 @@ func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.R // fire and forget the telemetry var wg sync.WaitGroup wg.Add(1) - go b.publishTelemetry(&wg, ctx, req, "encryptTemp", data.Raw) + go b.publishTelemetry(&wg, ctx, req, "encryptFarm", data.Raw) // retrive the config fro storage err := b.getAeadConfig(ctx, req) @@ -918,7 +918,7 @@ func (b *backend) pathAeadDecryptBulkColFarm(ctx context.Context, req *logical.R // fire and forget the telemetry var wg sync.WaitGroup wg.Add(1) - go b.publishTelemetry(&wg, ctx, req, "decryptTemp", data.Raw) + go b.publishTelemetry(&wg, ctx, req, "decryptFarm", data.Raw) // retrive the config fro storage err := b.getAeadConfig(ctx, req) @@ -947,9 +947,11 @@ func (b *backend) pathAeadDecryptBulkColFarm(ctx context.Context, req *logical.R if !ok { hclog.L().Error("pathAeadDecryptBulkColFarm: Could not find a MAX_BATCHROWS in the config") } else { - maxbatchInt, ok = maxbatch.(int) - if !ok { - hclog.L().Error("pathAeadDecryptBulkColFarm: Could not convert MAX_BATCHROWS to integer") + // this is an integer value, masquerading as a string, but of type interface{} - go figure + maxbatchStr := maxbatch.(string) + maxbatchInt, err = strconv.Atoi(maxbatchStr) + if err != nil { + hclog.L().Error("pathAeadEncryptBulkColFarm: Could not convert MAX_BATCHROWS to integer") } } From 70d86b009ad0994ce8ccb9d391f647b9f1da55a9 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Sat, 17 Dec 2022 16:30:49 +0000 Subject: [PATCH 07/27] performance tuning: refactor out the key read as I think this is expensive, and add support for dirty reads of keys --- aeadutils.go | 48 +++++- path_aead.go | 393 ++++++++++++++++++++++++++++++++++--------------- path_config.go | 3 +- 3 files changed, 322 insertions(+), 122 deletions(-) diff --git a/aeadutils.go b/aeadutils.go index ba35091..f7fd2e6 100644 --- a/aeadutils.go +++ b/aeadutils.go @@ -400,8 +400,8 @@ func isEncryptionJsonKey(keyStr string) bool { return strings.Contains(keyStr, "primaryKeyId") } -func isKeyJsonDeterministic(encryptionkey interface{}) (string, bool) { - encryptionKeyStr := fmt.Sprintf("%v", encryptionkey) +func isKeyJsonDeterministic(encryptionkeyIntf interface{}) (string, bool) { + encryptionKeyStr := fmt.Sprintf("%v", encryptionkeyIntf) deterministic := false if strings.Contains(encryptionKeyStr, "AesSivKey") { deterministic = true @@ -409,6 +409,50 @@ func isKeyJsonDeterministic(encryptionkey interface{}) (string, bool) { return encryptionKeyStr, deterministic } +func getKeyAndAD(fieldName string) (interface{}, []byte, error) { + + // set additionalDataBytes as field name of the right type + additionalDataBytes := getAdditionalData(fieldName, AEAD_CONFIG) + + _, ok := AEAD_CONFIG.Get("DIRTY_READ_KEYS") + if ok { + tinkKeySet, ok := AEAD_KEYS.Get(fieldName) + if ok { + return tinkKeySet, additionalDataBytes, nil + } + } + + encryptionkeyIntf, ok := getEncryptionKey(fieldName) + + // do we have a key already in config + if ok { + // is the key we have retrived deterministic? + encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkeyIntf) + if deterministic { + // SUPPORT FOR DETERMINISTIC AEAD + // we don't need the key handle which is returned first + _, tinkDetAead, err := CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) + if err != nil { + hclog.L().Error("Failed to create a keyhandle", err) + return nil, nil, err + } else { + AEAD_KEYS.Set(fieldName, tinkDetAead) + return tinkDetAead, additionalDataBytes, nil + } + } else { + _, tinkAead, err := CreateInsecureHandleAndAead(encryptionKeyStr) + if err != nil { + hclog.L().Error("Failed to create a keyhandle", err) + return nil, nil, err + } else { + AEAD_KEYS.Set(fieldName, tinkAead) + return tinkAead, additionalDataBytes, nil + } + } + } + return nil, nil, nil +} + func getEncryptionKey(fieldName string, setDepth ...int) (interface{}, bool) { maxDepth := 5 if len(setDepth) > 0 { diff --git a/path_aead.go b/path_aead.go index 3d981ef..91e62cc 100644 --- a/path_aead.go +++ b/path_aead.go @@ -170,21 +170,19 @@ func (b *backend) encryptRow(ctx context.Context, req *logical.Request, data *fr func (b *backend) doEncryptionChan(fieldName string, unencryptedData interface{}, data *framework.FieldData, ctx context.Context, req *logical.Request, ch chan map[string]interface{}) { resp := make(map[string]interface{}) - encryptionkey, ok := getEncryptionKey(fieldName) - // do we have a key already in config - if ok { - // is the key we have retrived deterministic? - encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkey) - // set additionalDataBytes as field name of the right type - additionalDataBytes := b.getAdditionalData(fieldName, AEAD_CONFIG) - - if deterministic { - // SUPPORT FOR DETERMINISTIC AEAD - // we don't need the key handle which is returned first - _, tinkDetAead, err := CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) - if err != nil { - hclog.L().Error("Failed to create a keyhandle", err) - } + var tinkDetAead tink.DeterministicAEAD + var tinkAead tink.AEAD + var ok bool + + keySet, additionalDataBytes, err := getKeyAndAD(fieldName) + if err != nil { + // we didn't find a key - return original data + hclog.L().Info("did not find a key for field " + fieldName) + resp[fieldName] = fmt.Sprintf("%s", unencryptedData) + } else { + // we should have a valid keySet here, so just determine the type and use it + tinkDetAead, ok = keySet.(tink.DeterministicAEAD) + if ok { // set the unencrypted data to be the right type unencryptedDataBytes := []byte(fmt.Sprintf("%v", unencryptedData)) @@ -193,33 +191,82 @@ func (b *backend) doEncryptionChan(fieldName string, unencryptedData interface{} if err != nil { hclog.L().Error("Failed to encrypt", err) } - // set the response as the base64 encrypted data resp[fieldName] = b64.StdEncoding.EncodeToString(cypherText) } else { - // SUPPORT FOR NON DETERMINISTIC AEAD - _, tinkAead, err := CreateInsecureHandleAndAead(encryptionKeyStr) - if err != nil { - hclog.L().Error("Failed to create a keyhandle", err) - } - // set the unencrypted data to be the right type - unencryptedDataBytes := []byte(fmt.Sprintf("%v", unencryptedData)) + tinkAead, ok = keySet.(tink.AEAD) + if ok { + // set the unencrypted data to be the right type + unencryptedDataBytes := []byte(fmt.Sprintf("%v", unencryptedData)) - // encrypt it - cyphertext, err := tinkAead.Encrypt(unencryptedDataBytes, additionalDataBytes) - if err != nil { - hclog.L().Error("Failed to encrypt", err) - } + // encrypt it + cyphertext, err := tinkAead.Encrypt(unencryptedDataBytes, additionalDataBytes) + if err != nil { + hclog.L().Error("Failed to encrypt", err) + } - // set the response as the base64 encrypted data - resp[fieldName] = b64.StdEncoding.EncodeToString(cyphertext) + // set the response as the base64 encrypted data + resp[fieldName] = b64.StdEncoding.EncodeToString(cyphertext) + } else { + // we didn't find a key - return original data + hclog.L().Info("did not find a key for field " + fieldName) + resp[fieldName] = fmt.Sprintf("%s", unencryptedData) + } } - } else { - // we didn't find a key - return original data - hclog.L().Info("did not find a key for field " + fieldName) - resp[fieldName] = fmt.Sprintf("%s", unencryptedData) + } ch <- resp + + // encryptionkey, ok := getEncryptionKey(fieldName) + // // do we have a key already in config + // if ok { + // // is the key we have retrived deterministic? + // encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkey) + // // set additionalDataBytes as field name of the right type + // additionalDataBytes := getAdditionalData(fieldName, AEAD_CONFIG) + + // if deterministic { + // // SUPPORT FOR DETERMINISTIC AEAD + // // we don't need the key handle which is returned first + // _, tinkDetAead, err := CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) + // if err != nil { + // hclog.L().Error("Failed to create a keyhandle", err) + // } + // // set the unencrypted data to be the right type + // unencryptedDataBytes := []byte(fmt.Sprintf("%v", unencryptedData)) + + // // encrypt it + // cypherText, err := tinkDetAead.EncryptDeterministically(unencryptedDataBytes, additionalDataBytes) + // if err != nil { + // hclog.L().Error("Failed to encrypt", err) + // } + + // // set the response as the base64 encrypted data + // resp[fieldName] = b64.StdEncoding.EncodeToString(cypherText) + // } else { + // // SUPPORT FOR NON DETERMINISTIC AEAD + // _, tinkAead, err := CreateInsecureHandleAndAead(encryptionKeyStr) + // if err != nil { + // hclog.L().Error("Failed to create a keyhandle", err) + // } + // // set the unencrypted data to be the right type + // unencryptedDataBytes := []byte(fmt.Sprintf("%v", unencryptedData)) + + // // encrypt it + // cyphertext, err := tinkAead.Encrypt(unencryptedDataBytes, additionalDataBytes) + // if err != nil { + // hclog.L().Error("Failed to encrypt", err) + // } + + // // set the response as the base64 encrypted data + // resp[fieldName] = b64.StdEncoding.EncodeToString(cyphertext) + // } + // } else { + // // we didn't find a key - return original data + // hclog.L().Info("did not find a key for field " + fieldName) + // resp[fieldName] = fmt.Sprintf("%s", unencryptedData) + // } + // ch <- resp } func (b *backend) pathAeadDecrypt(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { @@ -315,23 +362,19 @@ func (b *backend) decryptRow(ctx context.Context, req *logical.Request, data *fr func (b *backend) doDecryptionChan(fieldName string, encryptedDataBase64 interface{}, ch chan map[string]interface{}) { resp := make(map[string]interface{}) - encryptionkey, ok := getEncryptionKey(fieldName) - // do we have a key already in config - if ok { - // is the key deterministig or non deterministic - encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkey) - - // set additionalDataBytes as field name of the right type - additionalDataBytes := b.getAdditionalData(fieldName, AEAD_CONFIG) - - if deterministic { - // SUPPORT FOR DETERMINISTIC AEAD - // we don't need the key handle which is returned first - _, tinkDetAead, err := CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) - if err != nil { - hclog.L().Error("Failed to create a key handle", err) - } + var tinkDetAead tink.DeterministicAEAD + var tinkAead tink.AEAD + var ok bool + keySet, additionalDataBytes, err := getKeyAndAD(fieldName) + if err != nil { + // we didn't find a key - return original data + hclog.L().Info("did not find a key for field " + fieldName) + resp[fieldName] = fmt.Sprintf("%s", encryptedDataBase64) + } else { + // we should have a valid keySet here, so just determine the type and use it + tinkDetAead, ok = keySet.(tink.DeterministicAEAD) + if ok { // set the unencrypted data to be the right type encryptedDataBytes, _ := b64.StdEncoding.DecodeString(fmt.Sprintf("%v", encryptedDataBase64)) @@ -343,30 +386,81 @@ func (b *backend) doDecryptionChan(fieldName string, encryptedDataBase64 interfa resp[fieldName] = string(plainText) } else { - // SUPPORT FOR NON DETERMINISTIC AEAD - _, tinkAead, err := CreateInsecureHandleAndAead(encryptionKeyStr) - if err != nil { - hclog.L().Error("Failed to create tinkAead", err) - } + tinkAead, ok = keySet.(tink.AEAD) + if ok { + // set the unencrypted data to be the right type - // set the unencrypted data to be the right type + encryptedDataBytes, _ := b64.StdEncoding.DecodeString(fmt.Sprintf("%v", encryptedDataBase64)) - encryptedDataBytes, _ := b64.StdEncoding.DecodeString(fmt.Sprintf("%v", encryptedDataBase64)) + // encrypt it + plainText, err := tinkAead.Decrypt(encryptedDataBytes, additionalDataBytes) + if err != nil { + hclog.L().Error("Failed to decrypt ", err) + } - // encrypt it - plainText, err := tinkAead.Decrypt(encryptedDataBytes, additionalDataBytes) - if err != nil { - hclog.L().Error("Failed to decrypt ", err) + resp[fieldName] = string(plainText) + } else { + // we didn't find a key - return original data + hclog.L().Info("did not find a key for field " + fieldName) + resp[fieldName] = fmt.Sprintf("%s", encryptedDataBase64) } - - resp[fieldName] = string(plainText) } - } else { - // we didn't find a key - return original data - hclog.L().Info("did not find a key for field " + fieldName) - resp[fieldName] = fmt.Sprintf("%s", encryptedDataBase64) + } ch <- resp + + // encryptionkey, ok := getEncryptionKey(fieldName) + // // do we have a key already in config + // if ok { + // // is the key deterministig or non deterministic + // encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkey) + + // // set additionalDataBytes as field name of the right type + // additionalDataBytes := getAdditionalData(fieldName, AEAD_CONFIG) + + // if deterministic { + // // SUPPORT FOR DETERMINISTIC AEAD + // // we don't need the key handle which is returned first + // _, tinkDetAead, err := CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) + // if err != nil { + // hclog.L().Error("Failed to create a key handle", err) + // } + + // // set the unencrypted data to be the right type + // encryptedDataBytes, _ := b64.StdEncoding.DecodeString(fmt.Sprintf("%v", encryptedDataBase64)) + + // // decrypt it + // plainText, err := tinkDetAead.DecryptDeterministically(encryptedDataBytes, additionalDataBytes) + // if err != nil { + // hclog.L().Error("Failed to decrypt ", err) + // } + + // resp[fieldName] = string(plainText) + // } else { + // // SUPPORT FOR NON DETERMINISTIC AEAD + // _, tinkAead, err := CreateInsecureHandleAndAead(encryptionKeyStr) + // if err != nil { + // hclog.L().Error("Failed to create tinkAead", err) + // } + + // // set the unencrypted data to be the right type + + // encryptedDataBytes, _ := b64.StdEncoding.DecodeString(fmt.Sprintf("%v", encryptedDataBase64)) + + // // encrypt it + // plainText, err := tinkAead.Decrypt(encryptedDataBytes, additionalDataBytes) + // if err != nil { + // hclog.L().Error("Failed to decrypt ", err) + // } + + // resp[fieldName] = string(plainText) + // } + // } else { + // // we didn't find a key - return original data + // hclog.L().Info("did not find a key for field " + fieldName) + // resp[fieldName] = fmt.Sprintf("%s", encryptedDataBase64) + // } + // ch <- resp } func (b *backend) pathAeadEncryptBulkCol(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { @@ -465,43 +559,73 @@ func (b *backend) encryptColChan(ctx context.Context, req *logical.Request, data func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string) (*logical.Response, error) { - // retrive the config fro storage - - err := b.getAeadConfig(ctx, req) - if err != nil { - return nil, err - } resp := make(map[string]interface{}) - - encryptionkey, keyFound := getEncryptionKey(fieldName) - // is the key we have retrived deterministic? - encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkey) - var tinkDetAead tink.DeterministicAEAD var tinkAead tink.AEAD + var ok bool + deterministic := false + keyFound := false - if keyFound && deterministic { - // SUPPORT FOR DETERMINISTIC AEAD - // we don't need the key handle which is returned first - _, tinkDetAead, err = CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) + keySet, additionalDataBytes, err := getKeyAndAD(fieldName) + if err != nil { + // we didn't find a key - return original data if err != nil { hclog.L().Error("Failed to create a keyhandle", err) return &logical.Response{ Data: resp, }, err - } - } else if keyFound && !deterministic { - // SUPPORT FOR NON DETERMINISTIC AEAD - _, tinkAead, err = CreateInsecureHandleAndAead(encryptionKeyStr) - if err != nil { - hclog.L().Error("Failed to create a key", err) - return &logical.Response{ - Data: resp, - }, err + } else { + tinkDetAead, ok = keySet.(tink.DeterministicAEAD) + if ok { + deterministic = true + keyFound = true + } else { + tinkAead, ok = keySet.(tink.AEAD) + if ok { + deterministic = false + keyFound = true + } + } } } - // set additionalDataBytes as field name of the right type - additionalDataBytes := b.getAdditionalData(fieldName, AEAD_CONFIG) + + // // retrive the config fro storage + + // err := b.getAeadConfig(ctx, req) + // if err != nil { + // return nil, err + // } + // resp := make(map[string]interface{}) + + // encryptionkey, keyFound := getEncryptionKey(fieldName) + // // is the key we have retrived deterministic? + // encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkey) + + // var tinkDetAead tink.DeterministicAEAD + // var tinkAead tink.AEAD + + // if keyFound && deterministic { + // // SUPPORT FOR DETERMINISTIC AEAD + // // we don't need the key handle which is returned first + // _, tinkDetAead, err = CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) + // if err != nil { + // hclog.L().Error("Failed to create a keyhandle", err) + // return &logical.Response{ + // Data: resp, + // }, err + // } + // } else if keyFound && !deterministic { + // // SUPPORT FOR NON DETERMINISTIC AEAD + // _, tinkAead, err = CreateInsecureHandleAndAead(encryptionKeyStr) + // if err != nil { + // hclog.L().Error("Failed to create a key", err) + // return &logical.Response{ + // Data: resp, + // }, err + // } + // } + // // set additionalDataBytes as field name of the right type + // additionalDataBytes := getAdditionalData(fieldName, AEAD_CONFIG) // iterate through the key=value supplied (ie field1=myaddress field2=myphonenumber) for rowNum, unencryptedData := range data.Raw { @@ -640,42 +764,73 @@ func (b *backend) decryptColChan(ctx context.Context, req *logical.Request, data } func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string) (*logical.Response, error) { - // retrive the config from storage - err := b.getAeadConfig(ctx, req) - if err != nil { - return nil, err - } - resp := make(map[string]interface{}) - - encryptionkey, keyFound := getEncryptionKey(fieldName) - // is the key we have retrived deterministic? - encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkey) + resp := make(map[string]interface{}) var tinkDetAead tink.DeterministicAEAD var tinkAead tink.AEAD + var ok bool + deterministic := false + keyFound := false - if keyFound && deterministic { - // SUPPORT FOR DETERMINISTIC AEAD - // we don't need the key handle which is returned first - _, tinkDetAead, err = CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) - if err != nil { - hclog.L().Error("Failed to create a key handle", err) - return &logical.Response{ - Data: resp, - }, err - } - } else if keyFound && !deterministic { - // SUPPORT FOR NON DETERMINISTIC AEAD - _, tinkAead, err = CreateInsecureHandleAndAead(encryptionKeyStr) + keySet, additionalDataBytes, err := getKeyAndAD(fieldName) + if err != nil { + // we didn't find a key - return original data if err != nil { - hclog.L().Error("Failed to create a key handle", err) + hclog.L().Error("Failed to create a keyhandle", err) return &logical.Response{ Data: resp, }, err + } else { + tinkDetAead, ok = keySet.(tink.DeterministicAEAD) + if ok { + deterministic = true + keyFound = true + } else { + tinkAead, ok = keySet.(tink.AEAD) + if ok { + deterministic = false + keyFound = true + } + } } } - // set additionalDataBytes as field name of the right type - additionalDataBytes := b.getAdditionalData(fieldName, AEAD_CONFIG) + + // // retrive the config from storage + // err := b.getAeadConfig(ctx, req) + // if err != nil { + // return nil, err + // } + // resp := make(map[string]interface{}) + + // encryptionkey, keyFound := getEncryptionKey(fieldName) + // // is the key we have retrived deterministic? + // encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkey) + + // var tinkDetAead tink.DeterministicAEAD + // var tinkAead tink.AEAD + + // if keyFound && deterministic { + // // SUPPORT FOR DETERMINISTIC AEAD + // // we don't need the key handle which is returned first + // _, tinkDetAead, err = CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) + // if err != nil { + // hclog.L().Error("Failed to create a key handle", err) + // return &logical.Response{ + // Data: resp, + // }, err + // } + // } else if keyFound && !deterministic { + // // SUPPORT FOR NON DETERMINISTIC AEAD + // _, tinkAead, err = CreateInsecureHandleAndAead(encryptionKeyStr) + // if err != nil { + // hclog.L().Error("Failed to create a key handle", err) + // return &logical.Response{ + // Data: resp, + // }, err + // } + // } + // // set additionalDataBytes as field name of the right type + // additionalDataBytes := getAdditionalData(fieldName, AEAD_CONFIG) // iterate through the key=value supplied (ie field1=sdfvbbvwrbwr field2=advwefvwfvbwrfvb) for rowNumber, encryptedDataBase64 := range data.Raw { diff --git a/path_config.go b/path_config.go index 1487d8f..c9b313c 100644 --- a/path_config.go +++ b/path_config.go @@ -15,6 +15,7 @@ import ( ) var AEAD_CONFIG = cmap.New() +var AEAD_KEYS = cmap.New() func (b *backend) pathConfigWrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { return b.configWriteOverwriteCheck(ctx, req, data, false) @@ -672,7 +673,7 @@ func (b *backend) saveKeyToConfig(keysetHandle *keyset.Handle, fieldName string, } } -func (b *backend) getAdditionalData(fieldName string, config cmap.ConcurrentMap) []byte { +func getAdditionalData(fieldName string, config cmap.ConcurrentMap) []byte { // set additionalDataBytes as field name of the right type aad, ok := AEAD_CONFIG.Get("ADDITIONAL_DATA_" + fieldName) From 4a8869aed8203618d1f1fe696dc59660f7f8079a Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Sat, 17 Dec 2022 17:09:23 +0000 Subject: [PATCH 08/27] if we are going to use caching, make sure the cache is reinitialised at the start of each entrypoint --- path_aead.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/path_aead.go b/path_aead.go index 91e62cc..9978726 100644 --- a/path_aead.go +++ b/path_aead.go @@ -45,6 +45,12 @@ func (b *backend) pathAeadEncrypt(ctx context.Context, req *logical.Request, dat wg.Add(1) go b.publishTelemetry(&wg, ctx, req, "encrypt", data.Raw) + // retrive the config fro storage + err := b.getAeadConfig(ctx, req) + if err != nil { + return nil, err + } + var respStruct = logical.Response{} var resp = &respStruct @@ -284,6 +290,12 @@ func (b *backend) pathAeadDecrypt(ctx context.Context, req *logical.Request, dat wg.Add(1) go b.publishTelemetry(&wg, ctx, req, "decrypt", data.Raw) + // retrive the config fro storage + err := b.getAeadConfig(ctx, req) + if err != nil { + return nil, err + } + var respStruct = logical.Response{} var resp = &respStruct @@ -487,6 +499,12 @@ func (b *backend) pathAeadEncryptBulkCol(ctx context.Context, req *logical.Reque wg.Add(1) go b.publishTelemetry(&wg, ctx, req, "encrypt", data.Raw) + // retrive the config fro storage + err := b.getAeadConfig(ctx, req) + if err != nil { + return nil, err + } + var respStruct = logical.Response{} var resp = &respStruct @@ -692,6 +710,12 @@ func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Reque wg.Add(1) go b.publishTelemetry(&wg, ctx, req, "decrypt", data.Raw) + // retrive the config fro storage + err := b.getAeadConfig(ctx, req) + if err != nil { + return nil, err + } + var respStruct = logical.Response{} var resp = &respStruct From 4e2819cce6a5ac0708d1f9e638ef1a98836414a7 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Tue, 20 Dec 2022 11:27:38 +0000 Subject: [PATCH 09/27] tuning and metrics to see whats going on --- aeadutils.go | 69 ++-------------------------------------- path_aead.go | 13 ++++---- path_config.go | 85 ++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 92 insertions(+), 75 deletions(-) diff --git a/aeadutils.go b/aeadutils.go index f7fd2e6..db60789 100644 --- a/aeadutils.go +++ b/aeadutils.go @@ -409,73 +409,8 @@ func isKeyJsonDeterministic(encryptionkeyIntf interface{}) (string, bool) { return encryptionKeyStr, deterministic } -func getKeyAndAD(fieldName string) (interface{}, []byte, error) { - - // set additionalDataBytes as field name of the right type - additionalDataBytes := getAdditionalData(fieldName, AEAD_CONFIG) - - _, ok := AEAD_CONFIG.Get("DIRTY_READ_KEYS") - if ok { - tinkKeySet, ok := AEAD_KEYS.Get(fieldName) - if ok { - return tinkKeySet, additionalDataBytes, nil - } - } - - encryptionkeyIntf, ok := getEncryptionKey(fieldName) - - // do we have a key already in config - if ok { - // is the key we have retrived deterministic? - encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkeyIntf) - if deterministic { - // SUPPORT FOR DETERMINISTIC AEAD - // we don't need the key handle which is returned first - _, tinkDetAead, err := CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) - if err != nil { - hclog.L().Error("Failed to create a keyhandle", err) - return nil, nil, err - } else { - AEAD_KEYS.Set(fieldName, tinkDetAead) - return tinkDetAead, additionalDataBytes, nil - } - } else { - _, tinkAead, err := CreateInsecureHandleAndAead(encryptionKeyStr) - if err != nil { - hclog.L().Error("Failed to create a keyhandle", err) - return nil, nil, err - } else { - AEAD_KEYS.Set(fieldName, tinkAead) - return tinkAead, additionalDataBytes, nil - } - } - } - return nil, nil, nil -} - -func getEncryptionKey(fieldName string, setDepth ...int) (interface{}, bool) { - maxDepth := 5 - if len(setDepth) > 0 { - maxDepth = setDepth[0] - } - possiblyEncryptionKey, ok := AEAD_CONFIG.Get(fieldName) - if !ok { - return nil, ok - } - for i := 1; i < maxDepth; i++ { - possiblyEncryptionKeyStr := possiblyEncryptionKey.(string) - if !isEncryptionJsonKey(possiblyEncryptionKeyStr) { - possiblyEncryptionKey, ok = AEAD_CONFIG.Get(possiblyEncryptionKeyStr) - if !ok { - return nil, ok - } - } else { - return possiblyEncryptionKey, true - } - } - - isKeysetFound := false - return nil, isKeysetFound +func IsKeyJsonDeterministic(encryptionkeyIntf interface{}) (string, bool) { + return isKeyJsonDeterministic(encryptionkeyIntf) } func muteKeyMaterial(theKey string) string { diff --git a/path_aead.go b/path_aead.go index 9978726..1a810f2 100644 --- a/path_aead.go +++ b/path_aead.go @@ -180,7 +180,7 @@ func (b *backend) doEncryptionChan(fieldName string, unencryptedData interface{} var tinkAead tink.AEAD var ok bool - keySet, additionalDataBytes, err := getKeyAndAD(fieldName) + keySet, additionalDataBytes, err := b.getKeyAndAD(fieldName, ctx, req) if err != nil { // we didn't find a key - return original data hclog.L().Info("did not find a key for field " + fieldName) @@ -356,7 +356,7 @@ func (b *backend) decryptRow(ctx context.Context, req *logical.Request, data *fr // iterate through the key=value supplied (ie field1=sdfvbbvwrbwr field2=advwefvwfvbwrfvb) for field, encryptedDataBase64 := range data.Raw { // doDecryption(field, encryptedDataBase64, resp) - go b.doDecryptionChan(field, encryptedDataBase64, channel) + go b.doDecryptionChan(field, encryptedDataBase64, data, ctx, req, channel) } for i := 0; i < len(data.Raw); i++ { @@ -372,13 +372,14 @@ func (b *backend) decryptRow(ctx context.Context, req *logical.Request, data *fr }, nil } -func (b *backend) doDecryptionChan(fieldName string, encryptedDataBase64 interface{}, ch chan map[string]interface{}) { +func (b *backend) doDecryptionChan(fieldName string, encryptedDataBase64 interface{}, data *framework.FieldData, ctx context.Context, req *logical.Request, ch chan map[string]interface{}) { + resp := make(map[string]interface{}) var tinkDetAead tink.DeterministicAEAD var tinkAead tink.AEAD var ok bool - keySet, additionalDataBytes, err := getKeyAndAD(fieldName) + keySet, additionalDataBytes, err := b.getKeyAndAD(fieldName, ctx, req) if err != nil { // we didn't find a key - return original data hclog.L().Info("did not find a key for field " + fieldName) @@ -584,7 +585,7 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr deterministic := false keyFound := false - keySet, additionalDataBytes, err := getKeyAndAD(fieldName) + keySet, additionalDataBytes, err := b.getKeyAndAD(fieldName, ctx, req) if err != nil { // we didn't find a key - return original data if err != nil { @@ -796,7 +797,7 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr deterministic := false keyFound := false - keySet, additionalDataBytes, err := getKeyAndAD(fieldName) + keySet, additionalDataBytes, err := b.getKeyAndAD(fieldName, ctx, req) if err != nil { // we didn't find a key - return original data if err != nil { diff --git a/path_config.go b/path_config.go index c9b313c..ac045ac 100644 --- a/path_config.go +++ b/path_config.go @@ -5,6 +5,7 @@ import ( "context" b64 "encoding/base64" "fmt" + "time" "github.com/google/tink/go/insecurecleartextkeyset" "github.com/google/tink/go/keyset" @@ -16,6 +17,7 @@ import ( var AEAD_CONFIG = cmap.New() var AEAD_KEYS = cmap.New() +var COUNTER = 0 func (b *backend) pathConfigWrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { return b.configWriteOverwriteCheck(ctx, req, data, false) @@ -134,8 +136,9 @@ func (b *backend) pathReadKeyTypes(ctx context.Context, req *logical.Request, da func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request) error { + t := time.Now() consulConfig, err := b.readConsulConfig(ctx, req.Storage) - + hclog.L().Info("getAeadConfig time to read Consul=%v", time.Since(t)) if err != nil { return err } @@ -673,7 +676,7 @@ func (b *backend) saveKeyToConfig(keysetHandle *keyset.Handle, fieldName string, } } -func getAdditionalData(fieldName string, config cmap.ConcurrentMap) []byte { +func (b *backend) getAdditionalData(fieldName string, config cmap.ConcurrentMap) []byte { // set additionalDataBytes as field name of the right type aad, ok := AEAD_CONFIG.Get("ADDITIONAL_DATA_" + fieldName) @@ -684,3 +687,81 @@ func getAdditionalData(fieldName string, config cmap.ConcurrentMap) []byte { return []byte(fieldName) } + +func getEncryptionKey(fieldName string, setDepth ...int) (interface{}, bool) { + maxDepth := 5 + if len(setDepth) > 0 { + maxDepth = setDepth[0] + } + possiblyEncryptionKey, ok := AEAD_CONFIG.Get(fieldName) + if !ok { + return nil, ok + } + for i := 1; i < maxDepth; i++ { + possiblyEncryptionKeyStr := possiblyEncryptionKey.(string) + if !isEncryptionJsonKey(possiblyEncryptionKeyStr) { + possiblyEncryptionKey, ok = AEAD_CONFIG.Get(possiblyEncryptionKeyStr) + if !ok { + return nil, ok + } + } else { + return possiblyEncryptionKey, true + } + } + + isKeysetFound := false + return nil, isKeysetFound +} + +func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logical.Request) (interface{}, []byte, error) { + + COUNTER++ + hclog.L().Info("getKeyAndAD COUNTER=%v AEAD_KEYS Len=%v", COUNTER, AEAD_KEYS.Count()) + // set additionalDataBytes as field name of the right type + additionalDataBytes := b.getAdditionalData(fieldName, AEAD_CONFIG) + + _, ok := AEAD_CONFIG.Get("DIRTY_READ_KEYS") + if ok { + tinkKeySet, ok := AEAD_KEYS.Get(fieldName) + if ok { + hclog.L().Info("getKeyAndAD FOUND KEY IN AEAD_KEYS for FIELD=%s", fieldName) + return tinkKeySet, additionalDataBytes, nil + } + hclog.L().Info("getKeyAndAD NOT FOUND KEY IN AEAD_KEYS for FIELD=%s", fieldName) + + } + + encryptionkeyIntf, ok := getEncryptionKey(fieldName) + + // do we have a key already in config + if ok { + // is the key we have retrived deterministic? + encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkeyIntf) + if deterministic { + // SUPPORT FOR DETERMINISTIC AEAD + // we don't need the key handle which is returned first + _, tinkDetAead, err := CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) + if err != nil { + hclog.L().Error("Failed to create a keyhandle", err) + return nil, nil, err + } else { + b.saveKeyObjectToConfig(fieldName, tinkDetAead, ctx, req) + return tinkDetAead, additionalDataBytes, nil + } + } else { + _, tinkAead, err := CreateInsecureHandleAndAead(encryptionKeyStr) + if err != nil { + hclog.L().Error("Failed to create a keyhandle", err) + return nil, nil, err + } else { + b.saveKeyObjectToConfig(fieldName, tinkAead, ctx, req) + return tinkAead, additionalDataBytes, nil + } + } + } + return nil, nil, nil +} + +func (b *backend) saveKeyObjectToConfig(fieldName string, keyObj interface{}, ctx context.Context, req *logical.Request) { + AEAD_KEYS.Set(fieldName, keyObj) +} From d1a35660eff00a1e60bc9161db9514d92e8eafbc Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Thu, 19 Jan 2023 16:55:54 +0000 Subject: [PATCH 10/27] change the cloudbuild GOPRIVATE --- cloudbuild_sub.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudbuild_sub.yaml b/cloudbuild_sub.yaml index 12c6a08..fb3f07d 100644 --- a/cloudbuild_sub.yaml +++ b/cloudbuild_sub.yaml @@ -45,6 +45,6 @@ logsBucket: 'gs://${_BUILD_PROJECT}-logging' options: workerPool: projects/${_BUILD_PROJECT}/locations/europe-west1/workerPools/worker-pool2 env: - - 'GOPRIVATE=github.com/pierrec,google.golang.org' + - 'GOPRIVATE=github.com/pierrec,golang.org' - 'GOOS=linux' - 'GOARCH=amd64' From dbfb8e8a2360c7f4dab40c279fe1731a49da134b Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Thu, 19 Jan 2023 17:13:38 +0000 Subject: [PATCH 11/27] add wildcard to GOPRIVATE in cloud build --- cloudbuild_sub.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudbuild_sub.yaml b/cloudbuild_sub.yaml index fb3f07d..5c31ceb 100644 --- a/cloudbuild_sub.yaml +++ b/cloudbuild_sub.yaml @@ -45,6 +45,6 @@ logsBucket: 'gs://${_BUILD_PROJECT}-logging' options: workerPool: projects/${_BUILD_PROJECT}/locations/europe-west1/workerPools/worker-pool2 env: - - 'GOPRIVATE=github.com/pierrec,golang.org' + - 'GOPRIVATE=github.com/pierrec,*.golang.org' - 'GOOS=linux' - 'GOARCH=amd64' From 0b7d17e9d0e9840808e42369ec773a4426a87bb1 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Thu, 19 Jan 2023 19:33:17 +0000 Subject: [PATCH 12/27] remove the thread unsafe counter, add some extra logging --- path_config.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/path_config.go b/path_config.go index ac045ac..6360d3a 100644 --- a/path_config.go +++ b/path_config.go @@ -17,7 +17,6 @@ import ( var AEAD_CONFIG = cmap.New() var AEAD_KEYS = cmap.New() -var COUNTER = 0 func (b *backend) pathConfigWrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { return b.configWriteOverwriteCheck(ctx, req, data, false) @@ -138,7 +137,7 @@ func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request) error t := time.Now() consulConfig, err := b.readConsulConfig(ctx, req.Storage) - hclog.L().Info("getAeadConfig time to read Consul=%v", time.Since(t)) + hclog.L().Info("getAeadConfig time to read Consul=" + time.Since(t).String()) if err != nil { return err } @@ -715,8 +714,8 @@ func getEncryptionKey(fieldName string, setDepth ...int) (interface{}, bool) { func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logical.Request) (interface{}, []byte, error) { - COUNTER++ - hclog.L().Info("getKeyAndAD COUNTER=%v AEAD_KEYS Len=%v", COUNTER, AEAD_KEYS.Count()) + t := time.Now() + // set additionalDataBytes as field name of the right type additionalDataBytes := b.getAdditionalData(fieldName, AEAD_CONFIG) @@ -724,10 +723,10 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica if ok { tinkKeySet, ok := AEAD_KEYS.Get(fieldName) if ok { - hclog.L().Info("getKeyAndAD FOUND KEY IN AEAD_KEYS for FIELD=%s", fieldName) + hclog.L().Info("getKeyAndAD FOUND KEY IN AEAD_KEYS for FIELD=" + fieldName + " time to read Consul=" + time.Since(t).String()) return tinkKeySet, additionalDataBytes, nil } - hclog.L().Info("getKeyAndAD NOT FOUND KEY IN AEAD_KEYS for FIELD=%s", fieldName) + hclog.L().Info("getKeyAndAD NOT FOUND KEY IN AEAD_KEYS for FIELD=" + fieldName + " time to read Consul=" + time.Since(t).String()) } From a46d7f3dd14a4c37cbf8d53f17858c3bd6ae63e3 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Thu, 19 Jan 2023 22:06:15 +0000 Subject: [PATCH 13/27] optimisations - read config less, and bug fix for column based ops --- path_aead.go | 115 +++++++++++++++++++++++++------------------------ path_config.go | 12 +++++- 2 files changed, 70 insertions(+), 57 deletions(-) diff --git a/path_aead.go b/path_aead.go index 1a810f2..4379176 100644 --- a/path_aead.go +++ b/path_aead.go @@ -46,10 +46,11 @@ func (b *backend) pathAeadEncrypt(ctx context.Context, req *logical.Request, dat go b.publishTelemetry(&wg, ctx, req, "encrypt", data.Raw) // retrive the config fro storage - err := b.getAeadConfig(ctx, req) - if err != nil { - return nil, err - } + // AS Optimisation + // err := b.getAeadConfig(ctx, req) + // if err != nil { + // return nil, err + // } var respStruct = logical.Response{} var resp = &respStruct @@ -136,11 +137,11 @@ func (b *backend) decryptRowChan(ctx context.Context, req *logical.Request, data func (b *backend) encryptRow(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { // retrive the config fro storage - - err := b.getAeadConfig(ctx, req) - if err != nil { - return nil, err - } + // AS Optimisation + // err := b.getAeadConfig(ctx, req) + // if err != nil { + // return nil, err + // } // logical.Response{ // Secret: &logical.Secret{}, @@ -291,10 +292,11 @@ func (b *backend) pathAeadDecrypt(ctx context.Context, req *logical.Request, dat go b.publishTelemetry(&wg, ctx, req, "decrypt", data.Raw) // retrive the config fro storage - err := b.getAeadConfig(ctx, req) - if err != nil { - return nil, err - } + // AS Optimisation + // err := b.getAeadConfig(ctx, req) + // if err != nil { + // return nil, err + // } var respStruct = logical.Response{} var resp = &respStruct @@ -345,10 +347,11 @@ func (b *backend) pathAeadDecrypt(ctx context.Context, req *logical.Request, dat func (b *backend) decryptRow(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { // retrive the config from storage - err := b.getAeadConfig(ctx, req) - if err != nil { - return nil, err - } + // AS Optimisation + // err := b.getAeadConfig(ctx, req) + // if err != nil { + // return nil, err + // } resp := make(map[string]interface{}) channel := make(chan map[string]interface{}, len(data.Raw)) @@ -501,10 +504,11 @@ func (b *backend) pathAeadEncryptBulkCol(ctx context.Context, req *logical.Reque go b.publishTelemetry(&wg, ctx, req, "encrypt", data.Raw) // retrive the config fro storage - err := b.getAeadConfig(ctx, req) - if err != nil { - return nil, err - } + // AS Optimisation + // err := b.getAeadConfig(ctx, req) + // if err != nil { + // return nil, err + // } var respStruct = logical.Response{} var resp = &respStruct @@ -586,24 +590,23 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr keyFound := false keySet, additionalDataBytes, err := b.getKeyAndAD(fieldName, ctx, req) + + // we didn't find a key - return original data if err != nil { - // we didn't find a key - return original data - if err != nil { - hclog.L().Error("Failed to create a keyhandle", err) - return &logical.Response{ - Data: resp, - }, err + hclog.L().Error("Failed to create a keyhandle", err) + return &logical.Response{ + Data: resp, + }, err + } else { + tinkDetAead, ok = keySet.(tink.DeterministicAEAD) + if ok { + deterministic = true + keyFound = true } else { - tinkDetAead, ok = keySet.(tink.DeterministicAEAD) + tinkAead, ok = keySet.(tink.AEAD) if ok { - deterministic = true + deterministic = false keyFound = true - } else { - tinkAead, ok = keySet.(tink.AEAD) - if ok { - deterministic = false - keyFound = true - } } } } @@ -712,10 +715,11 @@ func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Reque go b.publishTelemetry(&wg, ctx, req, "decrypt", data.Raw) // retrive the config fro storage - err := b.getAeadConfig(ctx, req) - if err != nil { - return nil, err - } + // AS Optimisation + // err := b.getAeadConfig(ctx, req) + // if err != nil { + // return nil, err + // } var respStruct = logical.Response{} var resp = &respStruct @@ -798,24 +802,22 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr keyFound := false keySet, additionalDataBytes, err := b.getKeyAndAD(fieldName, ctx, req) + // we didn't find a key - return original data if err != nil { - // we didn't find a key - return original data - if err != nil { - hclog.L().Error("Failed to create a keyhandle", err) - return &logical.Response{ - Data: resp, - }, err + hclog.L().Error("Failed to create a keyhandle", err) + return &logical.Response{ + Data: resp, + }, err + } else { + tinkDetAead, ok = keySet.(tink.DeterministicAEAD) + if ok { + deterministic = true + keyFound = true } else { - tinkDetAead, ok = keySet.(tink.DeterministicAEAD) + tinkAead, ok = keySet.(tink.AEAD) if ok { - deterministic = true + deterministic = false keyFound = true - } else { - tinkAead, ok = keySet.(tink.AEAD) - if ok { - deterministic = false - keyFound = true - } } } } @@ -924,7 +926,7 @@ func (b *backend) publishTelemetry(wg *sync.WaitGroup, ctx context.Context, req defer wg.Done() // retrive the config from storage - err := b.getAeadConfig(ctx, req) + err := b.getAeadConfig(ctx, req, true) if err != nil { return } @@ -1027,7 +1029,8 @@ func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.R go b.publishTelemetry(&wg, ctx, req, "encryptFarm", data.Raw) // retrive the config fro storage - err := b.getAeadConfig(ctx, req) + + err := b.getAeadConfig(ctx, req, true) if err != nil { return nil, err } @@ -1101,7 +1104,7 @@ func (b *backend) pathAeadDecryptBulkColFarm(ctx context.Context, req *logical.R go b.publishTelemetry(&wg, ctx, req, "decryptFarm", data.Raw) // retrive the config fro storage - err := b.getAeadConfig(ctx, req) + err := b.getAeadConfig(ctx, req, true) if err != nil { return nil, err } diff --git a/path_config.go b/path_config.go index 6360d3a..67e2785 100644 --- a/path_config.go +++ b/path_config.go @@ -133,7 +133,17 @@ func (b *backend) pathReadKeyTypes(ctx context.Context, req *logical.Request, da }, nil } -func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request) error { +func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request, b_optionalDirtyRead ...bool) error { + + dirtyRead := false + if len(b_optionalDirtyRead) > 0 { + dirtyRead = b_optionalDirtyRead[0] + } + + // if we are doing a dirty read and the config is not empty then return, don't bother re-reading + if dirtyRead && !AEAD_CONFIG.IsEmpty() { + return nil + } t := time.Now() consulConfig, err := b.readConsulConfig(ctx, req.Storage) From d2cf82ff7761b30a8d428d6e2e8f788be5c94f70 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Thu, 19 Jan 2023 23:15:38 +0000 Subject: [PATCH 14/27] extra debug --- path_config.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/path_config.go b/path_config.go index 67e2785..c34ba9e 100644 --- a/path_config.go +++ b/path_config.go @@ -5,6 +5,7 @@ import ( "context" b64 "encoding/base64" "fmt" + "strconv" "time" "github.com/google/tink/go/insecurecleartextkeyset" @@ -135,6 +136,8 @@ func (b *backend) pathReadKeyTypes(ctx context.Context, req *logical.Request, da func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request, b_optionalDirtyRead ...bool) error { + hclog.L().Info("getAeadConfig AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) + dirtyRead := false if len(b_optionalDirtyRead) > 0 { dirtyRead = b_optionalDirtyRead[0] @@ -725,6 +728,7 @@ func getEncryptionKey(fieldName string, setDepth ...int) (interface{}, bool) { func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logical.Request) (interface{}, []byte, error) { t := time.Now() + hclog.L().Info("getKeyAndAD AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) // set additionalDataBytes as field name of the right type additionalDataBytes := b.getAdditionalData(fieldName, AEAD_CONFIG) @@ -739,6 +743,7 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica hclog.L().Info("getKeyAndAD NOT FOUND KEY IN AEAD_KEYS for FIELD=" + fieldName + " time to read Consul=" + time.Since(t).String()) } + t = time.Now() encryptionkeyIntf, ok := getEncryptionKey(fieldName) @@ -751,23 +756,26 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica // we don't need the key handle which is returned first _, tinkDetAead, err := CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) if err != nil { - hclog.L().Error("Failed to create a keyhandle", err) + hclog.L().Error("getKeyAndAD Failed to create a keyhandle time="+time.Since(t).String(), err) return nil, nil, err } else { b.saveKeyObjectToConfig(fieldName, tinkDetAead, ctx, req) + hclog.L().Info("getKeyAndAD FOUND KEY IN CONFIG for FIELD=" + fieldName + " time to read Consul=" + time.Since(t).String()) return tinkDetAead, additionalDataBytes, nil } } else { _, tinkAead, err := CreateInsecureHandleAndAead(encryptionKeyStr) if err != nil { - hclog.L().Error("Failed to create a keyhandle", err) + hclog.L().Error("getKeyAndAD Failed to create a keyhandle time="+time.Since(t).String(), err) return nil, nil, err } else { b.saveKeyObjectToConfig(fieldName, tinkAead, ctx, req) + hclog.L().Info("getKeyAndAD FOUND KEY IN CONFIG for FIELD=" + fieldName + " time to read Consul=" + time.Since(t).String()) return tinkAead, additionalDataBytes, nil } } } + hclog.L().Error("getKeyAndAD Failed to find or create a key time=" + time.Since(t).String()) return nil, nil, nil } From a6a431e3981024b1a6351d35ec32b1c31be6467a Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Fri, 20 Jan 2023 09:27:15 +0000 Subject: [PATCH 15/27] extra logging and make sure config is read before try to get keys --- path_config.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/path_config.go b/path_config.go index c34ba9e..12895a3 100644 --- a/path_config.go +++ b/path_config.go @@ -136,7 +136,7 @@ func (b *backend) pathReadKeyTypes(ctx context.Context, req *logical.Request, da func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request, b_optionalDirtyRead ...bool) error { - hclog.L().Info("getAeadConfig AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) + hclog.L().Info("getAeadConfig start AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) dirtyRead := false if len(b_optionalDirtyRead) > 0 { @@ -167,6 +167,7 @@ func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request, b_opt AEAD_CONFIG.Remove(k) } } + hclog.L().Info("getAeadConfig end AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) return nil } @@ -730,6 +731,14 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica t := time.Now() hclog.L().Info("getKeyAndAD AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) + // retrive the config from storage with a dirty read + err := b.getAeadConfig(ctx, req, true) + if err != nil { + return nil, nil, err + } + hclog.L().Info("getKeyAndAD re-read config time to read =" + time.Since(t).String() + " AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) + t = time.Now() + // set additionalDataBytes as field name of the right type additionalDataBytes := b.getAdditionalData(fieldName, AEAD_CONFIG) @@ -737,10 +746,10 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica if ok { tinkKeySet, ok := AEAD_KEYS.Get(fieldName) if ok { - hclog.L().Info("getKeyAndAD FOUND KEY IN AEAD_KEYS for FIELD=" + fieldName + " time to read Consul=" + time.Since(t).String()) + hclog.L().Info("getKeyAndAD FOUND KEY IN AEAD_KEYS for FIELD=" + fieldName + " time to read =" + time.Since(t).String()) return tinkKeySet, additionalDataBytes, nil } - hclog.L().Info("getKeyAndAD NOT FOUND KEY IN AEAD_KEYS for FIELD=" + fieldName + " time to read Consul=" + time.Since(t).String()) + hclog.L().Info("getKeyAndAD NOT FOUND KEY IN AEAD_KEYS for FIELD=" + fieldName + " time to read =" + time.Since(t).String()) } t = time.Now() From d47769d489d965e325fe76a97f9ffb32a39e875c Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Sat, 4 Feb 2023 19:26:19 +0000 Subject: [PATCH 16/27] experimentl add of opentelemetry --- go.mod | 9 ++- go.sum | 15 +++++ path_aead.go | 118 +++++++++++++++++++++++++++++--- path_config.go | 180 ++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 307 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index d37a95d..a30f1c9 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,10 @@ require ( github.com/orcaman/concurrent-map v1.0.0 github.com/pkg/errors v0.9.1 github.com/shirou/gopsutil v3.21.11+incompatible - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.1 + go.opentelemetry.io/otel v1.12.0 + go.opentelemetry.io/otel/exporters/jaeger v1.12.0 + go.opentelemetry.io/otel/sdk v1.12.0 golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 k8s.io/apimachinery v0.25.3 @@ -43,6 +46,7 @@ require ( github.com/fatih/color v1.13.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect @@ -102,12 +106,13 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/objx v0.4.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/tklauser/numcpus v0.5.0 // indirect github.com/ugorji/go/codec v1.2.7 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect go.opencensus.io v0.23.0 // indirect + go.opentelemetry.io/otel/trace v1.12.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.0.0-20221012134737-56aed061732a // indirect golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect diff --git a/go.sum b/go.sum index ce41f98..909e6dd 100644 --- a/go.sum +++ b/go.sum @@ -191,8 +191,11 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7 github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -604,6 +607,8 @@ github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -615,6 +620,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= @@ -648,6 +655,14 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/otel v1.12.0 h1:IgfC7kqQrRccIKuB7Cl+SRUmsKbEwSGPr0Eu+/ht1SQ= +go.opentelemetry.io/otel v1.12.0/go.mod h1:geaoz0L0r1BEOR81k7/n9W4TCXYCJ7bPO7K374jQHG0= +go.opentelemetry.io/otel/exporters/jaeger v1.12.0 h1:1Vy11S0iAD70EPfcP3N2f2IhLq/cIuTW+Zt010MswR8= +go.opentelemetry.io/otel/exporters/jaeger v1.12.0/go.mod h1:SCLbaspEoU9mGJZB6ksc2iSGU6CLWY5yefchDqOM0IM= +go.opentelemetry.io/otel/sdk v1.12.0 h1:8npliVYV7qc0t1FKdpU08eMnOjgPFMnriPhn0HH4q3o= +go.opentelemetry.io/otel/sdk v1.12.0/go.mod h1:WYcvtgquYvgODEvxOry5owO2y9MyciW7JqMz6cpXShE= +go.opentelemetry.io/otel/trace v1.12.0 h1:p28in++7Kd0r2d8gSt931O57fdjUyWxkVbESuILAeUc= +go.opentelemetry.io/otel/trace v1.12.0/go.mod h1:pHlgBynn6s25qJ2szD+Bv+iwKJttjHSI3lUAyf0GNuQ= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= diff --git a/path_aead.go b/path_aead.go index 4379176..a721014 100644 --- a/path_aead.go +++ b/path_aead.go @@ -11,6 +11,7 @@ import ( "cloud.google.com/go/pubsub" hclog "github.com/hashicorp/go-hclog" + "go.opentelemetry.io/otel" b64 "encoding/base64" "encoding/json" @@ -23,6 +24,17 @@ import ( func (b *backend) pathAeadEncrypt(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathAeadEncrypt-tracer") + + ctx, span := tr.Start(ctx, "pathAeadEncrypt") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() + /* what is data.Raw @@ -106,6 +118,10 @@ func (b *backend) pathAeadEncrypt(ctx context.Context, req *logical.Request, dat func (b *backend) encryptRowChan(ctx context.Context, req *logical.Request, data *framework.FieldData, row string, ch chan map[string]interface{}) { + tr := otel.Tracer("component-encryptRowChan") + _, span := tr.Start(ctx, "encryptRowChan") + defer span.End() + // this is just a wrapper around the pathAeadEncryptRow methos so that it can be used concurrently in a channel resp, err := b.encryptRow(ctx, req, data) if err != nil { @@ -121,6 +137,10 @@ func (b *backend) encryptRowChan(ctx context.Context, req *logical.Request, data func (b *backend) decryptRowChan(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string, ch chan map[string]interface{}) { + tr := otel.Tracer("component-decryptRowChan") + _, span := tr.Start(ctx, "decryptRowChan") + defer span.End() + // this is just a wrapper around the pathAeadDecryptRow methos so that it can be used concurrently in a channel resp, err := b.pathAeadDecrypt(ctx, req, data) if err != nil { @@ -136,6 +156,10 @@ func (b *backend) decryptRowChan(ctx context.Context, req *logical.Request, data func (b *backend) encryptRow(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + tr := otel.Tracer("component-encryptRow") + _, span := tr.Start(ctx, "encryptRow") + defer span.End() + // retrive the config fro storage // AS Optimisation // err := b.getAeadConfig(ctx, req) @@ -176,6 +200,11 @@ func (b *backend) encryptRow(ctx context.Context, req *logical.Request, data *fr } func (b *backend) doEncryptionChan(fieldName string, unencryptedData interface{}, data *framework.FieldData, ctx context.Context, req *logical.Request, ch chan map[string]interface{}) { + + tr := otel.Tracer("component-doEncryptionChan") + _, span := tr.Start(ctx, "doEncryptionChan") + defer span.End() + resp := make(map[string]interface{}) var tinkDetAead tink.DeterministicAEAD var tinkAead tink.AEAD @@ -278,6 +307,17 @@ func (b *backend) doEncryptionChan(fieldName string, unencryptedData interface{} func (b *backend) pathAeadDecrypt(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathAeadDecrypt-tracer") + + ctx, span := tr.Start(ctx, "pathAeadDEcrypt") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() + // what is data.Raw // // is this a bulk file: ie a map of map[string]map[string]interface{} where the second map is the row to be decrypted @@ -346,12 +386,10 @@ func (b *backend) pathAeadDecrypt(ctx context.Context, req *logical.Request, dat } func (b *backend) decryptRow(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { - // retrive the config from storage - // AS Optimisation - // err := b.getAeadConfig(ctx, req) - // if err != nil { - // return nil, err - // } + + tr := otel.Tracer("component-decryptRow") + _, span := tr.Start(ctx, "decryptRow") + defer span.End() resp := make(map[string]interface{}) channel := make(chan map[string]interface{}, len(data.Raw)) @@ -377,6 +415,10 @@ func (b *backend) decryptRow(ctx context.Context, req *logical.Request, data *fr func (b *backend) doDecryptionChan(fieldName string, encryptedDataBase64 interface{}, data *framework.FieldData, ctx context.Context, req *logical.Request, ch chan map[string]interface{}) { + tr := otel.Tracer("component-doDecryptionChan") + _, span := tr.Start(ctx, "doDecryptionChan") + defer span.End() + resp := make(map[string]interface{}) var tinkDetAead tink.DeterministicAEAD var tinkAead tink.AEAD @@ -480,7 +522,16 @@ func (b *backend) doDecryptionChan(fieldName string, encryptedDataBase64 interfa } func (b *backend) pathAeadEncryptBulkCol(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { - + initialiseOpenTel() + tr := tp.Tracer("pathAeadEncryptBulkCol-tracer") + + ctx, span := tr.Start(ctx, "pathAeadEncryptBulkCol") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() /* what is data.Raw @@ -567,6 +618,10 @@ func (b *backend) pathAeadEncryptBulkCol(ctx context.Context, req *logical.Reque func (b *backend) encryptColChan(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string, ch chan map[string]interface{}) { + tr := otel.Tracer("component-encryptColChan") + _, span := tr.Start(ctx, "encryptColChan") + defer span.End() + // this is just a wrapper around the pathAeadEncryptRow methos so that it can be used concurrently in a channel resp, err := b.encryptCol(ctx, req, data, fieldName) if err != nil { @@ -582,6 +637,10 @@ func (b *backend) encryptColChan(ctx context.Context, req *logical.Request, data func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string) (*logical.Response, error) { + tr := otel.Tracer("component-encryptCol") + _, span := tr.Start(ctx, "encryptCol") + defer span.End() + resp := make(map[string]interface{}) var tinkDetAead tink.DeterministicAEAD var tinkAead tink.AEAD @@ -700,7 +759,16 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr } func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { - + initialiseOpenTel() + tr := tp.Tracer("pathAeadDecryptBulkCol-tracer") + + ctx, span := tr.Start(ctx, "pathAeadDecryptBulkCol") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // what is data.Raw // // is this a bulk file: ie a map of map[string]map[string]interface{} where the second map is the row to be decrypted @@ -779,6 +847,10 @@ func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Reque func (b *backend) decryptColChan(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string, ch chan map[string]interface{}) { + tr := otel.Tracer("component-decryptColChan") + _, span := tr.Start(ctx, "decryptColChan") + defer span.End() + // this is just a wrapper around the pathAeadDecryptRow methos so that it can be used concurrently in a channel resp, err := b.decryptCol(ctx, req, data, fieldName) if err != nil { @@ -794,6 +866,10 @@ func (b *backend) decryptColChan(ctx context.Context, req *logical.Request, data func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string) (*logical.Response, error) { + tr := otel.Tracer("component-decryptCol") + _, span := tr.Start(ctx, "decryptCol") + defer span.End() + resp := make(map[string]interface{}) var tinkDetAead tink.DeterministicAEAD var tinkAead tink.AEAD @@ -923,6 +999,10 @@ func isBulkData(data map[string]interface{}) (bool, error) { func (b *backend) publishTelemetry(wg *sync.WaitGroup, ctx context.Context, req *logical.Request, encryptOrDecrypt string, data map[string]interface{}) { + tr := otel.Tracer("component-publishTelemetry") + _, span := tr.Start(ctx, "publishTelemetry") + defer span.End() + defer wg.Done() // retrive the config from storage @@ -1022,7 +1102,16 @@ func (b *backend) publishTelemetry(wg *sync.WaitGroup, ctx context.Context, req //*********************************************** func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { - + initialiseOpenTel() + tr := tp.Tracer("pathAeadEncryptBulkColFarm-tracer") + + ctx, span := tr.Start(ctx, "pathAeadEncryptBulkColFarm") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // fire and forget the telemetry var wg sync.WaitGroup wg.Add(1) @@ -1097,7 +1186,16 @@ func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.R } func (b *backend) pathAeadDecryptBulkColFarm(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { - + initialiseOpenTel() + tr := tp.Tracer("pathAeadDecryptBulkColFarm-tracer") + + ctx, span := tr.Start(ctx, "pathAeadDecryptBulkColFarm") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // fire and forget the telemetry var wg sync.WaitGroup wg.Add(1) diff --git a/path_config.go b/path_config.go index 12895a3..e3cb9f7 100644 --- a/path_config.go +++ b/path_config.go @@ -14,19 +14,42 @@ import ( "github.com/hashicorp/vault/sdk/framework" "github.com/hashicorp/vault/sdk/logical" cmap "github.com/orcaman/concurrent-map" + "go.opentelemetry.io/otel" ) var AEAD_CONFIG = cmap.New() var AEAD_KEYS = cmap.New() func (b *backend) pathConfigWrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathConfigWrite-tracer") + + ctx, span := tr.Start(ctx, "pathConfigWrite") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() return b.configWriteOverwriteCheck(ctx, req, data, false) } func (b *backend) pathConfigOverwrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { - return b.configWriteOverwriteCheck(ctx, req, data, true) + initialiseOpenTel() + tr := tp.Tracer("pathConfigOverwrite-tracer") + ctx, span := tr.Start(ctx, "pathConfigOverwrite") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() + return b.configWriteOverwriteCheck(ctx, req, data, true) } func (b *backend) configWriteOverwriteCheck(ctx context.Context, req *logical.Request, data *framework.FieldData, overwrite bool) (*logical.Response, error) { + tr := otel.Tracer("component-configWriteOverwriteCheck") + _, span := tr.Start(ctx, "configWriteOverwriteCheck") + defer span.End() // retrive the config from storage err := b.getAeadConfig(ctx, req) @@ -61,7 +84,16 @@ func (b *backend) configWriteOverwriteCheck(ctx context.Context, req *logical.Re } func (b *backend) pathConfigDelete(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathConfigDelete-tracer") + ctx, span := tr.Start(ctx, "pathConfigDelete") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // retrive the config from storage err := b.getAeadConfig(ctx, req) if err != nil { @@ -92,7 +124,16 @@ func (b *backend) pathConfigDelete(ctx context.Context, req *logical.Request, da } func (b *backend) pathConfigRead(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathConfigRead-tracer") + ctx, span := tr.Start(ctx, "pathConfigRead") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // retrive the config from storage err := b.getAeadConfig(ctx, req) if err != nil { @@ -111,7 +152,16 @@ func (b *backend) pathConfigRead(ctx context.Context, req *logical.Request, data } func (b *backend) pathReadKeyTypes(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathReadKeyTypes-tracer") + ctx, span := tr.Start(ctx, "pathReadKeyTypes") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // retrive the config from storage err := b.getAeadConfig(ctx, req) if err != nil { @@ -135,6 +185,9 @@ func (b *backend) pathReadKeyTypes(ctx context.Context, req *logical.Request, da } func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request, b_optionalDirtyRead ...bool) error { + tr := otel.Tracer("component-getAeadConfig") + _, span := tr.Start(ctx, "getAeadConfig") + defer span.End() hclog.L().Info("getAeadConfig start AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) @@ -173,6 +226,9 @@ func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request, b_opt } func (b *backend) readConsulConfig(ctx context.Context, s logical.Storage) (map[string]interface{}, error) { + tr := otel.Tracer("component-readConsulConfig") + _, span := tr.Start(ctx, "readConsulConfig") + defer span.End() consulConfig := make(map[string]interface{}) entry, err := s.Get(ctx, "config") @@ -191,7 +247,16 @@ func (b *backend) readConsulConfig(ctx context.Context, s logical.Storage) (map[ } func (b *backend) pathKeyRotate(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathKeyRotate-tracer") + ctx, span := tr.Start(ctx, "pathKeyRotate") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // retrive the config from storage err := b.getAeadConfig(ctx, req) if err != nil { @@ -243,7 +308,16 @@ func (b *backend) pathKeyRotate(ctx context.Context, req *logical.Request, data } func (b *backend) pathUpdateKeyStatus(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathUpdateKeyStatus-tracer") + ctx, span := tr.Start(ctx, "pathUpdateKeyStatus") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // data.Raw is map[string]map[string]string // map['field0':map['key':'status']] // retrive the config from storage @@ -306,7 +380,16 @@ func (b *backend) pathUpdateKeyStatus(ctx context.Context, req *logical.Request, }, nil } func (b *backend) pathUpdateKeyMaterial(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathUpdateKeyMaterial-tracer") + ctx, span := tr.Start(ctx, "pathUpdateKeyMaterial") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // data.Raw is map[string]map[string]string // map['field0':map['key':'material']] // retrive the config from storage @@ -368,7 +451,16 @@ func (b *backend) pathUpdateKeyMaterial(ctx context.Context, req *logical.Reques }, nil } func (b *backend) pathUpdatePrimaryKeyID(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathUpdatePrimaryKeyID-tracer") + ctx, span := tr.Start(ctx, "pathUpdatePrimaryKeyID") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // data.Raw is map[string]string // map['field0':'primaryKey']] // retrive the config from storage @@ -428,7 +520,16 @@ func (b *backend) pathUpdatePrimaryKeyID(ctx context.Context, req *logical.Reque }, nil } func (b *backend) pathUpdateKeyID(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathUpdateKeyID-tracer") + ctx, span := tr.Start(ctx, "pathUpdateKeyID") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // data.Raw is map[string]map[string]string // map['field0':map['key':'newkey']] // retrive the config from storage @@ -490,7 +591,16 @@ func (b *backend) pathUpdateKeyID(ctx context.Context, req *logical.Request, dat }, nil } func (b *backend) pathImportKey(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathImportKey-tracer") + ctx, span := tr.Start(ctx, "pathImportKey") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() // data.Raw should be map[string]interface{} for _, v := range data.Raw { // k is the field of the key @@ -520,14 +630,37 @@ func (b *backend) pathImportKey(ctx context.Context, req *logical.Request, data } func (b *backend) pathAeadCreateDeterministicKeys(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathAeadCreateDeterministicKeys-tracer") + + ctx, span := tr.Start(ctx, "pathAeadCreateDeterministicKeys") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() return b.createDeterministicKeysOverwriteCheck(ctx, req, data, false) } func (b *backend) pathAeadCreateDeterministicKeysOverwrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathAeadCreateDeterministicKeysOverwrite-tracer") + + ctx, span := tr.Start(ctx, "pathAeadCreateDeterministicKeysOverwrite") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() return b.createDeterministicKeysOverwriteCheck(ctx, req, data, true) } func (b *backend) createDeterministicKeysOverwriteCheck(ctx context.Context, req *logical.Request, data *framework.FieldData, overwrite bool) (*logical.Response, error) { + tr := otel.Tracer("component-createDeterministicKeysOverwriteCheck") + _, span := tr.Start(ctx, "createDeterministicKeysOverwriteCheck") + defer span.End() // retrive the config from storage err := b.getAeadConfig(ctx, req) @@ -584,15 +717,39 @@ func (b *backend) createDeterministicKeysOverwriteCheck(ctx context.Context, req }, nil } func (b *backend) pathAeadCreateNonDeterministicKeys(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathAeadCreateNonDeterministicKeys-tracer") + + ctx, span := tr.Start(ctx, "pathAeadCreateNonDeterministicKeys") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() return b.createNonDeterministicKeysOverwriteCheck(ctx, req, data, false) } func (b *backend) pathAeadCreateNonDeterministicKeysOverwrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + initialiseOpenTel() + tr := tp.Tracer("pathAeadCreateNonDeterministicKeysOverwrite-tracer") + + ctx, span := tr.Start(ctx, "pathAeadCreateNonDeterministicKeysOverwrite") + defer func() { + span.End() + if err := tp.Shutdown(ctx); err != nil { + hclog.L().Error("Failed to shutdown tracerProvider", err) + } + }() return b.createNonDeterministicKeysOverwriteCheck(ctx, req, data, true) } func (b *backend) createNonDeterministicKeysOverwriteCheck(ctx context.Context, req *logical.Request, data *framework.FieldData, overwrite bool) (*logical.Response, error) { + tr := otel.Tracer("component-createNonDeterministicKeysOverwriteCheck") + _, span := tr.Start(ctx, "createNonDeterministicKeysOverwriteCheck") + defer span.End() + // retrive the config from storage err := b.getAeadConfig(ctx, req) if err != nil { @@ -650,6 +807,10 @@ func (b *backend) createNonDeterministicKeysOverwriteCheck(ctx context.Context, func (b *backend) saveKeyToConfig(keysetHandle *keyset.Handle, fieldName string, ctx context.Context, req *logical.Request, overwrite bool) { + tr := otel.Tracer("component-saveKeyToConfig") + _, span := tr.Start(ctx, "saveKeyToConfig") + defer span.End() + // retrive the config from storage err := b.getAeadConfig(ctx, req) if err != nil { @@ -689,7 +850,11 @@ func (b *backend) saveKeyToConfig(keysetHandle *keyset.Handle, fieldName string, } } -func (b *backend) getAdditionalData(fieldName string, config cmap.ConcurrentMap) []byte { +func (b *backend) getAdditionalData(ctx context.Context, fieldName string, config cmap.ConcurrentMap) []byte { + + tr := otel.Tracer("component-getAdditionalData") + _, span := tr.Start(ctx, "getAdditionalData") + defer span.End() // set additionalDataBytes as field name of the right type aad, ok := AEAD_CONFIG.Get("ADDITIONAL_DATA_" + fieldName) @@ -728,6 +893,10 @@ func getEncryptionKey(fieldName string, setDepth ...int) (interface{}, bool) { func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logical.Request) (interface{}, []byte, error) { + tr := otel.Tracer("component-getKeyAndAD") + _, span := tr.Start(ctx, "getKeyAndAD") + defer span.End() + t := time.Now() hclog.L().Info("getKeyAndAD AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) @@ -740,7 +909,7 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica t = time.Now() // set additionalDataBytes as field name of the right type - additionalDataBytes := b.getAdditionalData(fieldName, AEAD_CONFIG) + additionalDataBytes := b.getAdditionalData(ctx, fieldName, AEAD_CONFIG) _, ok := AEAD_CONFIG.Get("DIRTY_READ_KEYS") if ok { @@ -789,5 +958,10 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica } func (b *backend) saveKeyObjectToConfig(fieldName string, keyObj interface{}, ctx context.Context, req *logical.Request) { + + tr := otel.Tracer("component-saveKeyObjectToConfig") + _, span := tr.Start(ctx, "saveKeyObjectToConfig") + defer span.End() + AEAD_KEYS.Set(fieldName, keyObj) } From 71dc4a8609c4b70420bb2e52a72d5d20773da9ae Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Sun, 5 Feb 2023 09:48:54 +0000 Subject: [PATCH 17/27] mod tidy and add missing opentelemetry.go --- go.mod | 9 - go.sum | 431 ++++++++++++++++++++++++++++++----------------- opentelemetry.go | 120 +++++++++++++ 3 files changed, 394 insertions(+), 166 deletions(-) create mode 100644 opentelemetry.go diff --git a/go.mod b/go.mod index a30f1c9..f15876b 100644 --- a/go.mod +++ b/go.mod @@ -35,8 +35,6 @@ require ( require ( cloud.google.com/go/compute v1.10.0 // indirect cloud.google.com/go/iam v0.5.0 // indirect - github.com/PuerkitoBio/purell v1.2.0 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/armon/go-radix v1.0.0 // indirect github.com/cenkalti/backoff/v3 v3.2.2 // indirect @@ -65,11 +63,9 @@ require ( github.com/google/gofuzz v1.2.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect github.com/googleapis/gax-go/v2 v2.6.0 // indirect - github.com/googleapis/gnostic v0.5.5 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-kms-wrapping/entropy v0.1.0 // indirect github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.4.5 // indirect @@ -86,7 +82,6 @@ require ( github.com/imdario/mergo v0.3.13 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/jstemmer/go-junit-report v1.0.0 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/matryer/is v1.4.0 // indirect @@ -106,7 +101,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/objx v0.5.0 // indirect github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/tklauser/numcpus v0.5.0 // indirect github.com/ugorji/go/codec v1.2.7 // indirect @@ -115,15 +109,12 @@ require ( go.opentelemetry.io/otel/trace v1.12.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.0.0-20221012134737-56aed061732a // indirect - golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect golang.org/x/net v0.0.0-20221019024206-cb67ada4b0ad // indirect golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.1.0 // indirect golang.org/x/term v0.0.0-20221017184919-83659145692c // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.1.0 // indirect - golang.org/x/tools v0.1.12 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.100.0 // indirect google.golang.org/appengine v1.6.7 // indirect diff --git a/go.sum b/go.sum index 909e6dd..7799719 100644 --- a/go.sum +++ b/go.sum @@ -17,7 +17,6 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= @@ -29,48 +28,171 @@ cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Ud cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0 h1:gSmWO7DY1vOm0MVU6DNXM11BWHHsTUmsC5cv1fuW5X8= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0 h1:JuTk8po4bCKRwObdT0zLb1K0BGkGHJdtgs2GK3j2Gws= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0 h1:aoLIYaA1fX3ywihqpBk2APQKOo20nXsp1GEZQbx5Jk4= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0 h1:xzXGAE2fAuMh+ksODKr9nRv9ega1vHjFwRqMA8tRrVE= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0 h1:fz9X5zyTWBmamZsqvqZqD7khbifcZF/q+Z1J8pfhIUg= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/kms v1.4.0 h1:iElbfoE61VeLhnZcGOltqL8HIly8Nhbe5t6JlH9GXjo= cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/pubsub v1.25.1 h1:l0wCNZKuEp2Q54wAy8283EV9O57+7biWOXnnU2/Tq/A= cloud.google.com/go/pubsub v1.25.1/go.mod h1:bY6l7rF8kCcwz6V3RaQ6kK4p5g7qc7PqjRoE9wDOqOU= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0 h1:wWRIaDURQA8xxHguFCshYepGlrWIrbBnAmc7wfg07qY= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -79,25 +201,21 @@ github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= -github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.9 h1:O2sNqxBdvq8Eq5xmzljcYzAORli6RWCvEym4cJf9m18= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.36.29/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.43.9/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= @@ -105,12 +223,9 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bozaro/golorem v0.0.0-20170501165920-50e5b610280b h1:D3YtkBLwtjFPegR4lwiwoCiV+f7bOq/MDh6Xi+nEq3Q= github.com/bozaro/golorem v0.0.0-20170501165920-50e5b610280b/go.mod h1:gqvWc1EBvN2S3BBwczsP6n4MFQzpHRffNXxK2pebPPA= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/cenkalti/backoff/v3 v3.0.0 h1:ske+9nBpD9qZsTBoF41nW5L+AIuFBKMeze18XQ3eG1c= github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= -github.com/cenkalti/backoff/v4 v4.1.2 h1:6Yo7N8UP2K6LWZnW94DLVSSrbobcWdVzAYOisuDPIFo= -github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -129,6 +244,7 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -136,8 +252,7 @@ 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/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -148,28 +263,23 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.5.0 h1:bAmFiUJ+o0o2B4OiTFeE3MqCOtyo+jjPP9iZ0VRxYUc= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= github.com/frankban/quicktest v1.13.0 h1:yNZif1OkDfNoDfb9zZa9aXIpejNR4F23Wely0c+Qdqk= github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -183,13 +293,11 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= 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-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= 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-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= @@ -215,21 +323,21 @@ github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -263,13 +371,13 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/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/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -285,6 +393,7 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github/v47 v47.1.1-0.20220927202716-0c3cd12a1e6d h1:RPZ3J6bMtepvxwUdKLw+BSP9JOFAg4+I0BV8pYi0jqw= @@ -292,14 +401,12 @@ github.com/google/go-github/v47 v47.1.1-0.20220927202716-0c3cd12a1e6d/go.mod h1: github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0 h1:wCKgOCHuUEVfsaQLpPSJb7VdYCdTVZQAuOdYm1yc/60= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= @@ -314,30 +421,32 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/tink/go v1.6.1 h1:t7JHqO8Ath2w2ig5vjwQYJzhGEZymedQc90lQXUBa4I= -github.com/google/tink/go v1.6.1/go.mod h1:IGW53kTgag+st5yPhKKwJ6u2l+SSp5/v9XF7spovjlY= github.com/google/tink/go v1.7.0 h1:6Eox8zONGebBFcCBqkVmt60LaWZa6xg1cl/DwAh/J1w= github.com/google/tink/go v1.7.0/go.mod h1:GAUOd+QE3pgj9q8VKIGTCP33c/B7eb4NhxLcgTJZStM= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0 h1:SXk3ABtQYDT/OH8jAyvEOQ58mgawq5C4o/4/89qN2ZU= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= -github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= +github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= @@ -349,13 +458,9 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= -github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.1.0 h1:QsGcniKx5/LuX2eYoeL+Np3UKYPNaN7YKpTh29h8rbw= -github.com/hashicorp/go-hclog v1.1.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.3.1 h1:vDwF1DFNZhntP4DAjuTpOw3uEgMUpXh1pB5fW9DqHpo= github.com/hashicorp/go-hclog v1.3.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -368,31 +473,24 @@ github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0/go.mod h1:xvb32K2keAc+R8D github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= -github.com/hashicorp/go-plugin v1.4.3 h1:DXmvivbWD5qdiBts9TpBC7BYL1Aia5sxbRgQB+v6UZM= github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= github.com/hashicorp/go-plugin v1.4.5 h1:oTE/oQR4eghggRg8VY7PAz3dr++VwDNBGCcOfIvHpBo= github.com/hashicorp/go-plugin v1.4.5/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.6.6 h1:HJunrbHTDDbBb/ay4kxa1n+dLmttUlnP3V9oNE4hmsM= github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= -github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 h1:cCRo8gK7oq6A2L6LICkUZ+/a5rLiRXFMf1Qd4xSwxTc= github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 h1:p4AKXPPS24tO8Wc8i1gLvSKdmkiSY5xuju57czJ/IJQ= github.com/hashicorp/go-secure-stdlib/mlock v0.1.2/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= -github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 h1:78ki3QBevHwYrVxnyVeaEz+7WtifHhauYF23es/0KlI= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7 h1:UpiO20jno/eV1eVZcxqWnUohyKRe1g8FPV/xH1s/2qs= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo= -github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 h1:nd0HIW15E6FG1MsnArYaHfuw9C2zgzM8LxkG5Ty/788= github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= @@ -400,13 +498,9 @@ github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+Er github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= 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-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -416,26 +510,19 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= -github.com/hashicorp/vault/api v1.3.1 h1:pkDkcgTh47PRjY1NEFeofqR4W/HkNUi9qIakESO2aRM= -github.com/hashicorp/vault/api v1.3.1/go.mod h1:QeJoWxMFt+MsuWcYhmwRLwKEXrjwAFFywzhptMsTIUw= +github.com/hashicorp/vault/api v1.4.1/go.mod h1:LkMdrZnWNrFaQyYYazWVn7KshilfDidgVBq6YiTq/bM= github.com/hashicorp/vault/api v1.8.1 h1:bMieWIe6dAlqAAPReZO/8zYtXaWUg/21umwqGZpEjCI= github.com/hashicorp/vault/api v1.8.1/go.mod h1:uJrw6D3y9Rv7hhmS17JQC50jbPDAZdjZoTtrCCxxs7E= -github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= -github.com/hashicorp/vault/sdk v0.3.0 h1:kR3dpxNkhh/wr6ycaJYqp6AFT/i2xaftbfnwZduTKEY= -github.com/hashicorp/vault/sdk v0.3.0/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0= +github.com/hashicorp/vault/sdk v0.4.1/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0= github.com/hashicorp/vault/sdk v0.6.0 h1:6Z+In5DXHiUfZvIZdMx7e2loL1PPyDjA4bVh9ZTIAhs= github.com/hashicorp/vault/sdk v0.6.0/go.mod h1:+DRpzoXIdMvKc88R4qxr+edwy/RvH5QK8itmxLiDHLc= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ= -github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -450,10 +537,7 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jstemmer/go-junit-report v1.0.0 h1:8X1gzZpR+nVQLAht+L/foqOeX2l9DTZoaIPbEQHxsds= -github.com/jstemmer/go-junit-report v1.0.0/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -481,7 +565,6 @@ github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= @@ -490,33 +573,27 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= @@ -534,33 +611,33 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= +github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= +github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/orcaman/concurrent-map v1.0.0 h1:I/2A2XPCb4IuQWcQhBhSwGfiuybl/J0ev9HDbW65HOY= github.com/orcaman/concurrent-map v1.0.0/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -603,9 +680,6 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= 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/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -615,19 +689,13 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= -github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= -github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tklauser/numcpus v0.5.0 h1:ooe7gN0fg6myJ0EKoTAf5hebTZrH52px3New/D9iJ+A= github.com/tklauser/numcpus v0.5.0/go.mod h1:OGzpTxpcIMNGYQdit2BYL1pvk/dSOaJWjKoflh+RQjo= @@ -644,7 +712,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -664,7 +733,6 @@ go.opentelemetry.io/otel/sdk v1.12.0/go.mod h1:WYcvtgquYvgODEvxOry5owO2y9MyciW7J go.opentelemetry.io/otel/trace v1.12.0 h1:p28in++7Kd0r2d8gSt931O57fdjUyWxkVbESuILAeUc= go.opentelemetry.io/otel/trace v1.12.0/go.mod h1:pHlgBynn6s25qJ2szD+Bv+iwKJttjHSI3lUAyf0GNuQ= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= @@ -674,11 +742,12 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20221012134737-56aed061732a h1:NmSIgad6KjE6VvHciPZuNRTKxGhlPfD6OA87W/PLkqg= golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -703,9 +772,7 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -717,8 +784,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -760,12 +827,22 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221019024206-cb67ada4b0ad h1:Zx6wVVDwwNJFWXNIvDi7o952w3/1ckSwYk/7eykRmjM= golang.org/x/net v0.0.0-20221019024206-cb67ada4b0ad/go.mod h1:RpDiru2p0u2F0lLpEoqnP2+7xs0ifAuOcJ442g6GU2s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -782,9 +859,15 @@ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -797,8 +880,10 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -806,11 +891,9 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h 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-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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= @@ -823,7 +906,6 @@ golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -839,7 +921,6 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -847,6 +928,7 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -861,39 +943,45 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220111092808-5a964db01320 h1:0jf+tOCoZ3LyutmCOWpVni1chK4VfFLhRsDK7MhqGRY= -golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20221017184919-83659145692c h1:dveknrit5futqEmXAvd2I1BbZIDhxRijsyWHM86NlcA= golang.org/x/term v0.0.0-20221017184919-83659145692c/go.mod h1:VTIZ7TEbF0BS9Sv9lPTvGbtW8i4z6GGbJBCM37uMCzY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= @@ -901,8 +989,8 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -951,6 +1039,7 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -959,15 +1048,15 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff h1:VX/uD7MK0AHXGiScH3fsieUQUcpmRERPDYtqZdJnA+Q= -golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -986,12 +1075,10 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.32.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0 h1:4sAyIHT6ZohtAQDoxws+ez7bROYmUlOVvsUscYCDTqA= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= @@ -1005,6 +1092,20 @@ google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3h google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0 h1:LGUYIrbW9pzYQQ8NWXlaIVkgnfubVBZbMFb9P8TK374= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -1018,7 +1119,6 @@ google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 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-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/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-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1057,7 +1157,7 @@ google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1 h1:E7wSQBXkH3T3diucK+9Z1kjn4+/9tNG7lZLr75oOhh8= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= @@ -1084,14 +1184,47 @@ google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 h1:U1u4KB2kx6KR/aJDjQ97hZ15wQs8ZPvDcGcRynBhkvg= google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55/go.mod h1:45EK0dUbEZ2NHjCeAd2LXmyjAgGUGrpGROgjhC3ADck= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1115,9 +1248,15 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E= google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1134,12 +1273,10 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1150,12 +1287,9 @@ 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/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1168,7 +1302,6 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= @@ -1180,52 +1313,36 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.23.4 h1:85gnfXQOWbJa1SiWGpE9EEtHs0UVvDyIsSMpEtl2D4E= -k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ= k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI= -k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM= -k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= -k8s.io/client-go v0.23.4 h1:YVWvPeerA2gpUudLelvsolzH7c2sFoXXR5wM/sWqNFU= -k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0= k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA= -k8s.io/code-generator v0.23.4/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= +k8s.io/code-generator v0.25.3/go.mod h1:9F5fuVZOMWRme7MYj2YT3L9ropPWPokd9VRhVyD3+0w= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= -k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/metrics v0.23.4 h1:99+9V/J1PuCqwvYFiuiuZcDImTx4SfFFiwsIB0ZTqUQ= -k8s.io/metrics v0.23.4/go.mod h1:cl6sY9BdVT3DubbpqnkPIKi6mn/F2ltkU4yH1tEJ3Bo= k8s.io/metrics v0.25.3 h1:fp5RuALkbwI3UbKITdNYu6sa3LF4JPANR/ofq3oe+Fg= k8s.io/metrics v0.25.3/go.mod h1:5j5FKJb8RHsb3Q2PLsD/p1mLiA1fTrl+a62Les+KDhc= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20211116205334-6203023598ed h1:ck1fRPWPJWsMd8ZRFsWc6mh/zHp5fZ/shhbrgPUxDAE= -k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 h1:cTdVh7LYu82xeClmfzGtgyspNh6UxpwLWGi8R4sspNo= k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 h1:fD1pz4yfdADVNfFmcP2aBEtudwUQ1AlLnRBALr33v3s= -sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= -sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/opentelemetry.go b/opentelemetry.go new file mode 100644 index 0000000..d7d90d9 --- /dev/null +++ b/opentelemetry.go @@ -0,0 +1,120 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Command jaeger is an example program that creates spans +// and uploads to Jaeger. +package aeadplugin + +import ( + "log" + + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/exporters/jaeger" + "go.opentelemetry.io/otel/sdk/resource" + tracesdk "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.17.0" +) + +const ( + service = "jaeger-test-trace-service" + environment = "production" + id = 1 +) + +var tp *tracesdk.TracerProvider + +// tracerProvider returns an OpenTelemetry TracerProvider configured to use +// the Jaeger exporter that will send spans to the provided url. The returned +// TracerProvider will also use a Resource configured with all the information +// about the application. +func tracerProvider(url string) (*tracesdk.TracerProvider, error) { + // Create the Jaeger exporter + exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(url))) + if err != nil { + return nil, err + } + tp := tracesdk.NewTracerProvider( + // Always be sure to batch in production. + tracesdk.WithBatcher(exp), + // Record information about this application in a Resource. + tracesdk.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String(service), + attribute.String("environment", environment), + attribute.Int64("ID", id), + )), + ) + return tp, nil +} + +func initialiseOpenTel() { + var tperr error + if tp == nil { + tp, tperr = tracerProvider("http://jaeger-collector.jaeger.svc.cluster.local:14268/api/traces") + if tperr != nil { + log.Fatal(tperr) + } + + // Register our TracerProvider as the global so any imported + // instrumentation in the future will default to using it. + otel.SetTracerProvider(tp) + } +} + +// func main() { +// initialiseOpenTel() + +// // ctx, cancel := context.WithCancel(context.Background()) +// // defer cancel() + +// // // Cleanly shutdown and flush telemetry when the application exits. +// // defer func(ctx context.Context) { +// // // Do not make the application hang when it is shutdown. +// // ctx, cancel = context.WithTimeout(ctx, time.Second*5) +// // defer cancel() +// // if err := tp.Shutdown(ctx); err != nil { +// // log.Fatal(err) +// // } +// // }(ctx) + +// tr := tp.Tracer("component-main") + +// ctx, span := tr.Start(ctx, "foo") +// defer func(ctx) { +// span.End() +// if err := tp.Shutdown(ctx); err != nil { +// log.Fatal(err) +// } +// }(ctx) +// // bar(ctx) +// } + +// func bar(ctx context.Context) { +// // Use the global TracerProvider. +// tr := otel.Tracer("component-bar") +// _, span := tr.Start(ctx, "bar") +// span.SetAttributes(attribute.Key("testset").String("value")) +// defer span.End() + +// for i := 0; i < 10; i++ { +// _, iSpan := tr.Start(ctx, fmt.Sprintf("Sample-%d", i)) +// log.Printf("Doing really hard jaeger work (%d / 10)\n", i+1) + +// <-time.After(time.Second) +// iSpan.End() +// } + +// log.Printf("Done!") +// } From 160de49c919c742303fca3cab5a381fa9850aa62 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Sun, 5 Feb 2023 10:02:22 +0000 Subject: [PATCH 18/27] use go v1.18 for opentel --- go.mod | 2 +- go.sum | 383 --------------------------------------------------------- 2 files changed, 1 insertion(+), 384 deletions(-) diff --git a/go.mod b/go.mod index f15876b..8c6324c 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/Vodafone/vault-plugin-aead -go 1.17 +go 1.18 require ( cloud.google.com/go v0.104.0 diff --git a/go.sum b/go.sum index 7799719..2741e06 100644 --- a/go.sum +++ b/go.sum @@ -28,26 +28,8 @@ cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Ud cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0 h1:gSmWO7DY1vOm0MVU6DNXM11BWHHsTUmsC5cv1fuW5X8= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -56,166 +38,45 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0 h1:JuTk8po4bCKRwObdT0zLb1K0BGkGHJdtgs2GK3j2Gws= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0 h1:aoLIYaA1fX3ywihqpBk2APQKOo20nXsp1GEZQbx5Jk4= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0 h1:xzXGAE2fAuMh+ksODKr9nRv9ega1vHjFwRqMA8tRrVE= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0 h1:fz9X5zyTWBmamZsqvqZqD7khbifcZF/q+Z1J8pfhIUg= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/kms v1.4.0 h1:iElbfoE61VeLhnZcGOltqL8HIly8Nhbe5t6JlH9GXjo= cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/pubsub v1.25.1 h1:l0wCNZKuEp2Q54wAy8283EV9O57+7biWOXnnU2/Tq/A= cloud.google.com/go/pubsub v1.25.1/go.mod h1:bY6l7rF8kCcwz6V3RaQ6kK4p5g7qc7PqjRoE9wDOqOU= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0 h1:wWRIaDURQA8xxHguFCshYepGlrWIrbBnAmc7wfg07qY= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= -github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= -github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.43.9/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= @@ -223,7 +84,6 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bozaro/golorem v0.0.0-20170501165920-50e5b610280b h1:D3YtkBLwtjFPegR4lwiwoCiV+f7bOq/MDh6Xi+nEq3Q= github.com/bozaro/golorem v0.0.0-20170501165920-50e5b610280b/go.mod h1:gqvWc1EBvN2S3BBwczsP6n4MFQzpHRffNXxK2pebPPA= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= @@ -244,15 +104,12 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 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/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -263,41 +120,27 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= -github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= github.com/frankban/quicktest v1.13.0 h1:yNZif1OkDfNoDfb9zZa9aXIpejNR4F23Wely0c+Qdqk= -github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= 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-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= 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-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= @@ -309,12 +152,9 @@ github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiU github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= @@ -323,21 +163,15 @@ github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw= -github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -376,8 +210,6 @@ github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/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/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -393,7 +225,6 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github/v47 v47.1.1-0.20220927202716-0c3cd12a1e6d h1:RPZ3J6bMtepvxwUdKLw+BSP9JOFAg4+I0BV8pYi0jqw= @@ -401,7 +232,6 @@ github.com/google/go-github/v47 v47.1.1-0.20220927202716-0c3cd12a1e6d/go.mod h1: github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= @@ -421,7 +251,6 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -431,25 +260,15 @@ github.com/google/tink/go v1.7.0/go.mod h1:GAUOd+QE3pgj9q8VKIGTCP33c/B7eb4NhxLcg github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0 h1:SXk3ABtQYDT/OH8jAyvEOQ58mgawq5C4o/4/89qN2ZU= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= @@ -459,49 +278,35 @@ github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.3.1 h1:vDwF1DFNZhntP4DAjuTpOw3uEgMUpXh1pB5fW9DqHpo= github.com/hashicorp/go-hclog v1.3.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-kms-wrapping/entropy v0.1.0 h1:xuTi5ZwjimfpvpL09jDE71smCBRpnF5xfo871BSX4gs= -github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g= github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0 h1:pSjQfW3vPtrOTcasTUKgCTQT7OGPPTTMVRrOfU6FJD8= github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0/go.mod h1:xvb32K2keAc+R8DSFG2IwDcydK9DBQE+fGA5fsw6hSk= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= github.com/hashicorp/go-plugin v1.4.5 h1:oTE/oQR4eghggRg8VY7PAz3dr++VwDNBGCcOfIvHpBo= github.com/hashicorp/go-plugin v1.4.5/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= -github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 h1:p4AKXPPS24tO8Wc8i1gLvSKdmkiSY5xuju57czJ/IJQ= github.com/hashicorp/go-secure-stdlib/mlock v0.1.2/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= -github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= -github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7 h1:UpiO20jno/eV1eVZcxqWnUohyKRe1g8FPV/xH1s/2qs= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= -github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo= github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= -github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -510,26 +315,18 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/vault/api v1.4.1/go.mod h1:LkMdrZnWNrFaQyYYazWVn7KshilfDidgVBq6YiTq/bM= github.com/hashicorp/vault/api v1.8.1 h1:bMieWIe6dAlqAAPReZO/8zYtXaWUg/21umwqGZpEjCI= github.com/hashicorp/vault/api v1.8.1/go.mod h1:uJrw6D3y9Rv7hhmS17JQC50jbPDAZdjZoTtrCCxxs7E= -github.com/hashicorp/vault/sdk v0.4.1/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0= github.com/hashicorp/vault/sdk v0.6.0 h1:6Z+In5DXHiUfZvIZdMx7e2loL1PPyDjA4bVh9ZTIAhs= github.com/hashicorp/vault/sdk v0.6.0/go.mod h1:+DRpzoXIdMvKc88R4qxr+edwy/RvH5QK8itmxLiDHLc= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= -github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -558,46 +355,34 @@ github.com/machinebox/graphql v0.2.2 h1:dWKpJligYKhYKO5A2gvNhkJdQMNZeChZYyBbrZkB github.com/machinebox/graphql v0.2.2/go.mod h1:F+kbVMHuwrQ5tYgU9JXlnskM8nOaFxCAEolaQybkjWA= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -605,40 +390,19 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= -github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= -github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/orcaman/concurrent-map v1.0.0 h1:I/2A2XPCb4IuQWcQhBhSwGfiuybl/J0ev9HDbW65HOY= github.com/orcaman/concurrent-map v1.0.0/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -674,7 +438,6 @@ github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMT 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/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= @@ -700,7 +463,6 @@ github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hM github.com/tklauser/numcpus v0.5.0 h1:ooe7gN0fg6myJ0EKoTAf5hebTZrH52px3New/D9iJ+A= github.com/tklauser/numcpus v0.5.0/go.mod h1:OGzpTxpcIMNGYQdit2BYL1pvk/dSOaJWjKoflh+RQjo= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= @@ -712,8 +474,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -733,7 +493,6 @@ go.opentelemetry.io/otel/sdk v1.12.0/go.mod h1:WYcvtgquYvgODEvxOry5owO2y9MyciW7J go.opentelemetry.io/otel/trace v1.12.0 h1:p28in++7Kd0r2d8gSt931O57fdjUyWxkVbESuILAeUc= go.opentelemetry.io/otel/trace v1.12.0/go.mod h1:pHlgBynn6s25qJ2szD+Bv+iwKJttjHSI3lUAyf0GNuQ= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -742,12 +501,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20221012134737-56aed061732a h1:NmSIgad6KjE6VvHciPZuNRTKxGhlPfD6OA87W/PLkqg= golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -785,12 +539,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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-20181114220301-adae6a3d119a/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-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -803,7 +553,6 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -814,7 +563,6 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/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/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -827,22 +575,10 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221019024206-cb67ada4b0ad h1:Zx6wVVDwwNJFWXNIvDi7o952w3/1ckSwYk/7eykRmjM= golang.org/x/net v0.0.0-20221019024206-cb67ada4b0ad/go.mod h1:RpDiru2p0u2F0lLpEoqnP2+7xs0ifAuOcJ442g6GU2s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -861,13 +597,6 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -881,18 +610,13 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/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-20181116152217-5ac8a444bdc5/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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= @@ -901,12 +625,8 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -928,7 +648,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -946,28 +665,13 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -988,9 +692,6 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1027,7 +728,6 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -1039,7 +739,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -1048,15 +747,10 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -1092,20 +786,6 @@ google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3h google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0 h1:LGUYIrbW9pzYQQ8NWXlaIVkgnfubVBZbMFb9P8TK374= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -1116,7 +796,6 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 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-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1148,7 +827,6 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1157,7 +835,6 @@ google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= @@ -1184,44 +861,8 @@ google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 h1:U1u4KB2kx6KR/aJDjQ97hZ15wQs8ZPvDcGcRynBhkvg= google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55/go.mod h1:45EK0dUbEZ2NHjCeAd2LXmyjAgGUGrpGROgjhC3ADck= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1248,15 +889,7 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1273,31 +906,25 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 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/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -1319,21 +946,12 @@ k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0= k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA= -k8s.io/code-generator v0.25.3/go.mod h1:9F5fuVZOMWRme7MYj2YT3L9ropPWPokd9VRhVyD3+0w= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= k8s.io/metrics v0.25.3 h1:fp5RuALkbwI3UbKITdNYu6sa3LF4JPANR/ofq3oe+Fg= k8s.io/metrics v0.25.3/go.mod h1:5j5FKJb8RHsb3Q2PLsD/p1mLiA1fTrl+a62Les+KDhc= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 h1:cTdVh7LYu82xeClmfzGtgyspNh6UxpwLWGi8R4sspNo= k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -1343,6 +961,5 @@ sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= From d0d811b9f66a95f5fdee29ddb8f978ed6be086f5 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Sun, 5 Feb 2023 10:10:45 +0000 Subject: [PATCH 19/27] switching the builder to go-1.18 --- cloudbuild_sub.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cloudbuild_sub.yaml b/cloudbuild_sub.yaml index 5c31ceb..a339119 100644 --- a/cloudbuild_sub.yaml +++ b/cloudbuild_sub.yaml @@ -1,12 +1,12 @@ steps: - - name: 'gcr.io/cloud-builders/go:1.17' + - name: 'gcr.io/cloud-builders/go:1.18' id: 'go-test' args: - '-c' - | go test -v -race entrypoint: /bin/sh - - name: 'gcr.io/cloud-builders/go:1.17' + - name: 'gcr.io/cloud-builders/go:1.18' id: 'go-build' waitFor: ['go-test'] args: From 8c1ed9cd113d3939c8cc3cb4efa9770a55e05572 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Sun, 5 Feb 2023 10:47:16 +0000 Subject: [PATCH 20/27] experimentation --- opentelemetry.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/opentelemetry.go b/opentelemetry.go index d7d90d9..10d5f90 100644 --- a/opentelemetry.go +++ b/opentelemetry.go @@ -28,8 +28,8 @@ import ( ) const ( - service = "jaeger-test-trace-service" - environment = "production" + service = "aead-trace-service" + environment = "nonprod" id = 1 ) @@ -61,16 +61,16 @@ func tracerProvider(url string) (*tracesdk.TracerProvider, error) { func initialiseOpenTel() { var tperr error - if tp == nil { - tp, tperr = tracerProvider("http://jaeger-collector.jaeger.svc.cluster.local:14268/api/traces") - if tperr != nil { - log.Fatal(tperr) - } - - // Register our TracerProvider as the global so any imported - // instrumentation in the future will default to using it. - otel.SetTracerProvider(tp) + // if tp == nil { + tp, tperr = tracerProvider("http://jaeger-collector.jaeger.svc.cluster.local:14268/api/traces") + if tperr != nil { + log.Fatal(tperr) } + + // Register our TracerProvider as the global so any imported + // instrumentation in the future will default to using it. + otel.SetTracerProvider(tp) + // } } // func main() { From 305c5faac48eb7cbe76d90ee667dc9a77f1efd82 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Mon, 6 Feb 2023 20:17:34 +0000 Subject: [PATCH 21/27] opentelemetry improvements --- opentelemetry.go | 11 ++-- path_aead.go | 108 +++++++++++++++++++++++++--------------- path_config.go | 127 +++++++++++++++++++++++++++++------------------ 3 files changed, 153 insertions(+), 93 deletions(-) diff --git a/opentelemetry.go b/opentelemetry.go index 10d5f90..2c55050 100644 --- a/opentelemetry.go +++ b/opentelemetry.go @@ -25,6 +25,7 @@ import ( "go.opentelemetry.io/otel/sdk/resource" tracesdk "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.17.0" + oteltrace "go.opentelemetry.io/otel/trace" ) const ( @@ -34,6 +35,7 @@ const ( ) var tp *tracesdk.TracerProvider +var tr oteltrace.Tracer // tracerProvider returns an OpenTelemetry TracerProvider configured to use // the Jaeger exporter that will send spans to the provided url. The returned @@ -62,7 +64,8 @@ func tracerProvider(url string) (*tracesdk.TracerProvider, error) { func initialiseOpenTel() { var tperr error // if tp == nil { - tp, tperr = tracerProvider("http://jaeger-collector.jaeger.svc.cluster.local:14268/api/traces") + // tp, tperr = tracerProvider("http://jaeger-collector.jaeger.svc.cluster.local:14268/api/traces") + tp, tperr = tracerProvider("http://localhost:14268/api/traces") if tperr != nil { log.Fatal(tperr) } @@ -89,7 +92,7 @@ func initialiseOpenTel() { // // } // // }(ctx) -// tr := tp.Tracer("component-main") +// tr = tp.Tracer("component-main") // ctx, span := tr.Start(ctx, "foo") // defer func(ctx) { @@ -103,8 +106,8 @@ func initialiseOpenTel() { // func bar(ctx context.Context) { // // Use the global TracerProvider. -// tr := otel.Tracer("component-bar") -// _, span := tr.Start(ctx, "bar") +// // tr := otel.Tracer("component-bar") +// ctx, span := tr.Start(ctx, "bar") // span.SetAttributes(attribute.Key("testset").String("value")) // defer span.End() diff --git a/path_aead.go b/path_aead.go index a721014..197f0a9 100644 --- a/path_aead.go +++ b/path_aead.go @@ -4,18 +4,18 @@ import ( "context" "fmt" "log" + "os" "strconv" "sync" "time" "unsafe" - "cloud.google.com/go/pubsub" - hclog "github.com/hashicorp/go-hclog" - "go.opentelemetry.io/otel" - b64 "encoding/base64" "encoding/json" + "cloud.google.com/go/pubsub" + hclog "github.com/hashicorp/go-hclog" + "github.com/google/tink/go/tink" "github.com/google/uuid" "github.com/hashicorp/vault/sdk/framework" @@ -25,9 +25,10 @@ import ( func (b *backend) pathAeadEncrypt(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathAeadEncrypt-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadEncrypt-" + hostname) - ctx, span := tr.Start(ctx, "pathAeadEncrypt") + ctx, span := tr.Start(ctx, "pathAeadEncrypt-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -118,8 +119,8 @@ func (b *backend) pathAeadEncrypt(ctx context.Context, req *logical.Request, dat func (b *backend) encryptRowChan(ctx context.Context, req *logical.Request, data *framework.FieldData, row string, ch chan map[string]interface{}) { - tr := otel.Tracer("component-encryptRowChan") - _, span := tr.Start(ctx, "encryptRowChan") + // tr := otel.Tracer("component-encryptRowChan") + ctx, span := tr.Start(ctx, "encryptRowChan") defer span.End() // this is just a wrapper around the pathAeadEncryptRow methos so that it can be used concurrently in a channel @@ -137,8 +138,8 @@ func (b *backend) encryptRowChan(ctx context.Context, req *logical.Request, data func (b *backend) decryptRowChan(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string, ch chan map[string]interface{}) { - tr := otel.Tracer("component-decryptRowChan") - _, span := tr.Start(ctx, "decryptRowChan") + // tr := otel.Tracer("component-decryptRowChan") + ctx, span := tr.Start(ctx, "decryptRowChan") defer span.End() // this is just a wrapper around the pathAeadDecryptRow methos so that it can be used concurrently in a channel @@ -156,8 +157,8 @@ func (b *backend) decryptRowChan(ctx context.Context, req *logical.Request, data func (b *backend) encryptRow(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { - tr := otel.Tracer("component-encryptRow") - _, span := tr.Start(ctx, "encryptRow") + // tr := otel.Tracer("component-encryptRow") + ctx, span := tr.Start(ctx, "encryptRow") defer span.End() // retrive the config fro storage @@ -201,8 +202,8 @@ func (b *backend) encryptRow(ctx context.Context, req *logical.Request, data *fr func (b *backend) doEncryptionChan(fieldName string, unencryptedData interface{}, data *framework.FieldData, ctx context.Context, req *logical.Request, ch chan map[string]interface{}) { - tr := otel.Tracer("component-doEncryptionChan") - _, span := tr.Start(ctx, "doEncryptionChan") + // tr := otel.Tracer("component-doEncryptionChan") + ctx, span := tr.Start(ctx, "doEncryptionChan") defer span.End() resp := make(map[string]interface{}) @@ -308,9 +309,10 @@ func (b *backend) doEncryptionChan(fieldName string, unencryptedData interface{} func (b *backend) pathAeadDecrypt(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathAeadDecrypt-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadDecrypt-" + hostname) - ctx, span := tr.Start(ctx, "pathAeadDEcrypt") + ctx, span := tr.Start(ctx, "pathAeadDEcrypt-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -387,8 +389,8 @@ func (b *backend) pathAeadDecrypt(ctx context.Context, req *logical.Request, dat func (b *backend) decryptRow(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { - tr := otel.Tracer("component-decryptRow") - _, span := tr.Start(ctx, "decryptRow") + // tr := otel.Tracer("component-decryptRow") + ctx, span := tr.Start(ctx, "decryptRow") defer span.End() resp := make(map[string]interface{}) @@ -415,8 +417,8 @@ func (b *backend) decryptRow(ctx context.Context, req *logical.Request, data *fr func (b *backend) doDecryptionChan(fieldName string, encryptedDataBase64 interface{}, data *framework.FieldData, ctx context.Context, req *logical.Request, ch chan map[string]interface{}) { - tr := otel.Tracer("component-doDecryptionChan") - _, span := tr.Start(ctx, "doDecryptionChan") + // tr := otel.Tracer("component-doDecryptionChan") + ctx, span := tr.Start(ctx, "doDecryptionChan") defer span.End() resp := make(map[string]interface{}) @@ -523,9 +525,10 @@ func (b *backend) doDecryptionChan(fieldName string, encryptedDataBase64 interfa func (b *backend) pathAeadEncryptBulkCol(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathAeadEncryptBulkCol-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadEncryptBulkCol-" + hostname) - ctx, span := tr.Start(ctx, "pathAeadEncryptBulkCol") + ctx, span := tr.Start(ctx, "pathAeadEncryptBulkCol-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -570,7 +573,9 @@ func (b *backend) pathAeadEncryptBulkCol(ctx context.Context, req *logical.Reque // ok, 1st thing to do is to pivot the map pivotedMap := make(map[string]interface{}) + _, pivotSpan := tr.Start(ctx, fmt.Sprintf("PivotMap")) PivotMapInt(data.Raw, pivotedMap) + pivotSpan.End() channelCap := len(pivotedMap) channel := make(chan map[string]interface{}, channelCap) @@ -595,6 +600,7 @@ func (b *backend) pathAeadEncryptBulkCol(ctx context.Context, req *logical.Reque resp.Data = make(map[string]interface{}) resultsMap := make(map[string]interface{}) + _, waitResultsSpan := tr.Start(ctx, fmt.Sprintf("pathAeadDecryptBulkCol-wait")) for i := 0; i < channelCap; i++ { res := <-channel for k, v := range res { @@ -602,9 +608,12 @@ func (b *backend) pathAeadEncryptBulkCol(ctx context.Context, req *logical.Reque resultsMap[k] = v } } + waitResultsSpan.End() // unpivot the map + _, unpivotSpan := tr.Start(ctx, fmt.Sprintf("UnPivotMap")) PivotMapInt(resultsMap, resp.Data) + unpivotSpan.End() } else { @@ -618,8 +627,8 @@ func (b *backend) pathAeadEncryptBulkCol(ctx context.Context, req *logical.Reque func (b *backend) encryptColChan(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string, ch chan map[string]interface{}) { - tr := otel.Tracer("component-encryptColChan") - _, span := tr.Start(ctx, "encryptColChan") + // tr := otel.Tracer("component-encryptColChan-" + fieldName) + ctx, span := tr.Start(ctx, "encryptColChan-"+fieldName) defer span.End() // this is just a wrapper around the pathAeadEncryptRow methos so that it can be used concurrently in a channel @@ -637,8 +646,8 @@ func (b *backend) encryptColChan(ctx context.Context, req *logical.Request, data func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string) (*logical.Response, error) { - tr := otel.Tracer("component-encryptCol") - _, span := tr.Start(ctx, "encryptCol") + // tr := otel.Tracer("component-encryptCol-" + fieldName) + ctx, span := tr.Start(ctx, "encryptCol-"+fieldName) defer span.End() resp := make(map[string]interface{}) @@ -650,6 +659,8 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr keySet, additionalDataBytes, err := b.getKeyAndAD(fieldName, ctx, req) + _, keySpan := tr.Start(ctx, "encryptCol-resolveKey"+fieldName) + // we didn't find a key - return original data if err != nil { hclog.L().Error("Failed to create a keyhandle", err) @@ -669,7 +680,7 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr } } } - + keySpan.End() // // retrive the config fro storage // err := b.getAeadConfig(ctx, req) @@ -707,6 +718,7 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr // } // // set additionalDataBytes as field name of the right type // additionalDataBytes := getAdditionalData(fieldName, AEAD_CONFIG) + _, encryptSpan := tr.Start(ctx, "encryptCol-doEncryption"+fieldName) // iterate through the key=value supplied (ie field1=myaddress field2=myphonenumber) for rowNum, unencryptedData := range data.Raw { @@ -753,6 +765,8 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr } } + encryptSpan.End() + return &logical.Response{ Data: resp, }, nil @@ -760,9 +774,10 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathAeadDecryptBulkCol-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadDecryptBulkCol-" + hostname) - ctx, span := tr.Start(ctx, "pathAeadDecryptBulkCol") + ctx, span := tr.Start(ctx, "pathAeadDecryptBulkCol-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -798,7 +813,9 @@ func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Reque // ok, 1st thing to do is to pivot the map pivotedMap := make(map[string]interface{}) + _, pivotSpan := tr.Start(ctx, fmt.Sprintf("PivotMap")) PivotMapInt(data.Raw, pivotedMap) + pivotSpan.End() channelCap := len(pivotedMap) channel := make(chan map[string]interface{}, channelCap) @@ -826,6 +843,7 @@ func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Reque resp.Data = make(map[string]interface{}) resultsMap := make(map[string]interface{}) + _, waitResultsSpan := tr.Start(ctx, fmt.Sprintf("pathAeadDecryptBulkCol-wait")) for i := 0; i < channelCap; i++ { res := <-channel for k, v := range res { @@ -833,9 +851,12 @@ func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Reque resultsMap[k] = v } } + waitResultsSpan.End() // unpivot the map + _, unpivotSpan := tr.Start(ctx, fmt.Sprintf("UnPivotMap")) PivotMapInt(resultsMap, resp.Data) + unpivotSpan.End() } else { hclog.L().Info("can only do column ops on bulk data") @@ -847,8 +868,8 @@ func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Reque func (b *backend) decryptColChan(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string, ch chan map[string]interface{}) { - tr := otel.Tracer("component-decryptColChan") - _, span := tr.Start(ctx, "decryptColChan") + // tr := otel.Tracer("component-decryptColChan-" + fieldName) + ctx, span := tr.Start(ctx, "decryptColChan-"+fieldName) defer span.End() // this is just a wrapper around the pathAeadDecryptRow methos so that it can be used concurrently in a channel @@ -866,8 +887,8 @@ func (b *backend) decryptColChan(ctx context.Context, req *logical.Request, data func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *framework.FieldData, fieldName string) (*logical.Response, error) { - tr := otel.Tracer("component-decryptCol") - _, span := tr.Start(ctx, "decryptCol") + // tr := otel.Tracer("component-decryptCol-" + fieldName) + ctx, span := tr.Start(ctx, "decryptCol-"+fieldName) defer span.End() resp := make(map[string]interface{}) @@ -877,6 +898,8 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr deterministic := false keyFound := false + _, keySpan := tr.Start(ctx, "decryptCol-resolveKey"+fieldName) + keySet, additionalDataBytes, err := b.getKeyAndAD(fieldName, ctx, req) // we didn't find a key - return original data if err != nil { @@ -897,6 +920,7 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr } } } + keySpan.End() // // retrive the config from storage // err := b.getAeadConfig(ctx, req) @@ -935,6 +959,8 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr // // set additionalDataBytes as field name of the right type // additionalDataBytes := getAdditionalData(fieldName, AEAD_CONFIG) + _, decryptSpan := tr.Start(ctx, "decryptCol-doDecryption"+fieldName) + // iterate through the key=value supplied (ie field1=sdfvbbvwrbwr field2=advwefvwfvbwrfvb) for rowNumber, encryptedDataBase64 := range data.Raw { if keyFound { @@ -977,7 +1003,7 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr resp[rowNumber] = fmt.Sprintf("%s", encryptedDataBase64) } } - + decryptSpan.End() return &logical.Response{ Data: resp, }, nil @@ -999,8 +1025,8 @@ func isBulkData(data map[string]interface{}) (bool, error) { func (b *backend) publishTelemetry(wg *sync.WaitGroup, ctx context.Context, req *logical.Request, encryptOrDecrypt string, data map[string]interface{}) { - tr := otel.Tracer("component-publishTelemetry") - _, span := tr.Start(ctx, "publishTelemetry") + // tr := otel.Tracer("component-publishTelemetry") + ctx, span := tr.Start(ctx, "publishTelemetry") defer span.End() defer wg.Done() @@ -1103,9 +1129,10 @@ func (b *backend) publishTelemetry(wg *sync.WaitGroup, ctx context.Context, req func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathAeadEncryptBulkColFarm-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadEncryptBulkColFarm-" + hostname) - ctx, span := tr.Start(ctx, "pathAeadEncryptBulkColFarm") + ctx, span := tr.Start(ctx, "pathAeadEncryptBulkColFarm-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -1187,9 +1214,10 @@ func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.R func (b *backend) pathAeadDecryptBulkColFarm(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathAeadDecryptBulkColFarm-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadDecryptBulkColFarm-" + hostname) - ctx, span := tr.Start(ctx, "pathAeadDecryptBulkColFarm") + ctx, span := tr.Start(ctx, "pathAeadDecryptBulkColFarm-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { diff --git a/path_config.go b/path_config.go index e3cb9f7..5171586 100644 --- a/path_config.go +++ b/path_config.go @@ -5,6 +5,7 @@ import ( "context" b64 "encoding/base64" "fmt" + "os" "strconv" "time" @@ -14,7 +15,6 @@ import ( "github.com/hashicorp/vault/sdk/framework" "github.com/hashicorp/vault/sdk/logical" cmap "github.com/orcaman/concurrent-map" - "go.opentelemetry.io/otel" ) var AEAD_CONFIG = cmap.New() @@ -22,9 +22,10 @@ var AEAD_KEYS = cmap.New() func (b *backend) pathConfigWrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathConfigWrite-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadDecryptBulkColFarm-" + hostname) - ctx, span := tr.Start(ctx, "pathConfigWrite") + ctx, span := tr.Start(ctx, "pathConfigWrite-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -35,9 +36,10 @@ func (b *backend) pathConfigWrite(ctx context.Context, req *logical.Request, dat } func (b *backend) pathConfigOverwrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathConfigOverwrite-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathConfigOverwrite-" + hostname) - ctx, span := tr.Start(ctx, "pathConfigOverwrite") + ctx, span := tr.Start(ctx, "pathConfigOverwrite-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -47,8 +49,9 @@ func (b *backend) pathConfigOverwrite(ctx context.Context, req *logical.Request, return b.configWriteOverwriteCheck(ctx, req, data, true) } func (b *backend) configWriteOverwriteCheck(ctx context.Context, req *logical.Request, data *framework.FieldData, overwrite bool) (*logical.Response, error) { - tr := otel.Tracer("component-configWriteOverwriteCheck") - _, span := tr.Start(ctx, "configWriteOverwriteCheck") + // tr := otel.Tracer("component-configWriteOverwriteCheck") + ctx, span := tr.Start(ctx, "configWriteOverwriteCheck") + defer span.End() // retrive the config from storage @@ -85,9 +88,10 @@ func (b *backend) configWriteOverwriteCheck(ctx context.Context, req *logical.Re func (b *backend) pathConfigDelete(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathConfigDelete-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathConfigDelete-" + hostname) - ctx, span := tr.Start(ctx, "pathConfigDelete") + ctx, span := tr.Start(ctx, "pathConfigDelete-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -125,9 +129,11 @@ func (b *backend) pathConfigDelete(ctx context.Context, req *logical.Request, da func (b *backend) pathConfigRead(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathConfigRead-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathConfigRead-" + hostname) + + ctx, span := tr.Start(ctx, "pathConfigRead-"+hostname) - ctx, span := tr.Start(ctx, "pathConfigRead") defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -153,9 +159,10 @@ func (b *backend) pathConfigRead(ctx context.Context, req *logical.Request, data func (b *backend) pathReadKeyTypes(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathReadKeyTypes-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathReadKeyTypes-" + hostname) - ctx, span := tr.Start(ctx, "pathReadKeyTypes") + ctx, span := tr.Start(ctx, "pathReadKeyTypes-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -185,8 +192,8 @@ func (b *backend) pathReadKeyTypes(ctx context.Context, req *logical.Request, da } func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request, b_optionalDirtyRead ...bool) error { - tr := otel.Tracer("component-getAeadConfig") - _, span := tr.Start(ctx, "getAeadConfig") + // tr := otel.Tracer("component-getAeadConfig") + ctx, span := tr.Start(ctx, "getAeadConfig") defer span.End() hclog.L().Info("getAeadConfig start AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) @@ -226,8 +233,8 @@ func (b *backend) getAeadConfig(ctx context.Context, req *logical.Request, b_opt } func (b *backend) readConsulConfig(ctx context.Context, s logical.Storage) (map[string]interface{}, error) { - tr := otel.Tracer("component-readConsulConfig") - _, span := tr.Start(ctx, "readConsulConfig") + // tr := otel.Tracer("component-readConsulConfig") + ctx, span := tr.Start(ctx, "readConsulConfig") defer span.End() consulConfig := make(map[string]interface{}) @@ -248,9 +255,10 @@ func (b *backend) readConsulConfig(ctx context.Context, s logical.Storage) (map[ func (b *backend) pathKeyRotate(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathKeyRotate-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathKeyRotate-" + hostname) - ctx, span := tr.Start(ctx, "pathKeyRotate") + ctx, span := tr.Start(ctx, "pathKeyRotate-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -309,7 +317,8 @@ func (b *backend) pathKeyRotate(ctx context.Context, req *logical.Request, data func (b *backend) pathUpdateKeyStatus(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathUpdateKeyStatus-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathUpdateKeyStatus-" + hostname) ctx, span := tr.Start(ctx, "pathUpdateKeyStatus") defer func() { @@ -381,9 +390,10 @@ func (b *backend) pathUpdateKeyStatus(ctx context.Context, req *logical.Request, } func (b *backend) pathUpdateKeyMaterial(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathUpdateKeyMaterial-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathUpdateKeyMaterial-" + hostname) - ctx, span := tr.Start(ctx, "pathUpdateKeyMaterial") + ctx, span := tr.Start(ctx, "pathUpdateKeyMaterial-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -452,9 +462,10 @@ func (b *backend) pathUpdateKeyMaterial(ctx context.Context, req *logical.Reques } func (b *backend) pathUpdatePrimaryKeyID(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathUpdatePrimaryKeyID-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathUpdatePrimaryKeyID-" + hostname) - ctx, span := tr.Start(ctx, "pathUpdatePrimaryKeyID") + ctx, span := tr.Start(ctx, "pathUpdatePrimaryKeyID-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -521,9 +532,10 @@ func (b *backend) pathUpdatePrimaryKeyID(ctx context.Context, req *logical.Reque } func (b *backend) pathUpdateKeyID(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathUpdateKeyID-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathUpdateKeyID-" + hostname) - ctx, span := tr.Start(ctx, "pathUpdateKeyID") + ctx, span := tr.Start(ctx, "pathUpdateKeyID-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -592,9 +604,10 @@ func (b *backend) pathUpdateKeyID(ctx context.Context, req *logical.Request, dat } func (b *backend) pathImportKey(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathImportKey-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathImportKey-" + hostname) - ctx, span := tr.Start(ctx, "pathImportKey") + ctx, span := tr.Start(ctx, "pathImportKey-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -631,9 +644,10 @@ func (b *backend) pathImportKey(ctx context.Context, req *logical.Request, data func (b *backend) pathAeadCreateDeterministicKeys(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathAeadCreateDeterministicKeys-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadCreateDeterministicKeys-" + hostname) - ctx, span := tr.Start(ctx, "pathAeadCreateDeterministicKeys") + ctx, span := tr.Start(ctx, "pathAeadCreateDeterministicKeys-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -645,9 +659,10 @@ func (b *backend) pathAeadCreateDeterministicKeys(ctx context.Context, req *logi func (b *backend) pathAeadCreateDeterministicKeysOverwrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathAeadCreateDeterministicKeysOverwrite-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadCreateDeterministicKeysOverwrite-" + hostname) - ctx, span := tr.Start(ctx, "pathAeadCreateDeterministicKeysOverwrite") + ctx, span := tr.Start(ctx, "pathAeadCreateDeterministicKeysOverwrite-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -658,8 +673,8 @@ func (b *backend) pathAeadCreateDeterministicKeysOverwrite(ctx context.Context, } func (b *backend) createDeterministicKeysOverwriteCheck(ctx context.Context, req *logical.Request, data *framework.FieldData, overwrite bool) (*logical.Response, error) { - tr := otel.Tracer("component-createDeterministicKeysOverwriteCheck") - _, span := tr.Start(ctx, "createDeterministicKeysOverwriteCheck") + // tr := otel.Tracer("component-createDeterministicKeysOverwriteCheck") + ctx, span := tr.Start(ctx, "createDeterministicKeysOverwriteCheck") defer span.End() // retrive the config from storage @@ -718,9 +733,10 @@ func (b *backend) createDeterministicKeysOverwriteCheck(ctx context.Context, req } func (b *backend) pathAeadCreateNonDeterministicKeys(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathAeadCreateNonDeterministicKeys-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadCreateNonDeterministicKeys-" + hostname) - ctx, span := tr.Start(ctx, "pathAeadCreateNonDeterministicKeys") + ctx, span := tr.Start(ctx, "pathAeadCreateNonDeterministicKeys-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -732,9 +748,10 @@ func (b *backend) pathAeadCreateNonDeterministicKeys(ctx context.Context, req *l func (b *backend) pathAeadCreateNonDeterministicKeysOverwrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { initialiseOpenTel() - tr := tp.Tracer("pathAeadCreateNonDeterministicKeysOverwrite-tracer") + hostname, _ := os.Hostname() + tr = tp.Tracer("pathAeadCreateNonDeterministicKeysOverwrite-" + hostname) - ctx, span := tr.Start(ctx, "pathAeadCreateNonDeterministicKeysOverwrite") + ctx, span := tr.Start(ctx, "pathAeadCreateNonDeterministicKeysOverwrite-"+hostname) defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -744,10 +761,10 @@ func (b *backend) pathAeadCreateNonDeterministicKeysOverwrite(ctx context.Contex return b.createNonDeterministicKeysOverwriteCheck(ctx, req, data, true) } -func (b *backend) createNonDeterministicKeysOverwriteCheck(ctx context.Context, req *logical.Request, data *framework.FieldData, overwrite bool) (*logical.Response, error) { +func (b *backend) createNonDeterministicKeysOverwriteCheck(ctx_in context.Context, req *logical.Request, data *framework.FieldData, overwrite bool) (*logical.Response, error) { - tr := otel.Tracer("component-createNonDeterministicKeysOverwriteCheck") - _, span := tr.Start(ctx, "createNonDeterministicKeysOverwriteCheck") + // tr := otel.Tracer("component-createNonDeterministicKeysOverwriteCheck") + ctx, span := tr.Start(ctx_in, "createNonDeterministicKeysOverwriteCheck") defer span.End() // retrive the config from storage @@ -807,8 +824,8 @@ func (b *backend) createNonDeterministicKeysOverwriteCheck(ctx context.Context, func (b *backend) saveKeyToConfig(keysetHandle *keyset.Handle, fieldName string, ctx context.Context, req *logical.Request, overwrite bool) { - tr := otel.Tracer("component-saveKeyToConfig") - _, span := tr.Start(ctx, "saveKeyToConfig") + // tr := otel.Tracer("component-saveKeyToConfig") + ctx, span := tr.Start(ctx, "saveKeyToConfig") defer span.End() // retrive the config from storage @@ -852,8 +869,8 @@ func (b *backend) saveKeyToConfig(keysetHandle *keyset.Handle, fieldName string, func (b *backend) getAdditionalData(ctx context.Context, fieldName string, config cmap.ConcurrentMap) []byte { - tr := otel.Tracer("component-getAdditionalData") - _, span := tr.Start(ctx, "getAdditionalData") + // tr := otel.Tracer("component-getAdditionalData-" + fieldName) + ctx, span := tr.Start(ctx, "getAdditionalData-"+fieldName) defer span.End() // set additionalDataBytes as field name of the right type @@ -893,8 +910,8 @@ func getEncryptionKey(fieldName string, setDepth ...int) (interface{}, bool) { func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logical.Request) (interface{}, []byte, error) { - tr := otel.Tracer("component-getKeyAndAD") - _, span := tr.Start(ctx, "getKeyAndAD") + // tr := otel.Tracer("component-getKeyAndAD-" + fieldName) + ctx, span := tr.Start(ctx, "getKeyAndAD-"+fieldName) defer span.End() t := time.Now() @@ -905,11 +922,14 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica if err != nil { return nil, nil, err } + span.AddEvent("read the config") + hclog.L().Info("getKeyAndAD re-read config time to read =" + time.Since(t).String() + " AEAD_LENGTH=" + strconv.Itoa(len(AEAD_CONFIG.Items()))) t = time.Now() // set additionalDataBytes as field name of the right type additionalDataBytes := b.getAdditionalData(ctx, fieldName, AEAD_CONFIG) + span.AddEvent("read the ad") _, ok := AEAD_CONFIG.Get("DIRTY_READ_KEYS") if ok { @@ -924,12 +944,17 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica t = time.Now() encryptionkeyIntf, ok := getEncryptionKey(fieldName) + span.AddEvent("got a key (or not)") // do we have a key already in config if ok { + span.AddEvent("we do have a key") + // is the key we have retrived deterministic? encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkeyIntf) if deterministic { + span.AddEvent("we do have a deterministic key") + // SUPPORT FOR DETERMINISTIC AEAD // we don't need the key handle which is returned first _, tinkDetAead, err := CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) @@ -942,6 +967,8 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica return tinkDetAead, additionalDataBytes, nil } } else { + span.AddEvent("we do have a non deterministic key") + _, tinkAead, err := CreateInsecureHandleAndAead(encryptionKeyStr) if err != nil { hclog.L().Error("getKeyAndAD Failed to create a keyhandle time="+time.Since(t).String(), err) @@ -953,14 +980,16 @@ func (b *backend) getKeyAndAD(fieldName string, ctx context.Context, req *logica } } } + span.AddEvent("we do not have a key") + hclog.L().Error("getKeyAndAD Failed to find or create a key time=" + time.Since(t).String()) return nil, nil, nil } func (b *backend) saveKeyObjectToConfig(fieldName string, keyObj interface{}, ctx context.Context, req *logical.Request) { - tr := otel.Tracer("component-saveKeyObjectToConfig") - _, span := tr.Start(ctx, "saveKeyObjectToConfig") + // tr := otel.Tracer("component-saveKeyObjectToConfig") + ctx, span := tr.Start(ctx, "saveKeyObjectToConfig") defer span.End() AEAD_KEYS.Set(fieldName, keyObj) From 55db8f8cc47c12a479ceeb5933414489c0b95830 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Mon, 6 Feb 2023 20:26:47 +0000 Subject: [PATCH 22/27] opentel iteration --- cloudbuild_sub.yaml | 2 +- opentelemetry.go | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/cloudbuild_sub.yaml b/cloudbuild_sub.yaml index a339119..ade5c3b 100644 --- a/cloudbuild_sub.yaml +++ b/cloudbuild_sub.yaml @@ -4,7 +4,7 @@ steps: args: - '-c' - | - go test -v -race + go test -v entrypoint: /bin/sh - name: 'gcr.io/cloud-builders/go:1.18' id: 'go-build' diff --git a/opentelemetry.go b/opentelemetry.go index 2c55050..5ec152d 100644 --- a/opentelemetry.go +++ b/opentelemetry.go @@ -63,9 +63,8 @@ func tracerProvider(url string) (*tracesdk.TracerProvider, error) { func initialiseOpenTel() { var tperr error - // if tp == nil { - // tp, tperr = tracerProvider("http://jaeger-collector.jaeger.svc.cluster.local:14268/api/traces") - tp, tperr = tracerProvider("http://localhost:14268/api/traces") + tp, tperr = tracerProvider("http://jaeger-collector.jaeger.svc.cluster.local:14268/api/traces") + //tp, tperr = tracerProvider("http://localhost:14268/api/traces") if tperr != nil { log.Fatal(tperr) } @@ -73,7 +72,6 @@ func initialiseOpenTel() { // Register our TracerProvider as the global so any imported // instrumentation in the future will default to using it. otel.SetTracerProvider(tp) - // } } // func main() { From 41ad6871438937f8dd5b0707482bb73d4b2beb5a Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Tue, 7 Feb 2023 11:58:59 +0000 Subject: [PATCH 23/27] more spans into Farm methods --- path_aead.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/path_aead.go b/path_aead.go index 197f0a9..66d5f1e 100644 --- a/path_aead.go +++ b/path_aead.go @@ -1180,7 +1180,9 @@ func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.R } } + _, makesliceSpan := tr.Start(ctx, fmt.Sprintf("pathAeadEncryptBulkColFarm-makeslice")) mapSlice := createSliceOfMapsFromMapStrInt(data.Raw, maxbatchInt) + makesliceSpan.End() // ok so now we have a slice of maps of data @@ -1197,6 +1199,8 @@ func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.R resp.Data = make(map[string]interface{}) resultsMap := make(map[string]interface{}) + _, waitSpan := tr.Start(ctx, fmt.Sprintf("pathAeadEncryptBulkColFarm-wait")) + for i := 0; i < channelCap; i++ { res := <-channel for k, v := range res { @@ -1204,6 +1208,7 @@ func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.R resultsMap[k] = v } } + waitSpan.End() resp.Data = resultsMap @@ -1264,7 +1269,9 @@ func (b *backend) pathAeadDecryptBulkColFarm(ctx context.Context, req *logical.R } } + _, makesliceSpan := tr.Start(ctx, fmt.Sprintf("pathAeadDecryptBulkColFarm-makeslice")) mapSlice := createSliceOfMapsFromMapStrInt(data.Raw, maxbatchInt) + makesliceSpan.End() // ok so now we have a slice of maps of data @@ -1281,6 +1288,8 @@ func (b *backend) pathAeadDecryptBulkColFarm(ctx context.Context, req *logical.R resp.Data = make(map[string]interface{}) resultsMap := make(map[string]interface{}) + _, waitSpan := tr.Start(ctx, fmt.Sprintf("pathAeadDecryptBulkColFarm-wait")) + for i := 0; i < channelCap; i++ { res := <-channel for k, v := range res { @@ -1289,6 +1298,8 @@ func (b *backend) pathAeadDecryptBulkColFarm(ctx context.Context, req *logical.R } } + waitSpan.End() + resp.Data = resultsMap wg.Wait() From aa16ebfcc2a34e87c3f4929def06fcbe638a0cf2 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Wed, 8 Feb 2023 11:14:24 +0000 Subject: [PATCH 24/27] parallelise decrypt routine --- path_aead.go | 234 ++++++++++++++++++++++++++++----------------------- 1 file changed, 128 insertions(+), 106 deletions(-) diff --git a/path_aead.go b/path_aead.go index 66d5f1e..bbffa75 100644 --- a/path_aead.go +++ b/path_aead.go @@ -681,47 +681,67 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr } } keySpan.End() - // // retrive the config fro storage - // err := b.getAeadConfig(ctx, req) - // if err != nil { - // return nil, err - // } - // resp := make(map[string]interface{}) - - // encryptionkey, keyFound := getEncryptionKey(fieldName) - // // is the key we have retrived deterministic? - // encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkey) - - // var tinkDetAead tink.DeterministicAEAD - // var tinkAead tink.AEAD - - // if keyFound && deterministic { - // // SUPPORT FOR DETERMINISTIC AEAD - // // we don't need the key handle which is returned first - // _, tinkDetAead, err = CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) - // if err != nil { - // hclog.L().Error("Failed to create a keyhandle", err) - // return &logical.Response{ - // Data: resp, - // }, err - // } - // } else if keyFound && !deterministic { - // // SUPPORT FOR NON DETERMINISTIC AEAD - // _, tinkAead, err = CreateInsecureHandleAndAead(encryptionKeyStr) - // if err != nil { - // hclog.L().Error("Failed to create a key", err) - // return &logical.Response{ - // Data: resp, - // }, err - // } - // } - // // set additionalDataBytes as field name of the right type - // additionalDataBytes := getAdditionalData(fieldName, AEAD_CONFIG) _, encryptSpan := tr.Start(ctx, "encryptCol-doEncryption"+fieldName) + maxbatchInt := 1000 //TODO + maxbatch, ok := AEAD_CONFIG.Get("MAX_BATCHCOLROWS") + if !ok { + hclog.L().Error("encryptCol: Could not find a MAX_BATCHCOLROWS in the config") + } else { + // this is an integer value, masquerading as a string, but of type interface{} - go figure + maxbatchStr := maxbatch.(string) + maxbatchInt, err = strconv.Atoi(maxbatchStr) + if err != nil { + hclog.L().Error("encryptCol: Could not convert MAX_BATCHCOLROWS to integer") + } + } + _, makesliceSpan := tr.Start(ctx, fmt.Sprintf("encryptCol-makeslice")) + mapSlice := createSliceOfMapsFromMapStrInt(data.Raw, maxbatchInt) + makesliceSpan.End() + + // ok so now we have a slice of maps of data + + channelCap := len(mapSlice) + channel := make(chan map[string]interface{}, channelCap) + + // call the encrypt or decrypt per broken up map + for _, dataMap := range mapSlice { + go b.encryptColConcurrent(ctx, dataMap, keyFound, deterministic, tinkDetAead, tinkAead, additionalDataBytes, channel) + } + + // var respStruct = logical.Response{} + // var resp1 = &respStruct + // resp1.Data = make(map[string]interface{}) + resultsMap := make(map[string]interface{}) + + _, waitSpan := tr.Start(ctx, fmt.Sprintf("encryptCol-wait")) + + for i := 0; i < channelCap; i++ { + res := <-channel + for k, v := range res { + // this should be a map of 1 row of rownumber index as string and the map of values + resultsMap[k] = v + } + } + waitSpan.End() + + encryptSpan.End() + + return &logical.Response{ + Data: resultsMap, + }, nil +} + +func (b *backend) encryptColConcurrent(ctx context.Context, data map[string]interface{}, keyFound bool, deterministic bool, tinkDetAead tink.DeterministicAEAD, tinkAead tink.AEAD, additionalDataBytes []byte, ch chan map[string]interface{}) { + + ctx, span := tr.Start(ctx, "encryptColConcurrent") + defer span.End() + + resp := make(map[string]interface{}) + // iterate through the key=value supplied (ie field1=myaddress field2=myphonenumber) - for rowNum, unencryptedData := range data.Raw { + for rowNum, unencryptedData := range data { // do we have a key already in config if keyFound { @@ -734,10 +754,9 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr // encrypt it cypherText, err := tinkDetAead.EncryptDeterministically(unencryptedDataBytes, additionalDataBytes) if err != nil { + resp[rowNum] = fmt.Sprintf("%s", unencryptedData) hclog.L().Error("Failed to encrypt", err) - return &logical.Response{ - Data: resp, - }, err + continue } // set the response as the base64 encrypted data @@ -750,10 +769,9 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr // encrypt it cyphertext, err := tinkAead.Encrypt(unencryptedDataBytes, additionalDataBytes) if err != nil { + resp[rowNum] = fmt.Sprintf("%s", unencryptedData) hclog.L().Error("Failed to encrypt", err) - return &logical.Response{ - Data: resp, - }, err + continue } // set the response as the base64 encrypted data @@ -762,14 +780,10 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr } else { // we didn't find a key - return original data resp[rowNum] = fmt.Sprintf("%s", unencryptedData) + continue } } - - encryptSpan.End() - - return &logical.Response{ - Data: resp, - }, nil + ch <- resp } func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { @@ -922,47 +936,62 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr } keySpan.End() - // // retrive the config from storage - // err := b.getAeadConfig(ctx, req) - // if err != nil { - // return nil, err - // } - // resp := make(map[string]interface{}) - - // encryptionkey, keyFound := getEncryptionKey(fieldName) - // // is the key we have retrived deterministic? - // encryptionKeyStr, deterministic := isKeyJsonDeterministic(encryptionkey) - - // var tinkDetAead tink.DeterministicAEAD - // var tinkAead tink.AEAD - - // if keyFound && deterministic { - // // SUPPORT FOR DETERMINISTIC AEAD - // // we don't need the key handle which is returned first - // _, tinkDetAead, err = CreateInsecureHandleAndDeterministicAead(encryptionKeyStr) - // if err != nil { - // hclog.L().Error("Failed to create a key handle", err) - // return &logical.Response{ - // Data: resp, - // }, err - // } - // } else if keyFound && !deterministic { - // // SUPPORT FOR NON DETERMINISTIC AEAD - // _, tinkAead, err = CreateInsecureHandleAndAead(encryptionKeyStr) - // if err != nil { - // hclog.L().Error("Failed to create a key handle", err) - // return &logical.Response{ - // Data: resp, - // }, err - // } - // } - // // set additionalDataBytes as field name of the right type - // additionalDataBytes := getAdditionalData(fieldName, AEAD_CONFIG) - _, decryptSpan := tr.Start(ctx, "decryptCol-doDecryption"+fieldName) - // iterate through the key=value supplied (ie field1=sdfvbbvwrbwr field2=advwefvwfvbwrfvb) - for rowNumber, encryptedDataBase64 := range data.Raw { + maxbatchInt := 1000 //TODO + maxbatch, ok := AEAD_CONFIG.Get("MAX_BATCHCOLROWS") + if !ok { + hclog.L().Error("encryptCol: Could not find a MAX_BATCHCOLROWS in the config") + } else { + // this is an integer value, masquerading as a string, but of type interface{} - go figure + maxbatchStr := maxbatch.(string) + maxbatchInt, err = strconv.Atoi(maxbatchStr) + if err != nil { + hclog.L().Error("encryptCol: Could not convert MAX_BATCHCOLROWS to integer") + } + } + _, makesliceSpan := tr.Start(ctx, fmt.Sprintf("encryptCol-makeslice")) + mapSlice := createSliceOfMapsFromMapStrInt(data.Raw, maxbatchInt) + makesliceSpan.End() + + // ok so now we have a slice of maps of data + + channelCap := len(mapSlice) + channel := make(chan map[string]interface{}, channelCap) + + // call the encrypt or decrypt per broken up map + for _, dataMap := range mapSlice { + go b.decryptColConcurrent(ctx, dataMap, keyFound, deterministic, tinkDetAead, tinkAead, additionalDataBytes, channel) + } + + resultsMap := make(map[string]interface{}) + _, waitSpan := tr.Start(ctx, fmt.Sprintf("encryptCol-wait")) + + for i := 0; i < channelCap; i++ { + res := <-channel + for k, v := range res { + // this should be a map of 1 row of rownumber index as string and the map of values + resultsMap[k] = v + } + } + waitSpan.End() + + decryptSpan.End() + + return &logical.Response{ + Data: resultsMap, + }, nil +} + +func (b *backend) decryptColConcurrent(ctx context.Context, data map[string]interface{}, keyFound bool, deterministic bool, tinkDetAead tink.DeterministicAEAD, tinkAead tink.AEAD, additionalDataBytes []byte, ch chan map[string]interface{}) { + + ctx, span := tr.Start(ctx, "decryptColConcurrent") + defer span.End() + + resp := make(map[string]interface{}) + + // iterate through the key=value supplied (ie field1=myaddress field2=myphonenumber) + for rowNum, encryptedDataBase64 := range data { if keyFound { if deterministic { @@ -973,13 +1002,11 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr // decrypt it plainText, err := tinkDetAead.DecryptDeterministically(encryptedDataBytes, additionalDataBytes) if err != nil { - hclog.L().Error("Failed to decrypt", err) - return &logical.Response{ - Data: resp, - }, err + resp[rowNum] = fmt.Sprintf("%s", encryptedDataBase64) + hclog.L().Error("Failed to deencrypt", err) + continue } - - resp[rowNumber] = string(plainText) + resp[rowNum] = string(plainText) } else { // SUPPORT FOR NON DETERMINISTIC AEAD // set the unencrypted data to be the right type @@ -989,24 +1016,19 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr // encrypt it plainText, err := tinkAead.Decrypt(encryptedDataBytes, additionalDataBytes) if err != nil { - hclog.L().Error("Failed to decrypt", err) - return &logical.Response{ - Data: resp, - }, err + resp[rowNum] = fmt.Sprintf("%s", encryptedDataBase64) + hclog.L().Error("Failed to deencrypt", err) + continue } - - resp[rowNumber] = string(plainText) + resp[rowNum] = string(plainText) } } else { // we didn't find a key - return original data - hclog.L().Info("did not find a key for field " + fieldName) - resp[rowNumber] = fmt.Sprintf("%s", encryptedDataBase64) + resp[rowNum] = fmt.Sprintf("%s", encryptedDataBase64) + continue } } - decryptSpan.End() - return &logical.Response{ - Data: resp, - }, nil + ch <- resp } func isBulkData(data map[string]interface{}) (bool, error) { From 1dfa8348ade820edf5f1278bab7f13b969992c32 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Mon, 13 Feb 2023 10:51:02 +0000 Subject: [PATCH 25/27] marginal improvement to performance --- aeadutils.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/aeadutils.go b/aeadutils.go index db60789..ac702e2 100644 --- a/aeadutils.go +++ b/aeadutils.go @@ -625,13 +625,21 @@ func createSliceOfMapsFromMapStrInt(inputMap map[string]interface{}, maxSize int // make the fist element of the slice and empty (but not nil) map batchMaps = append(batchMaps, make(map[string]interface{})) + // if the map is les than or equal to the maxSize, then the map is the first and opnly element + if len(inputMap) <= maxSize { + batchMaps[0] = inputMap + return batchMaps + } + i, n := 0, 0 + l := len(inputMap) + for k, v := range inputMap { n++ batchMaps[i][k] = v - if n%maxSize == 0 && n != len(inputMap) { + if n%maxSize == 0 && n != l { // create a new element of the slice if we are at max size but not at the last element i++ batchMaps = append(batchMaps, make(map[string]interface{})) From 4868f54ff20ba617fb969f846c3cb828225e2dcd Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Mon, 13 Feb 2023 10:53:04 +0000 Subject: [PATCH 26/27] add fixdata option --- cmd/performance/performance.go | 59 +++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/cmd/performance/performance.go b/cmd/performance/performance.go index c6f0569..69fca22 100644 --- a/cmd/performance/performance.go +++ b/cmd/performance/performance.go @@ -61,6 +61,7 @@ type Options struct { columnBased bool kubeStats bool farmBased bool + fixData string } type Results struct { @@ -142,6 +143,7 @@ func main() { columnBased := flag.Bool("col", false, "column based ops (only if batchMode = true)") kubeStats := flag.Bool("k", false, "collect kube stat averages") farmBased := flag.Bool("farm", false, "farm based column ops (only if batchMode = true)") + fixData := flag.String("fix", "", "fix the dta - no randomisation") flag.Parse() @@ -161,6 +163,7 @@ func main() { options.columnBased = *columnBased options.kubeStats = *kubeStats options.farmBased = *farmBased + options.fixData = *fixData doWaitIfRequired(options) @@ -469,31 +472,43 @@ func makeRandomData(inputMap map[int]map[string]interface{}, options *Options) { // fmt.Println("Options:", options) - for i := 0; i < options.rowNumber; i++ { - inputMap[i] = map[string]interface{}{} - - for j := 0; j < options.fieldNumber; j++ { - randomStr := "" - randomInt := rand.Intn(6) - switch randomInt { - case 0: - randomStr = lorem.New().Email() - case 1: - randomStr = lorem.New().FirstName(lorem.Female) - case 2: - randomStr = lorem.New().FullName(lorem.Male) - case 3: - randomStr = lorem.New().Host() - case 4: - randomStr = lorem.New().Url() - case 5: - randomStr = lorem.New().Word(0, 10) - default: - randomStr = lorem.New().Word(0, 10) + if options.fixData == "" { + for i := 0; i < options.rowNumber; i++ { + inputMap[i] = map[string]interface{}{} + + for j := 0; j < options.fieldNumber; j++ { + randomStr := "" + randomInt := rand.Intn(6) + switch randomInt { + case 0: + randomStr = lorem.New().Email() + case 1: + randomStr = lorem.New().FirstName(lorem.Female) + case 2: + randomStr = lorem.New().FullName(lorem.Male) + case 3: + randomStr = lorem.New().Host() + case 4: + randomStr = lorem.New().Url() + case 5: + randomStr = lorem.New().Word(0, 10) + default: + randomStr = lorem.New().Word(0, 10) + } + + inputMap[i][options.baseFieldName+fmt.Sprint(j)] = randomStr + } + } + } else { + for i := 0; i < options.rowNumber; i++ { + inputMap[i] = map[string]interface{}{} + + for j := 0; j < options.fieldNumber; j++ { - inputMap[i][options.baseFieldName+fmt.Sprint(j)] = randomStr + inputMap[i][options.baseFieldName+fmt.Sprint(j)] = options.fixData + } } } } From 09451fd67c6e2d5b3a7179790acf14223c70b441 Mon Sep 17 00:00:00 2001 From: Andy Shacklady Date: Mon, 13 Feb 2023 10:54:33 +0000 Subject: [PATCH 27/27] optionally split the data by number of cpus and add extra span info --- path_aead.go | 67 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 13 deletions(-) diff --git a/path_aead.go b/path_aead.go index bbffa75..52461ed 100644 --- a/path_aead.go +++ b/path_aead.go @@ -4,7 +4,9 @@ import ( "context" "fmt" "log" + "math" "os" + "runtime" "strconv" "sync" "time" @@ -15,6 +17,7 @@ import ( "cloud.google.com/go/pubsub" hclog "github.com/hashicorp/go-hclog" + "go.opentelemetry.io/otel/attribute" "github.com/google/tink/go/tink" "github.com/google/uuid" @@ -685,16 +688,19 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr _, encryptSpan := tr.Start(ctx, "encryptCol-doEncryption"+fieldName) maxbatchInt := 1000 //TODO - maxbatch, ok := AEAD_CONFIG.Get("MAX_BATCHCOLROWS") + _, ok = AEAD_CONFIG.Get("MAX_BATCHCOLROWS") if !ok { hclog.L().Error("encryptCol: Could not find a MAX_BATCHCOLROWS in the config") + maxbatchInt = len(data.Raw) } else { + fnum := float64(len(data.Raw)) / float64(runtime.NumCPU()) + maxbatchInt = int(math.Ceil(fnum)) // this is an integer value, masquerading as a string, but of type interface{} - go figure - maxbatchStr := maxbatch.(string) - maxbatchInt, err = strconv.Atoi(maxbatchStr) - if err != nil { - hclog.L().Error("encryptCol: Could not convert MAX_BATCHCOLROWS to integer") - } + // maxbatchStr := maxbatch.(string) + // maxbatchInt, err = strconv.Atoi(maxbatchStr) + // if err != nil { + // hclog.L().Error("encryptCol: Could not convert MAX_BATCHCOLROWS to integer") + // } } _, makesliceSpan := tr.Start(ctx, fmt.Sprintf("encryptCol-makeslice")) mapSlice := createSliceOfMapsFromMapStrInt(data.Raw, maxbatchInt) @@ -736,6 +742,15 @@ func (b *backend) encryptCol(ctx context.Context, req *logical.Request, data *fr func (b *backend) encryptColConcurrent(ctx context.Context, data map[string]interface{}, keyFound bool, deterministic bool, tinkDetAead tink.DeterministicAEAD, tinkAead tink.AEAD, additionalDataBytes []byte, ch chan map[string]interface{}) { ctx, span := tr.Start(ctx, "encryptColConcurrent") + rt_ngor := strconv.Itoa(runtime.NumGoroutine()) + rt_ngmp := strconv.Itoa(runtime.GOMAXPROCS(0)) + rt_ncpu := strconv.Itoa(runtime.NumCPU()) + lenData := strconv.Itoa(len(data)) + span.SetAttributes(attribute.Key("NumGoroutine").String(rt_ngor)) + span.SetAttributes(attribute.Key("GOMAXPROCS").String(rt_ngmp)) + span.SetAttributes(attribute.Key("NumCPU").String(rt_ncpu)) + span.SetAttributes(attribute.Key("DataLength").String(lenData)) + defer span.End() resp := make(map[string]interface{}) @@ -792,6 +807,13 @@ func (b *backend) pathAeadDecryptBulkCol(ctx context.Context, req *logical.Reque tr = tp.Tracer("pathAeadDecryptBulkCol-" + hostname) ctx, span := tr.Start(ctx, "pathAeadDecryptBulkCol-"+hostname) + rt_ngor := strconv.Itoa(runtime.NumGoroutine()) + rt_ngmp := strconv.Itoa(runtime.GOMAXPROCS(0)) + rt_ncpu := strconv.Itoa(runtime.NumCPU()) + span.SetAttributes(attribute.Key("NumGoroutine").String(rt_ngor)) + span.SetAttributes(attribute.Key("GOMAXPROCS").String(rt_ngmp)) + span.SetAttributes(attribute.Key("NumCPU").String(rt_ncpu)) + defer func() { span.End() if err := tp.Shutdown(ctx); err != nil { @@ -939,16 +961,19 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr _, decryptSpan := tr.Start(ctx, "decryptCol-doDecryption"+fieldName) maxbatchInt := 1000 //TODO - maxbatch, ok := AEAD_CONFIG.Get("MAX_BATCHCOLROWS") + _, ok = AEAD_CONFIG.Get("MAX_BATCHCOLROWS") if !ok { - hclog.L().Error("encryptCol: Could not find a MAX_BATCHCOLROWS in the config") + hclog.L().Error("decryptCol: Could not find a MAX_BATCHCOLROWS in the config") + maxbatchInt = len(data.Raw) } else { + fnum := float64(len(data.Raw)) / float64(runtime.NumCPU()) + maxbatchInt = int(math.Ceil(fnum)) // this is an integer value, masquerading as a string, but of type interface{} - go figure - maxbatchStr := maxbatch.(string) - maxbatchInt, err = strconv.Atoi(maxbatchStr) - if err != nil { - hclog.L().Error("encryptCol: Could not convert MAX_BATCHCOLROWS to integer") - } + // maxbatchStr := maxbatch.(string) + // maxbatchInt, err = strconv.Atoi(maxbatchStr) + // if err != nil { + // hclog.L().Error("encryptCol: Could not convert MAX_BATCHCOLROWS to integer") + // } } _, makesliceSpan := tr.Start(ctx, fmt.Sprintf("encryptCol-makeslice")) mapSlice := createSliceOfMapsFromMapStrInt(data.Raw, maxbatchInt) @@ -986,6 +1011,15 @@ func (b *backend) decryptCol(ctx context.Context, req *logical.Request, data *fr func (b *backend) decryptColConcurrent(ctx context.Context, data map[string]interface{}, keyFound bool, deterministic bool, tinkDetAead tink.DeterministicAEAD, tinkAead tink.AEAD, additionalDataBytes []byte, ch chan map[string]interface{}) { ctx, span := tr.Start(ctx, "decryptColConcurrent") + rt_ngor := strconv.Itoa(runtime.NumGoroutine()) + rt_ngmp := strconv.Itoa(runtime.GOMAXPROCS(0)) + rt_ncpu := strconv.Itoa(runtime.NumCPU()) + lenData := strconv.Itoa(len(data)) + span.SetAttributes(attribute.Key("NumGoroutine").String(rt_ngor)) + span.SetAttributes(attribute.Key("GOMAXPROCS").String(rt_ngmp)) + span.SetAttributes(attribute.Key("NumCPU").String(rt_ncpu)) + span.SetAttributes(attribute.Key("DataLength").String(lenData)) + defer span.End() resp := make(map[string]interface{}) @@ -1155,6 +1189,13 @@ func (b *backend) pathAeadEncryptBulkColFarm(ctx context.Context, req *logical.R tr = tp.Tracer("pathAeadEncryptBulkColFarm-" + hostname) ctx, span := tr.Start(ctx, "pathAeadEncryptBulkColFarm-"+hostname) + rt_ngor := strconv.Itoa(runtime.NumGoroutine()) + rt_ngmp := strconv.Itoa(runtime.GOMAXPROCS(0)) + rt_ncpu := strconv.Itoa(runtime.NumCPU()) + span.SetAttributes(attribute.Key("NumGoroutine").String(rt_ngor)) + span.SetAttributes(attribute.Key("GOMAXPROCS").String(rt_ngmp)) + span.SetAttributes(attribute.Key("NumCPU").String(rt_ncpu)) + defer func() { span.End() if err := tp.Shutdown(ctx); err != nil {