From ff3d087d300242108aa34e4fdd1b648175216c64 Mon Sep 17 00:00:00 2001 From: Joe Skazinski Date: Mon, 14 Oct 2024 17:21:10 -0700 Subject: [PATCH 1/4] FMW-70393: initial linting changes --- Makefile | 29 +++++++++++++++++++++++++++-- cmd/kmipgen/main.go | 1 - cmd/kms/main.go | 6 +++++- cmd/ppkmip/main.go | 3 +-- src/handlers/key.go | 4 ++-- src/kmipapi/clientapi.go | 4 ++-- src/kmipapi/kmip14.go | 14 +------------- src/kmipapi/kmip20.go | 15 +-------------- src/kmipapi/send.go | 4 ++-- ttlv/encoder_test.go | 1 + ttlv/ttlv.go | 1 - 11 files changed, 42 insertions(+), 40 deletions(-) diff --git a/Makefile b/Makefile index a593187..c107e71 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,25 @@ +.PHONY : all build builddir install ppkmip kmipgen lint vet clean fmt generate test cover up down docker bash fish tidy update tools pykmip-server gen-certs + SHELL = bash BUILD_FLAGS = TEST_FLAGS = COMPOSE ?= docker-compose +APP_NAME := kms + +help: + @echo "" + @echo "-----------------------------------------------------------------------------------" + @echo "make all - remove all" + @echo "make build - build a local executable" + @echo "make install - install the executable" + @echo "make clean - remove build files" + @echo "make tidy - go mod tidy" + @echo "make update - go get -u ./..." + @echo "make lint - golangci-lint run" + @echo "make vet - go vet ./..." + @echo "make fmt - gofumpt -w -l ." + @echo "make kms - build $(APP_NAME) executable" + @echo "" all: fmt build up test lint @@ -14,6 +32,7 @@ builddir: install: go install ./cmd/ppkmip go install ./cmd/kmipgen + install ./$(APP_NAME) /usr/local/bin ppkmip: builddir GOOS=darwin GOARCH=amd64 go build -o build/ppkmip-macos ./cmd/ppkmip @@ -26,8 +45,12 @@ kmipgen: lint: golangci-lint run +vet: + go vet ./... + clean: rm -rf build/* + rm -rf $(APP_NAME) fmt: gofumpt -w -l . @@ -100,5 +123,7 @@ pykmip-server: up gen-certs: openssl req -x509 -newkey rsa:4096 -keyout pykmip-server/server.key -out pykmip-server/server.cert -days 3650 -nodes -subj '/CN=localhost' -.PHONY: all build builddir run artifacts vet lint clean fmt test testall testreport up down pull builder runc ci bash fish image prep vendor.update vendor.ensure tools buildtools migratetool db.migrate - +kms: + @echo "Build local $(APP_NAME)..." + go build -o $(APP_NAME) -ldflags "-X main.buildTime=`date -u '+%Y-%m-%dT%H:%M:%S'`" ./cmd/$(APP_NAME)/main.go + ls -lh $(APP_NAME) diff --git a/cmd/kmipgen/main.go b/cmd/kmipgen/main.go index 679578d..065600b 100644 --- a/cmd/kmipgen/main.go +++ b/cmd/kmipgen/main.go @@ -307,7 +307,6 @@ func genCode(s *Specifications) (string, error) { template.Must(tmpl.New("mask").Parse(maskTmpl)) err = tmpl.Execute(buf, in) - if err != nil { return "", merry.Prepend(err, "executing template") } diff --git a/cmd/kms/main.go b/cmd/kms/main.go index 5ca9ef1..bfb3780 100644 --- a/cmd/kms/main.go +++ b/cmd/kms/main.go @@ -57,7 +57,11 @@ func main() { // Restore any previously stored configuration settings filename := "kms.json" if _, err := os.Stat(filename); err == nil { - kmipapi.Restore(ctx, &settings, filename) + err = kmipapi.Restore(ctx, &settings, filename) + if err != nil { + fmt.Printf("ERROR: restoring kms configuration data, filename: %s, error: %v", filename, err) + os.Exit(1) + } } scanner := bufio.NewScanner(os.Stdin) diff --git a/cmd/ppkmip/main.go b/cmd/ppkmip/main.go index 95a2a2e..016021f 100644 --- a/cmd/ppkmip/main.go +++ b/cmd/ppkmip/main.go @@ -13,8 +13,6 @@ import ( "os" "strings" - _ "github.com/Seagate/kmip-go/kmip14" - _ "github.com/Seagate/kmip-go/kmip20" "github.com/Seagate/kmip-go/ttlv" ) @@ -187,6 +185,7 @@ xml format: } printTTLV(outFormat, raw, count) + count++ } case FormatHex: diff --git a/src/handlers/key.go b/src/handlers/key.go index 6fd371f..9edb876 100644 --- a/src/handlers/key.go +++ b/src/handlers/key.go @@ -70,7 +70,7 @@ func GetKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line s return } - key, err := kmipapi.GetKey(ctx, settings, uid) + _, err := kmipapi.GetKey(ctx, settings, uid) if err != nil { fmt.Printf("get key failed for uid (%s) with error: %v\n", uid, err) return @@ -162,7 +162,7 @@ func ClearKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line uid, err := kmipapi.LocateUid(ctx, settings, id, "", "", "", "") if err != nil || uid == "" { - fmt.Printf("locate failed for id (%s), uid (%d), error: %v\n", id, uid, err) + fmt.Printf("locate failed for id (%s), uid (%s), error: %v\n", id, uid, err) success = false } else { fmt.Printf("locate key for id (%s) returned uid (%s)\n", id, uid) diff --git a/src/kmipapi/clientapi.go b/src/kmipapi/clientapi.go index 112e1ba..7f57414 100755 --- a/src/kmipapi/clientapi.go +++ b/src/kmipapi/clientapi.go @@ -281,7 +281,7 @@ func RegisterKey(ctx context.Context, settings *ConfigurationSettings, keymateri // GetAttribute: Register a key func GetAttribute(ctx context.Context, settings *ConfigurationSettings, uid string, attribname1 string) (*GetAttributeResponse, error) { logger := klog.FromContext(ctx) - logger.V(2).Info("++ get attribute ", "uid", uid) + logger.V(0).Info("++ get attribute ", "uid", uid, "attribute", attribname1) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -290,7 +290,7 @@ func GetAttribute(ctx context.Context, settings *ConfigurationSettings, uid stri req := GetAttributeRequest{ UniqueIdentifier: uid, - AttributeName: attribname1, + AttributeName: "Original Creation Date", } kmipResp, err := kmipops.GetAttribute(ctx, settings, &req) diff --git a/src/kmipapi/kmip14.go b/src/kmipapi/kmip14.go index b0c8d70..26c0982 100755 --- a/src/kmipapi/kmip14.go +++ b/src/kmipapi/kmip14.go @@ -34,7 +34,6 @@ func (kmips *kmip14service) Discover(ctx context.Context, settings *Configuratio ProtocolVersion []kmip.ProtocolVersion } err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode DiscoverResponsePayload, error: %v", err) } @@ -55,7 +54,6 @@ func (kmips *kmip14service) Query(ctx context.Context, settings *ConfigurationSe QueryFunction: req.QueryFunction, } decoder, item, err = SendRequestMessage(ctx, settings, uint32(kmip14.OperationQuery), &payload, false) - if err != nil { return nil, err } @@ -113,7 +111,6 @@ func (kmips *kmip14service) CreateKey(ctx context.Context, settings *Configurati }) decoder, item, err = SendRequestMessage(ctx, settings, uint32(kmip14.OperationCreate), &payload, false) - if err != nil { logger.Error(err, "The call to SendRequestMessage failed") return nil, err @@ -122,7 +119,6 @@ func (kmips *kmip14service) CreateKey(ctx context.Context, settings *Configurati // Extract the CreateResponsePayload type of message var respPayload kmip.CreateResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { logger.Error(err, "create key decode value failed") return nil, fmt.Errorf("create key decode value failed, error:%v", err) @@ -289,7 +285,6 @@ func (kmips *kmip14service) DestroyKey(ctx context.Context, settings *Configurat // Extract the DestroyResponsePayload type of message var respPayload kmip.DestroyResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } @@ -321,7 +316,6 @@ func (kmips *kmip14service) ActivateKey(ctx context.Context, settings *Configura // Extract the ActivateResponsePayload type of message var respPayload kmip.ActivateResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } @@ -353,7 +347,6 @@ func (kmips *kmip14service) RevokeKey(ctx context.Context, settings *Configurati // Extract the RevokeResponsePayload type of message var respPayload kmip.RevokeResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } @@ -426,7 +419,6 @@ func (kmips *kmip14service) Register(ctx context.Context, settings *Configuratio } decoder, item, err = SendRequestMessage(ctx, settings, uint32(kmip14.OperationRegister), &payload, false) - if err != nil { logger.Error(err, "The call to SendRequestMessage failed") return nil, err @@ -435,7 +427,6 @@ func (kmips *kmip14service) Register(ctx context.Context, settings *Configuratio // Extract the RegisterResponsePayload type of message var respPayload kmip.RegisterResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { logger.Error(err, "register key decode value failed") return nil, fmt.Errorf("register key decode value failed, error:%v", err) @@ -450,7 +441,7 @@ func (kmips *kmip14service) Register(ctx context.Context, settings *Configuratio // GetAttribute: func (kmips *kmip14service) GetAttribute(ctx context.Context, settings *ConfigurationSettings, req *GetAttributeRequest) (*GetAttributeResponse, error) { logger := klog.FromContext(ctx) - logger.V(4).Info("====== get attribute ======", "uid", req.UniqueIdentifier) + logger.V(4).Info("====== get attribute ======", "req", req) payload := kmip.GetAttributesRequestPayload{ UniqueIdentifier: req.UniqueIdentifier, @@ -466,7 +457,6 @@ func (kmips *kmip14service) GetAttribute(ctx context.Context, settings *Configur // Extract the GetAttributesResponsePayload type of message var respPayload kmip.GetAttributesResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetAttributesResponsePayload, error: %v", err) } @@ -513,7 +503,6 @@ func (kmips *kmip14service) Locate(ctx context.Context, settings *ConfigurationS // Extract the LocateResponsePayload type of message var respPayload kmip.LocateResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } @@ -547,7 +536,6 @@ func (kmips *kmip14service) ReKey(ctx context.Context, settings *ConfigurationSe // Extract the RekeyResponsePayload type of message var respPayload kmip.ReKeyResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } diff --git a/src/kmipapi/kmip20.go b/src/kmipapi/kmip20.go index e44e241..dc72050 100755 --- a/src/kmipapi/kmip20.go +++ b/src/kmipapi/kmip20.go @@ -34,7 +34,6 @@ func (kmips *kmip20service) Discover(ctx context.Context, settings *Configuratio ProtocolVersion []kmip.ProtocolVersion } err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode DiscoverResponsePayload, error: %v", err) } @@ -55,7 +54,6 @@ func (kmips *kmip20service) Query(ctx context.Context, settings *ConfigurationSe QueryFunction: req.QueryFunction, } decoder, item, err = SendRequestMessage(ctx, settings, uint32(kmip14.OperationQuery), &payload, false) - if err != nil { return nil, err } @@ -68,7 +66,6 @@ func (kmips *kmip20service) Query(ctx context.Context, settings *ConfigurationSe CapabilityInformation kmip20.CapabilityInformation } err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode QueryResponsePayload, error: %v", err) } @@ -109,7 +106,6 @@ func (kmips *kmip20service) CreateKey(ctx context.Context, settings *Configurati } decoder, item, err = SendRequestMessage(ctx, settings, uint32(kmip20.OperationCreate), &payload, false) - if err != nil { return nil, err } @@ -117,7 +113,6 @@ func (kmips *kmip20service) CreateKey(ctx context.Context, settings *Configurati // Extract the CreateResponsePayload type of message var respPayload kmip20.CreateResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("create key decode value failed, error:%v", err) } @@ -225,7 +220,7 @@ func (kmips *kmip20service) GetKey(ctx context.Context, settings *ConfigurationS if respPayload.SymmetricKey != nil { if respPayload.SymmetricKey.KeyBlock.KeyValue != nil { - //keybytes := memguard.NewBuffer(64) + // keybytes := memguard.NewBuffer(64) if bytes, ok := respPayload.SymmetricKey.KeyBlock.KeyValue.KeyMaterial.([]byte); ok { // convert byes to an encoded string keybytes := hex.EncodeToString(bytes) @@ -265,7 +260,6 @@ func (kmips *kmip20service) DestroyKey(ctx context.Context, settings *Configurat // Extract the DestroyResponsePayload type of message var respPayload kmip20.DestroyResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } @@ -297,7 +291,6 @@ func (kmips *kmip20service) ActivateKey(ctx context.Context, settings *Configura // Extract the ActivateResponsePayload type of message var respPayload kmip20.ActivateResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("activate key decode value failed, error: %v", err) } @@ -332,7 +325,6 @@ func (kmips *kmip20service) RevokeKey(ctx context.Context, settings *Configurati // Extract the RevokeResponsePayload type of message var respPayload kmip20.RevokeResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } @@ -418,7 +410,6 @@ func (kmips *kmip20service) Register(ctx context.Context, settings *Configuratio // Extract the RegisterResponsePayload type of message var respPayload kmip20.RegisterResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { logger.Error(err, "register key decode value failed") return nil, fmt.Errorf("register key decode value failed, error:%v", err) @@ -462,7 +453,6 @@ func (kmips *kmip20service) GetAttribute(ctx context.Context, settings *Configur // Extract the GetAttributeResponsePayload type of message var respPayload kmip20.GetAttributesResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { logger.Error(err, "get attribute decode value failed") return nil, fmt.Errorf("get attribute decode value failed, error:%v", err) @@ -499,7 +489,6 @@ func (kmips *kmip20service) Locate(ctx context.Context, settings *ConfigurationS // Extract the LocateResponsePayload type of message var respPayload kmip20.LocateResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } @@ -538,7 +527,6 @@ func (kmips *kmip20service) SetAttribute(ctx context.Context, settings *Configur // Extract the RevokeResponsePayload type of message var respPayload kmip20.RevokeResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } @@ -571,7 +559,6 @@ func (kmips *kmip20service) ReKey(ctx context.Context, settings *ConfigurationSe // Extract the RekeyResponsePayload type of message var respPayload kmip.ReKeyResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - if err != nil { return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } diff --git a/src/kmipapi/send.go b/src/kmipapi/send.go index 79eaa8d..b7c587b 100644 --- a/src/kmipapi/send.go +++ b/src/kmipapi/send.go @@ -127,7 +127,7 @@ func SendRequestMessage(ctx context.Context, settings *ConfigurationSettings, op if respMsg.BatchItem[j].ResultStatus != kmip14.ResultStatusSuccess { logger.V(4).Info("send message results", "ResultStatus", respMsg.BatchItem[j].ResultStatus, "ResultReason", respMsg.BatchItem[j].ResultReason, "ResultMessage", respMsg.BatchItem[j].ResultMessage) - return nil, nil, fmt.Errorf("send operation (%s) status (%s) reason (%s) message (%s)", + return nil, nil, fmt.Errorf("send operation (%d) status (%s) reason (%s) message (%s)", operation, respMsg.BatchItem[j].ResultStatus, respMsg.BatchItem[j].ResultReason, respMsg.BatchItem[j].ResultMessage) } } @@ -138,7 +138,7 @@ func SendRequestMessage(ctx context.Context, settings *ConfigurationSettings, op return decoder, &respMsg.BatchItem[i], nil } else { return nil, nil, fmt.Errorf( - "Server status (%s) reason (%s) message (%s)", + "server status (%s) reason (%s) message (%s)", respMsg.BatchItem[i].ResultStatus, respMsg.BatchItem[i].ResultReason, respMsg.BatchItem[i].ResultMessage) } diff --git a/ttlv/encoder_test.go b/ttlv/encoder_test.go index 6b85777..fb67731 100644 --- a/ttlv/encoder_test.go +++ b/ttlv/encoder_test.go @@ -14,6 +14,7 @@ import ( . "github.com/Seagate/kmip-go/kmip14" . "github.com/Seagate/kmip-go/ttlv" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/ttlv/ttlv.go b/ttlv/ttlv.go index ee1921a..c1753eb 100644 --- a/ttlv/ttlv.go +++ b/ttlv/ttlv.go @@ -17,7 +17,6 @@ import ( "github.com/ansel1/merry" ) -//nolint:deadcode,varcheck const ( lenTag = 3 lenLen = 4 From 014af05e2ff1b304b026c48049e6fb296571cffc Mon Sep 17 00:00:00 2001 From: Joe Skazinski Date: Tue, 15 Oct 2024 09:49:04 -0700 Subject: [PATCH 2/4] reduced kmipapi ConfigurationSettings, pas tls.Conn pointer --- .gitignore | 3 +- Makefile | 9 +- cmd/kms/CHANGELOG.md | 7 + cmd/kms/Makefile | 30 - cmd/kms/main.go | 41 +- go.mod | 8 +- go.sum | 1083 +----------------------------------- pkg/common/types.go | 7 + src/handlers/env.go | 96 ++-- src/handlers/handlers.go | 7 +- src/handlers/help.go | 13 +- src/handlers/key.go | 80 +-- src/handlers/server.go | 39 +- src/kmipapi/clientapi.go | 69 ++- src/kmipapi/config.go | 69 ++- src/kmipapi/kmip14.go | 47 +- src/kmipapi/kmip20.go | 49 +- src/kmipapi/kmipservice.go | 25 +- src/kmipapi/send.go | 9 +- src/kmipapi/types.go | 25 +- 20 files changed, 346 insertions(+), 1370 deletions(-) delete mode 100644 cmd/kms/Makefile create mode 100644 pkg/common/types.go diff --git a/.gitignore b/.gitignore index 6799b57..23499c2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ build vendor /pykmip-server/server.log /pykmip-server/server.db -cmd/kms/kms \ No newline at end of file +cmd/kms/kms +kms \ No newline at end of file diff --git a/Makefile b/Makefile index c107e71..f2564a9 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,8 @@ help: @echo "make lint - golangci-lint run" @echo "make vet - go vet ./..." @echo "make fmt - gofumpt -w -l ." - @echo "make kms - build $(APP_NAME) executable" + @echo "make kms - build $(APP_NAME)" + @echo "make installkms - install $(APP_NAME)" @echo "" all: fmt build up test lint @@ -32,7 +33,6 @@ builddir: install: go install ./cmd/ppkmip go install ./cmd/kmipgen - install ./$(APP_NAME) /usr/local/bin ppkmip: builddir GOOS=darwin GOARCH=amd64 go build -o build/ppkmip-macos ./cmd/ppkmip @@ -123,7 +123,10 @@ pykmip-server: up gen-certs: openssl req -x509 -newkey rsa:4096 -keyout pykmip-server/server.key -out pykmip-server/server.cert -days 3650 -nodes -subj '/CN=localhost' -kms: +kms: cmd/$(APP_NAME)/main.go @echo "Build local $(APP_NAME)..." go build -o $(APP_NAME) -ldflags "-X main.buildTime=`date -u '+%Y-%m-%dT%H:%M:%S'`" ./cmd/$(APP_NAME)/main.go ls -lh $(APP_NAME) + +installkms: + install ./$(APP_NAME) /usr/local/bin diff --git a/cmd/kms/CHANGELOG.md b/cmd/kms/CHANGELOG.md index 7b9ad55..0f690a4 100644 --- a/cmd/kms/CHANGELOG.md +++ b/cmd/kms/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.3.0] (2024-10-14) + +### Features +- Switch to using the standard package `slog` +- Reduce `kmipapi.ConfigurationSettings` to minimal required settings, remove tls.Conn pointer +- Modify all interfaces to pass `connection *tls.Conn` + # [1.2.0] (2022-10-10) ### Features diff --git a/cmd/kms/Makefile b/cmd/kms/Makefile deleted file mode 100644 index 53d0596..0000000 --- a/cmd/kms/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2022 Seagate Technology LLC and/or its Affiliates - -APP_NAME := kms - -help: - @echo "" - @echo "-----------------------------------------------------------------------------------" - @echo "make clean - remove all" - @echo "make local - build a local executable" - @echo "make install - install the executable" - @echo "make run - build a local executable and run it" - @echo "" - -clean: - @echo "Clean up..." - go clean - rm -f $(APP_NAME) - -local: clean - @echo "Build local executable..." - go build -o $(APP_NAME) -ldflags "-X main.buildTime=`date -u '+%Y-%m-%dT%H:%M:%S'`" - ls -lh $(APP_NAME) - -install: - @echo "Installing local executable..." - install ./kms /usr/local/bin - -run: local - @echo "Running $(APP_NAME)..." - ./$(APP_NAME) -v=0 diff --git a/cmd/kms/main.go b/cmd/kms/main.go index bfb3780..08a9fd3 100644 --- a/cmd/kms/main.go +++ b/cmd/kms/main.go @@ -3,16 +3,26 @@ package main import ( "bufio" "context" + "crypto/tls" "flag" "fmt" + "log/slog" "os" + "github.com/Seagate/kmip-go/pkg/common" "github.com/Seagate/kmip-go/src/handlers" "github.com/Seagate/kmip-go/src/kmipapi" - "k8s.io/klog/v2" ) -const version string = "1.2.0" +const version string = "1.3.0" + +// This variable is filled in during the linker step - -ldflags "-X main.buildTime=`date -u '+%Y-%m-%dT%H:%M:%S'`" +var buildTime = "" + +var programLevel = new(slog.LevelVar) // Info by default + +// This variable is used to store the TLS connection for an open session with a KMS server +var tlsConnection *tls.Conn = nil // init: called once during program execution func init() { @@ -21,8 +31,6 @@ func init() { // main: the main application func main() { - klog.InitFlags(nil) - klog.EnableContextualLogging(true) flag.Usage = func() { _, _ = fmt.Fprintf(flag.CommandLine.Output(), "[] kms (version=%s) usage:\n", version) @@ -35,8 +43,10 @@ func main() { } var usage bool + var debug bool flag.BoolVar(&usage, "h", false, "Show usage message.") + flag.BoolVar(&debug, "d", false, "Enable debug log level.") flag.Parse() if usage { @@ -44,7 +54,13 @@ func main() { os.Exit(0) } - fmt.Printf("[] kms (version=%s)\n\n", version) + // Initialize the slog logger + logger := slog.Default() + if debug { + slog.SetLogLoggerLevel(slog.LevelDebug) + } + + fmt.Printf("\n[] kms (version=%s %s)\n\n", version, buildTime) settings := kmipapi.ConfigurationSettings{ ProtocolVersionMajor: 1, @@ -52,16 +68,13 @@ func main() { ServiceType: kmipapi.KMIP14Service, } - ctx := context.Background() + ctx := context.WithValue(context.Background(), common.LoggerKey, logger) // Restore any previously stored configuration settings - filename := "kms.json" - if _, err := os.Stat(filename); err == nil { - err = kmipapi.Restore(ctx, &settings, filename) - if err != nil { - fmt.Printf("ERROR: restoring kms configuration data, filename: %s, error: %v", filename, err) - os.Exit(1) - } + err := kmipapi.Restore(ctx, &settings, "") + if err != nil { + fmt.Printf("ERROR: restoring kms configuration data, error: %v", err) + os.Exit(1) } scanner := bufio.NewScanner(os.Stdin) @@ -74,7 +87,7 @@ func main() { os.Exit(0) } if line != "" { - handlers.Execute(ctx, &settings, line) + handlers.Execute(ctx, &tlsConnection, &settings, line) fmt.Println("") } } diff --git a/go.mod b/go.mod index 9764036..d450068 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/Seagate/kmip-go -go 1.21 +go 1.22 require ( github.com/ansel1/merry v1.8.0 @@ -8,7 +8,7 @@ require ( github.com/gemalto/flume v0.13.1 github.com/google/uuid v1.6.0 github.com/stretchr/testify v1.9.0 - golang.org/x/text v0.17.0 + golang.org/x/text v0.19.0 k8s.io/klog/v2 v2.130.1 ) @@ -20,10 +20,8 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/stretchr/objx v0.5.2 // indirect - go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.24.0 // indirect + golang.org/x/sys v0.26.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 9b3765e..85d7566 100644 --- a/go.sum +++ b/go.sum @@ -1,501 +1,38 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -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/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= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -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/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= -cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= -cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= -cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= -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/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= -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/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= -cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= -cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= -cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= -cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= -cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= -cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= -cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= -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/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= -cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= -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/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= -cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= -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/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= -cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= -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/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= -cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= -cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= -cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= -cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= -cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= -cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= -cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= -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/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= -cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -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/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= -cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= -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/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= -cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= -cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= -cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= -cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= -cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= -cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= -cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= -cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= -cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= -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/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= -cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= -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/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= -cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= -cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= -cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -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/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= -cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= -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/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= -cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= -cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= -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/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= -cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= -cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= -cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= -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/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= -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/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= -cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= -cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= -cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= -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/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= -cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= -cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= -cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= -cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= -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/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= -cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= -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/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= -cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= -cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= -cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= -cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= -cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -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/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= -cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= -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/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= -cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= -cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= -cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= -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/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= -cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= -cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -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/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= -cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= -cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= -cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= -cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= -cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= -cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= -cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= -cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= -cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -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/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= -cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -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/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= -cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= -cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= -cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= -cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -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/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= -cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= -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/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= -cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= -cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= -cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= -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/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= -cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= -cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= -cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= -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/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= -cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= -cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= -cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= -cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= -cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= -cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= -cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= -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/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= -cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= -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/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= -cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= -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/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= -cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= -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.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= -cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= -cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -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/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= -cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= -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/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= -cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= -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/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= -cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= -cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= -cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= -cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= -cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= -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/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= -cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= -cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= -cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= -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/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= -cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= -cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= -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/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= -cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= -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/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= -cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= -cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= -cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= -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/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= -cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= -cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= -cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= -cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= -cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= -cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= -cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= -cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -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/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= -cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= -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.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= -cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= -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/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= -cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= -cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= -cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= -cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= -cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= -cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= -cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= -cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= -cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= -cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= -cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -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/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= -cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= -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/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= -cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= -cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= -cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= -cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= -cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= -cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= -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/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= -cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= -cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= -cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= -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= -cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= -cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= 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/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ansel1/merry v1.5.0/go.mod h1:wUy/yW0JX0ix9GYvUbciq+bi3jW/vlKPlbpI7qdZpOw= github.com/ansel1/merry v1.5.1/go.mod h1:wUy/yW0JX0ix9GYvUbciq+bi3jW/vlKPlbpI7qdZpOw= github.com/ansel1/merry v1.6.1/go.mod h1:ioJjPJ/IsjxH+cC0lpf5TmbKnbcGa9qTk0fDbeRfnGQ= -github.com/ansel1/merry v1.6.2 h1:0xr40haRrfVzmOH/JVOu7KOKGEI1c/7q5EmgTEbn+Ng= -github.com/ansel1/merry v1.6.2/go.mod h1:pAcMW+2uxIgpzEON021vMtFsrymREY6faJWiiz1QGVQ= -github.com/ansel1/merry v1.7.0 h1:r+52BFPDtj0JlFtf0evz4s1d4kPLzaSCYj06+pj4BGc= -github.com/ansel1/merry v1.7.0/go.mod h1:Gr6uWXdwE8lRNqHuxT6aflGcueJoayPj0JyT9yiQgD0= github.com/ansel1/merry v1.8.0 h1:3RddCV1ubXegKphsodbkmZ4QuROep/ZaPCuwlKuCfFg= github.com/ansel1/merry v1.8.0/go.mod h1:wJVu1mHEtEUWq5zTTX9RiWjcE+xL8y7BGYl2VTYdP7M= github.com/ansel1/merry/v2 v2.0.0-beta.10/go.mod h1:OUvUYh4KLVhf3+sR9Hk8QxCukijznkpheEd837b7vLg= -github.com/ansel1/merry/v2 v2.0.1 h1:WeiKZdslHPAPFYxTtgX7clC2Vh75NCoWs5OjCZbIA0A= -github.com/ansel1/merry/v2 v2.0.1/go.mod h1:dD5OhpiPrVkvgseRYd+xgYlx7s6ytU3v9BTTJlDA7FM= -github.com/ansel1/merry/v2 v2.1.0 h1:nWykCjM9YRh0satHsEkG1DB2nrp2LzG9Ovv/tECyF30= -github.com/ansel1/merry/v2 v2.1.0/go.mod h1:zwh/c91JoNfGjk3kIxf8XOzlipNKNLk+Zn7eClhOaW4= -github.com/ansel1/merry/v2 v2.1.1 h1:Ax0gQh7Z/GfimoVg2EDBAU6CJIieWwVvhtBKJdkCE1M= -github.com/ansel1/merry/v2 v2.1.1/go.mod h1:4p/FFyQbCgqlDbseWOVQaL5USpgkE9sr5xh4V6Ry0JU= github.com/ansel1/merry/v2 v2.2.1 h1:PJpynLFvIpJkn8ZGgNHLq332zIyBc/wTqp3o42ZpWdU= github.com/ansel1/merry/v2 v2.2.1/go.mod h1:K9lCkM6tJ8s7LQVQ0ZmZ0WrB3BCyr+ZDzoqotzzoxpI= github.com/ansel1/vespucci/v4 v4.1.1/go.mod h1:zzdrO4IgBfgcGMbGTk/qNGL8JPslmW3nPpcBHKReFYY= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -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/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 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/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -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/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= -github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= -github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= -github.com/gemalto/flume v0.13.0 h1:EEeQvAxyFys3BH8IxEU7ZpM6Kr1sYn20HuZq6dgyMR8= -github.com/gemalto/flume v0.13.0/go.mod h1:3iOEZiK/HD8SnFTqHCQoOHQKaHlBY0b6z55P8SLaOzk= github.com/gemalto/flume v0.13.1 h1:wB9T4HP3D+3FRTymi8BzdDHkdTY8UbzH2eVSfYHmLxQ= github.com/gemalto/flume v0.13.1/go.mod h1:CCm9802zdB4Sy7Jx8dpHaFJjd4fF/nVfCIWBS4f8k9g= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.1.1 h1:ljK/pL5ltg3qoN+OtN6yCv9HWSfMwxSx90GJCZQxYNg= github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= -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-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.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -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= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -504,712 +41,129 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -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/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -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/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/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-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/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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.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/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -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/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -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/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/k0kubun/pp v2.3.0+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.8/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.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.13/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/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -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/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 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= 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/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -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.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -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/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 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= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/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-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -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/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -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= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-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-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= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -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-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= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 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-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/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-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -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/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-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -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/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/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-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-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -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-20191001151750-bb3f8db39f24/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= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -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-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= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-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-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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-20210816183151-1e6c022a8912/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-20210908233432-aa78b53d3365/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-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-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-20220906165534-d0df966e6959 h1:qSa+Hg9oBe6UJXrznE+yYvW51V9UbyIj/nj/KpDigo8= -golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -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.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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -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-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -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-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= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -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-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -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.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -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.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/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= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -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.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= -google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 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= -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= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -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-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= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210224155714-063164c882e6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -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= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -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-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -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-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= 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.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= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -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.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -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/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1220,37 +174,16 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -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/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= 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.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/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/klog/v2 v2.80.0 h1:lyJt0TWMPaGoODa8B8bUuxgHS3W/m/bNr2cca3brA/g= -k8s.io/klog/v2 v2.80.0/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/klog/v2 v2.90.0 h1:VkTxIV/FjRXn1fgNNcKGM8cfmL1Z33ZjXRTVxKCoF5M= -k8s.io/klog/v2 v2.90.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -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= diff --git a/pkg/common/types.go b/pkg/common/types.go new file mode 100644 index 0000000..6352412 --- /dev/null +++ b/pkg/common/types.go @@ -0,0 +1,7 @@ +// Copyright (c) 2024 Seagate Technology LLC and/or its Affiliates + +package common + +type ContextKey string + +const LoggerKey ContextKey = "logger" diff --git a/src/handlers/env.go b/src/handlers/env.go index 6524e2e..73dd0c2 100644 --- a/src/handlers/env.go +++ b/src/handlers/env.go @@ -3,22 +3,23 @@ package handlers import ( "bufio" "context" + "crypto/tls" "errors" - "flag" "fmt" + "log/slog" "os" "strconv" "strings" + "github.com/Seagate/kmip-go/pkg/common" "github.com/Seagate/kmip-go/src/kmipapi" "github.com/fatih/color" - "k8s.io/klog/v2" ) // Env: usage 'env' to display all configuration settings -func Env(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Env:", "line", line) +func Env(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Env:", "line", line) key := color.New(color.FgWhite).SprintFunc() value := color.New(color.FgGreen).SprintFunc() @@ -26,19 +27,25 @@ func Env(ctx context.Context, settings *kmipapi.ConfigurationSettings, line stri col1 := 30 fmt.Println("") - fmt.Printf(" %*s %-v\n", col1, key("SaveSettingsToFile"), value(settings.SaveSettingsToFile)) - fmt.Printf(" %*s %-v\n", col1, key("SettingsFile"), value(settings.SettingsFile)) fmt.Printf(" %*s %-v\n", col1, key("ShowElapsed"), value(settings.ShowElapsed)) - fmt.Println("") - if settings.Connection == nil { - fmt.Printf(" %*s %-v\n", col1, key("Connection"), value(settings.Connection)) + if logger.Enabled(ctx, slog.LevelDebug) { + fmt.Printf(" %*s %-v\n", col1, key("LogLevel"), value("DEBUG")) + } else if logger.Enabled(ctx, slog.LevelInfo) { + fmt.Printf(" %*s %-v\n", col1, key("LogLevel"), value("INFO")) + } else if logger.Enabled(ctx, slog.LevelWarn) { + fmt.Printf(" %*s %-v\n", col1, key("LogLevel"), value("WARN")) + } else if logger.Enabled(ctx, slog.LevelError) { + fmt.Printf(" %*s %-v\n", col1, key("LogLevel"), value("ERROR")) + } + + if *connection == nil { + fmt.Printf(" %*s %-v\n", col1, key("Connection"), value(connection)) } else { - fmt.Printf(" %*s %-v\n", col1, key("Connection"), value(settings.Connection.RemoteAddr())) + fmt.Printf(" %*s %-v\n", col1, key("Connection"), value((*connection).RemoteAddr())) } fmt.Println("") - fmt.Printf(" %*s %-v\n", col1, key("KmsServerName"), value(settings.KmsServerName)) fmt.Printf(" %*s %-v\n", col1, key("KmsServerIp"), value(settings.KmsServerIp)) fmt.Printf(" %*s %-v\n", col1, key("KmsServerPort"), value(settings.KmsServerPort)) fmt.Printf(" %*s %-v\n", col1, key("CertAuthFile"), value(settings.CertAuthFile)) @@ -52,9 +59,9 @@ func Env(ctx context.Context, settings *kmipapi.ConfigurationSettings, line stri } // Version: usage 'version [major=] [minor=]' to set KMIP protocol version -func Version(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Version:", "line", line) +func Version(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Version:", "line", line) major := kmipapi.GetValue(line, "major") if major == "" { @@ -80,9 +87,9 @@ func Version(ctx context.Context, settings *kmipapi.ConfigurationSettings, line } // Certs: usage 'certs [ca=] [key=] [cert=]' to set certificate PEM files -func Certs(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Certs:", "line", line) +func Certs(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Certs:", "line", line) updated := false keys := [3]string{"ca", "key", "cert"} @@ -113,9 +120,9 @@ func Certs(ctx context.Context, settings *kmipapi.ConfigurationSettings, line st } // Run: usage 'run file=' to execute all commands in a file -func Run(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Run:", "line", line) +func Run(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Run:", "line", line) filename := kmipapi.GetValue(line, "file") @@ -134,30 +141,34 @@ func Run(ctx context.Context, settings *kmipapi.ConfigurationSettings, line stri for scanner.Scan() { line := strings.TrimSuffix(scanner.Text(), "\n") if len(line) > 0 { - logger.V(2).Info("process >>>", "line", line) - Execute(ctx, settings, line) + logger.Debug("process >>>", "line", line) + Execute(ctx, connection, settings, line) } } file.Close() } -// Set: usage 'set [level=] [ip=] [port=] [name=]' to change a configuration setting -func Set(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Set:", "line", line) +// Set: usage 'set [level=] [ip=] [port=]' to change a configuration setting +func Set(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Set:", "line", line) // set the log level level := kmipapi.GetValue(line, "level") if level != "" { - flag.Lookup("v").Value.Set(level) - } - - // set the KMS Server name - name := kmipapi.GetValue(line, "name") - if name != "" { - settings.KmsServerName = name - fmt.Printf("KmsServerName set to: %s\n", name) + if strings.EqualFold(level, "debug") { + slog.SetLogLoggerLevel(slog.LevelDebug) + } + if strings.EqualFold(level, "info") { + slog.SetLogLoggerLevel(slog.LevelInfo) + } + if strings.EqualFold(level, "warn") { + slog.SetLogLoggerLevel(slog.LevelWarn) + } + if strings.EqualFold(level, "error") { + slog.SetLogLoggerLevel(slog.LevelError) + } } // set the KMS Server IP Address @@ -191,24 +202,23 @@ func Set(ctx context.Context, settings *kmipapi.ConfigurationSettings, line stri } // Load: usage 'load file=' to load configuration settings from a file -func Load(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Load:", "line", line) +func Load(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Load:", "line", line) filename := kmipapi.GetValue(line, "file") if filename != "" { err := kmipapi.Restore(ctx, settings, filename) if err == nil { - settings.SettingsFile = filename - fmt.Printf("configuration settings read from (%s)\n", settings.SettingsFile) + fmt.Printf("configuration settings read from (%s)\n", filename) } } } // Banner: usage 'banner title=' to print a separator banner with a title -func Banner(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Banner:", "line", line) +func Banner(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Banner:", "line", line) title := kmipapi.GetValue(line, "title") fmt.Printf("\n%s %s %s\n\n", strings.Repeat("=", 40), title, strings.Repeat("=", 40)) diff --git a/src/handlers/handlers.go b/src/handlers/handlers.go index 5990682..d9c5502 100644 --- a/src/handlers/handlers.go +++ b/src/handlers/handlers.go @@ -2,13 +2,14 @@ package handlers import ( "context" + "crypto/tls" "fmt" "time" "github.com/Seagate/kmip-go/src/kmipapi" ) -type CommandHandler func(context.Context, *kmipapi.ConfigurationSettings, string) +type CommandHandler func(context.Context, **tls.Conn, *kmipapi.ConfigurationSettings, string) var g_handlers map[string]CommandHandler @@ -40,11 +41,11 @@ func Initialize() { } // Execute: execute a handler with the text line -func Execute(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { +func Execute(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { f, ok := g_handlers[kmipapi.GetCommand(line)] if ok { start := time.Now() - f(ctx, settings, line) + f(ctx, connection, settings, line) if settings.ShowElapsed { duration := time.Since(start) fmt.Printf("[elapsed=%s] %s\n", duration, kmipapi.GetCommand(line)) diff --git a/src/handlers/help.go b/src/handlers/help.go index 766b58c..28aa78b 100644 --- a/src/handlers/help.go +++ b/src/handlers/help.go @@ -2,16 +2,18 @@ package handlers import ( "context" + "crypto/tls" "fmt" + "log/slog" + "github.com/Seagate/kmip-go/pkg/common" "github.com/Seagate/kmip-go/src/kmipapi" "github.com/fatih/color" - "k8s.io/klog/v2" ) -func Help(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Help:", "line", line) +func Help(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Help:", "line", line) command := color.New(color.FgWhite).SprintFunc() options := color.New(color.FgYellow).SprintFunc() @@ -26,9 +28,8 @@ func Help(ctx context.Context, settings *kmipapi.ConfigurationSettings, line str fmt.Printf(" %*s %-*s %s\n", col1, command("run"), col2, options("file="), comment("// execute all commands contained in a file")) fmt.Printf(" %*s %-*s %s\n", col1, command("load"), col2, options("file="), comment("// load configuration settings from a file")) - fmt.Printf(" %*s %-*s %s\n", col1, command("set"), col2, options("[level=]"), comment("// change the debug log level 0,1,2,3,4,5,etc")) + fmt.Printf(" %*s %-*s %s\n", col1, command("set"), col2, options("[level=]"), comment("// change the log level error, warn, info, debug")) fmt.Printf(" %*s %-*s %s\n", col1, command("set"), col2, options("[ip=] [port=]"), comment("// set the ip and port for the kms server")) - fmt.Printf(" %*s %-*s %s\n", col1, command("set"), col2, options("[name=]"), comment("// set a name for the kms server")) fmt.Printf(" %*s %-*s %s\n", col1, command("set"), col2, options("[elapsed=]"), comment("// set show elapsed to true or false")) fmt.Printf(" %*s %-*s %s\n", col1, command("version"), col2, options("[major=] [minor=]"), comment("// change the KMIP protocol version")) diff --git a/src/handlers/key.go b/src/handlers/key.go index 9edb876..0751941 100644 --- a/src/handlers/key.go +++ b/src/handlers/key.go @@ -2,11 +2,13 @@ package handlers import ( "context" + "crypto/tls" "fmt" + "log/slog" "github.com/Seagate/kmip-go/kmip14" + "github.com/Seagate/kmip-go/pkg/common" "github.com/Seagate/kmip-go/src/kmipapi" - "k8s.io/klog/v2" ) // @@ -16,9 +18,9 @@ import ( // // CreateKey: usage 'create id=' to create a new kmip cryptographic key -func CreateKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("CreateKey", "line", line) +func CreateKey(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("CreateKey", "line", line) id := kmipapi.GetValue(line, "id") if id == "" { @@ -26,7 +28,7 @@ func CreateKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, lin return } - uid, err := kmipapi.CreateKey(ctx, settings, id) + uid, err := kmipapi.CreateKey(ctx, *connection, settings, id) if err != nil { fmt.Printf("create key failed for id (%s) with error: %v\n", id, err) return @@ -39,9 +41,9 @@ func CreateKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, lin } // ActivateKey: usage 'activate uid=' to activate unique identifier -func ActivateKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("ActivateKey", "line", line) +func ActivateKey(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("ActivateKey", "line", line) uid := kmipapi.GetValue(line, "uid") if uid == "" { @@ -49,7 +51,7 @@ func ActivateKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, l return } - uid, err := kmipapi.ActivateKey(ctx, settings, uid) + uid, err := kmipapi.ActivateKey(ctx, *connection, settings, uid) if err != nil { fmt.Printf("activate key failed for uid (%s) with error: %v\n", uid, err) return @@ -59,9 +61,9 @@ func ActivateKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, l } // GetKey: usage 'get uid=' to retrieve kmip cryptographic key material -func GetKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("GetKey", "line", line) +func GetKey(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("GetKey", "line", line) uid := kmipapi.GetValue(line, "uid") @@ -70,7 +72,7 @@ func GetKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line s return } - _, err := kmipapi.GetKey(ctx, settings, uid) + _, err := kmipapi.GetKey(ctx, *connection, settings, uid) if err != nil { fmt.Printf("get key failed for uid (%s) with error: %v\n", uid, err) return @@ -80,9 +82,9 @@ func GetKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line s } // LocateKey: usage 'locate id=' to return the uid of the id, where id is required -func LocateKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("LocateKey", "line", line) +func LocateKey(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("LocateKey", "line", line) id := kmipapi.GetValue(line, "id") attribname1 := kmipapi.GetValue(line, "attribname1") @@ -95,7 +97,7 @@ func LocateKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, lin return } - uid, err := kmipapi.LocateUid(ctx, settings, id, attribname1, attribvalue1, attribname2, attribvalue2) + uid, err := kmipapi.LocateUid(ctx, *connection, settings, id, attribname1, attribvalue1, attribname2, attribvalue2) if err != nil { fmt.Printf("locate failed for id (%s) with error: %v\n", id, err) return @@ -108,9 +110,9 @@ func LocateKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, lin } // RevokeKey: usage 'revoke uid=' to revoke a key based on uid -func RevokeKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("RevokeKey", "line", line) +func RevokeKey(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("RevokeKey", "line", line) uid := kmipapi.GetValue(line, "uid") if uid == "" { @@ -118,7 +120,7 @@ func RevokeKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, lin return } - uid, err := kmipapi.RevokeKey(ctx, settings, uid, uint32(kmip14.RevocationReasonCodeCessationOfOperation)) + uid, err := kmipapi.RevokeKey(ctx, *connection, settings, uid, uint32(kmip14.RevocationReasonCodeCessationOfOperation)) if err != nil { fmt.Printf("revoke key failed for uid (%s) with error: %v\n", uid, err) @@ -128,9 +130,9 @@ func RevokeKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, lin } // DestroyKey: usage 'destroy uid=' to destroy a key based on uid -func DestroyKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("DestroyKey", "line", line) +func DestroyKey(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("DestroyKey", "line", line) uid := kmipapi.GetValue(line, "uid") if uid == "" { @@ -138,7 +140,7 @@ func DestroyKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, li return } - uid, err := kmipapi.DestroyKey(ctx, settings, uid) + uid, err := kmipapi.DestroyKey(ctx, *connection, settings, uid) if err != nil { fmt.Printf("destroy key failed for uid (%s) with error: %v\n", uid, err) return @@ -148,9 +150,9 @@ func DestroyKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, li } // ClearKey: usage 'clear id=' to locate, revoke, and destroy a key based on id and uid -func ClearKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("ClearKey", "line", line) +func ClearKey(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("ClearKey", "line", line) id := kmipapi.GetValue(line, "id") if id == "" { @@ -160,7 +162,7 @@ func ClearKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line success := true - uid, err := kmipapi.LocateUid(ctx, settings, id, "", "", "", "") + uid, err := kmipapi.LocateUid(ctx, *connection, settings, id, "", "", "", "") if err != nil || uid == "" { fmt.Printf("locate failed for id (%s), uid (%s), error: %v\n", id, uid, err) success = false @@ -168,7 +170,7 @@ func ClearKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line fmt.Printf("locate key for id (%s) returned uid (%s)\n", id, uid) fmt.Printf("\n") - uid, err = kmipapi.RevokeKey(ctx, settings, uid, uint32(kmip14.RevocationReasonCodeCessationOfOperation)) + uid, err = kmipapi.RevokeKey(ctx, *connection, settings, uid, uint32(kmip14.RevocationReasonCodeCessationOfOperation)) if err != nil { fmt.Printf("revoke key failed for uid (%s) with error: %v\n", uid, err) success = false @@ -177,7 +179,7 @@ func ClearKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line } fmt.Printf("\n") - uid, err = kmipapi.DestroyKey(ctx, settings, uid) + uid, err = kmipapi.DestroyKey(ctx, *connection, settings, uid) if err != nil { fmt.Printf("destroy key failed for uid (%s) with error: %v\n", uid, err) success = false @@ -195,9 +197,9 @@ func ClearKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line } // Register: -func RegisterKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Register:", "line", line) +func RegisterKey(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Register:", "line", line) // Read command line arguments objtype := kmipapi.GetValue(line, "objtype") // example: secretdata @@ -227,7 +229,7 @@ func RegisterKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, l } // Execute the Register command - uid, err := kmipapi.RegisterKey(ctx, settings, keymaterial, keyformat, datatype, objgrp, attribname1, attribvalue1, attribname2, attribvalue2, attribname3, attribvalue3, attribname4, attribvalue4, objtype, name) + uid, err := kmipapi.RegisterKey(ctx, *connection, settings, keymaterial, keyformat, datatype, objgrp, attribname1, attribvalue1, attribname2, attribvalue2, attribname3, attribvalue3, attribname4, attribvalue4, objtype, name) if err != nil { fmt.Printf("register key failed with error: %v\n", err) return @@ -236,9 +238,9 @@ func RegisterKey(ctx context.Context, settings *kmipapi.ConfigurationSettings, l } // GetAttribute: Return the Attribute details based on uid and attribute name -func GetAttribute(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("GetAttribute", "line", line) +func GetAttribute(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("GetAttribute", "line", line) uid := kmipapi.GetValue(line, "uid") if uid == "" { @@ -247,7 +249,7 @@ func GetAttribute(ctx context.Context, settings *kmipapi.ConfigurationSettings, } attribname1 := kmipapi.GetValue(line, "attribname1") - resp, err := kmipapi.GetAttribute(ctx, settings, uid, attribname1) + resp, err := kmipapi.GetAttribute(ctx, *connection, settings, uid, attribname1) if err != nil { fmt.Printf("get attribute failed for uid (%s) with error: %v\n", uid, err) return diff --git a/src/handlers/server.go b/src/handlers/server.go index 6c503cf..233b572 100644 --- a/src/handlers/server.go +++ b/src/handlers/server.go @@ -2,20 +2,22 @@ package handlers import ( "context" + "crypto/tls" "fmt" + "log/slog" "strconv" "strings" "github.com/Seagate/kmip-go" "github.com/Seagate/kmip-go/kmip14" + "github.com/Seagate/kmip-go/pkg/common" "github.com/Seagate/kmip-go/src/kmipapi" - "k8s.io/klog/v2" ) // Open: Read PEM files and establish a TLS connection with the KMS server -func Open(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Open:", "line", line) +func Open(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Open:", "line", line) // Read command line arguments ip := kmipapi.GetValue(line, "ip") @@ -30,20 +32,21 @@ func Open(ctx context.Context, settings *kmipapi.ConfigurationSettings, line str } // Open a TLS session with the KMS server - err := kmipapi.OpenSession(ctx, settings) + var err error + *connection, err = kmipapi.OpenSession(ctx, settings) if err == nil { - fmt.Printf("TLS Connection opened with (%s:%s)\n", settings.KmsServerIp, settings.KmsServerPort) + fmt.Printf("TLS Connection opened with (%s:%s) remote (%v)\n", settings.KmsServerIp, settings.KmsServerPort, (*connection).RemoteAddr()) } else { fmt.Printf("TLS Connection failed to open, error: %v\n", err) } } // Close: Close the TLS connection -func Close(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Close:", "line", line) +func Close(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Close:", "line", line) - err := kmipapi.CloseSession(ctx, settings) + err := kmipapi.CloseSession(ctx, *connection, settings) if err == nil { fmt.Printf("TLS Connection closed with (%s:%s)\n", settings.KmsServerIp, settings.KmsServerPort) } else { @@ -52,9 +55,9 @@ func Close(ctx context.Context, settings *kmipapi.ConfigurationSettings, line st } // Discover: Discover versions supported by a KMS Server -func Discover(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Discover:", "line", line) +func Discover(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Discover:", "line", line) // Read command line arguments major := kmipapi.GetValue(line, "major") @@ -68,7 +71,7 @@ func Discover(ctx context.Context, settings *kmipapi.ConfigurationSettings, line versions = append(versions, kmip.ProtocolVersion{ProtocolVersionMajor: majorInt, ProtocolVersionMinor: minorInt}) } - results, err := kmipapi.DiscoverServer(ctx, settings, versions) + results, err := kmipapi.DiscoverServer(ctx, *connection, settings, versions) if err == nil { fmt.Printf("Discover results: %v\n", results) } else { @@ -77,9 +80,9 @@ func Discover(ctx context.Context, settings *kmipapi.ConfigurationSettings, line } // Query: Query the KMS Server with a specified operation -func Query(ctx context.Context, settings *kmipapi.ConfigurationSettings, line string) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Query:", "line", line) +func Query(ctx context.Context, connection **tls.Conn, settings *kmipapi.ConfigurationSettings, line string) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Query:", "line", line) // Read command line arguments operation := kmipapi.GetValue(line, "op") @@ -91,7 +94,7 @@ func Query(ctx context.Context, settings *kmipapi.ConfigurationSettings, line st queryop = append(queryop, kmip14.QueryFunction(uint32(u64))) } - results, err := kmipapi.QueryServer(ctx, settings, queryop) + results, err := kmipapi.QueryServer(ctx, *connection, settings, queryop) if err == nil { fmt.Printf("Query results: %s\n", results) } else { diff --git a/src/kmipapi/clientapi.go b/src/kmipapi/clientapi.go index 7f57414..0c060a6 100755 --- a/src/kmipapi/clientapi.go +++ b/src/kmipapi/clientapi.go @@ -17,26 +17,26 @@ import ( ) // OpenSession: Read PEM files and establish a TLS connection with the KMS server -func OpenSession(ctx context.Context, settings *ConfigurationSettings) error { +func OpenSession(ctx context.Context, settings *ConfigurationSettings) (*tls.Conn, error) { logger := klog.FromContext(ctx) logger.V(2).Info("Open TLS session", "KmsServerIp", settings.KmsServerIp, "KmsServerPort", settings.KmsServerPort) // Open a session certificate, err := os.ReadFile(settings.CertAuthFile) if err != nil { - return fmt.Errorf("Failed to read CA (%s)", settings.CertAuthFile) + return nil, fmt.Errorf("Failed to read CA (%s)", settings.CertAuthFile) } certificatePool := x509.NewCertPool() ok := certificatePool.AppendCertsFromPEM(certificate) if !ok { - return fmt.Errorf("Failed to append certificate from PEM") + return nil, fmt.Errorf("Failed to append certificate from PEM") } // Load client cert cert, err := tls.LoadX509KeyPair(settings.CertFile, settings.KeyFile) if err != nil { - return fmt.Errorf("Failed to create x509 key pair") + return nil, fmt.Errorf("Failed to create x509 key pair") } tlsConfig := &tls.Config{ @@ -70,25 +70,24 @@ func OpenSession(ctx context.Context, settings *ConfigurationSettings) error { }, } - settings.Connection, err = tls.Dial("tcp", settings.KmsServerIp+":"+settings.KmsServerPort, tlsConfig) + connection, err := tls.Dial("tcp", settings.KmsServerIp+":"+settings.KmsServerPort, tlsConfig) if err != nil { - return fmt.Errorf("TLS Dial failure: %v", err) + return nil, fmt.Errorf("TLS Dial failure: %v", err) } logger.V(2).Info("TLS Connection opened", "KmsServerIp", settings.KmsServerIp, "KmsServerPort", settings.KmsServerPort) - return nil + return connection, nil } // CloseSession: Close the TLS connection with the KMS Server -func CloseSession(ctx context.Context, settings *ConfigurationSettings) error { +func CloseSession(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings) error { logger := klog.FromContext(ctx) - if settings.Connection != nil { - err := settings.Connection.Close() + if connection != nil { + err := connection.Close() if err != nil { return fmt.Errorf("TLS close failure: %v", err) } - settings.Connection = nil } logger.V(2).Info("TLS Connection closed", "KmsServerIp", settings.KmsServerIp, "KmsServerPort", settings.KmsServerPort) @@ -96,7 +95,7 @@ func CloseSession(ctx context.Context, settings *ConfigurationSettings) error { } // Discover: Perform a discover operation to retrieve KMIP protocol versions supported. -func DiscoverServer(ctx context.Context, settings *ConfigurationSettings, clientVersions []kmip.ProtocolVersion) ([]kmip.ProtocolVersion, error) { +func DiscoverServer(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, clientVersions []kmip.ProtocolVersion) ([]kmip.ProtocolVersion, error) { logger := klog.FromContext(ctx) logger.V(2).Info(" ++ discover server", "clientVersions", clientVersions) @@ -109,7 +108,7 @@ func DiscoverServer(ctx context.Context, settings *ConfigurationSettings, client ClientVersions: clientVersions, } - kmipResp, err := kmipops.Discover(ctx, settings, &req) + kmipResp, err := kmipops.Discover(ctx, connection, settings, &req) logger.V(4).Info("discover response", "kmipResp", kmipResp, "error", err) if err != nil { @@ -124,7 +123,7 @@ func DiscoverServer(ctx context.Context, settings *ConfigurationSettings, client } // QueryServer: Perform a query operation. -func QueryServer(ctx context.Context, settings *ConfigurationSettings, queryops []kmip14.QueryFunction) (string, error) { +func QueryServer(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, queryops []kmip14.QueryFunction) (string, error) { logger := klog.FromContext(ctx) logger.V(2).Info(" ++ querying server", "queryops", queryops) @@ -137,7 +136,7 @@ func QueryServer(ctx context.Context, settings *ConfigurationSettings, queryops QueryFunction: queryops, } - kmipResp, err := kmipops.Query(ctx, settings, &req) + kmipResp, err := kmipops.Query(ctx, connection, settings, &req) if err != nil { return "", fmt.Errorf("failed to query server using (%s), err: %v", settings.ServiceType, err) } @@ -156,7 +155,7 @@ func QueryServer(ctx context.Context, settings *ConfigurationSettings, queryops } // CreateKey: Create a unique identifier for a id and return that uid -func CreateKey(ctx context.Context, settings *ConfigurationSettings, id string) (string, error) { +func CreateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, id string) (string, error) { logger := klog.FromContext(ctx) logger.V(2).Info("++ create key", "id", id) @@ -173,7 +172,7 @@ func CreateKey(ctx context.Context, settings *ConfigurationSettings, id string) CryptographicUsageMask: 12, } - kmipResp, err := kmipops.CreateKey(ctx, settings, &req) + kmipResp, err := kmipops.CreateKey(ctx, connection, settings, &req) if err != nil { return "", fmt.Errorf("failed to create key using (%s), err: %v", settings.ServiceType, err) } @@ -187,7 +186,7 @@ func CreateKey(ctx context.Context, settings *ConfigurationSettings, id string) } // ActivateKey: Activate a key created using a unique identifier -func ActivateKey(ctx context.Context, settings *ConfigurationSettings, uid string) (string, error) { +func ActivateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string) (string, error) { logger := klog.FromContext(ctx) logger.V(2).Info("++ activate key", "uid", uid) @@ -200,7 +199,7 @@ func ActivateKey(ctx context.Context, settings *ConfigurationSettings, uid strin UniqueIdentifier: uid, } - kmipResp, err := kmipops.ActivateKey(ctx, settings, &req) + kmipResp, err := kmipops.ActivateKey(ctx, connection, settings, &req) if err != nil { return "", fmt.Errorf("failed to activate key using (%s), err: %v", settings.ServiceType, err) } @@ -213,7 +212,7 @@ func ActivateKey(ctx context.Context, settings *ConfigurationSettings, uid strin } // GetKey: Retrieve a key for a specified UID -func GetKey(ctx context.Context, settings *ConfigurationSettings, uid string) (key *string, err error) { +func GetKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string) (key *string, err error) { logger := klog.FromContext(ctx) logger.V(2).Info("++ get key", "uid", uid) @@ -226,7 +225,7 @@ func GetKey(ctx context.Context, settings *ConfigurationSettings, uid string) (k UniqueIdentifier: uid, } - kmipResp, err := kmipops.GetKey(ctx, settings, &req) + kmipResp, err := kmipops.GetKey(ctx, connection, settings, &req) if err != nil { return nil, fmt.Errorf("failed to get key using (%s), err: %v", settings.ServiceType, err) } @@ -240,7 +239,7 @@ func GetKey(ctx context.Context, settings *ConfigurationSettings, uid string) (k } // RegisterKey: Register a key -func RegisterKey(ctx context.Context, settings *ConfigurationSettings, keymaterial string, keyformat string, datatype string, objgrp string, attribname1 string, attribvalue1 string, attribname2 string, attribvalue2 string, attribname3 string, attribvalue3 string, attribname4 string, attribvalue4 string, objtype string, name string) (string, error) { +func RegisterKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, keymaterial string, keyformat string, datatype string, objgrp string, attribname1 string, attribvalue1 string, attribname2 string, attribvalue2 string, attribname3 string, attribvalue3 string, attribname4 string, attribvalue4 string, objtype string, name string) (string, error) { logger := klog.FromContext(ctx) logger.V(2).Info("++ register key ", "name", name) @@ -266,7 +265,7 @@ func RegisterKey(ctx context.Context, settings *ConfigurationSettings, keymateri Name: name, } - kmipResp, err := kmipops.Register(ctx, settings, &req) + kmipResp, err := kmipops.Register(ctx, connection, settings, &req) if err != nil { return "", fmt.Errorf("failed to register using (%s), err: %v", settings.ServiceType, err) } @@ -279,7 +278,7 @@ func RegisterKey(ctx context.Context, settings *ConfigurationSettings, keymateri } // GetAttribute: Register a key -func GetAttribute(ctx context.Context, settings *ConfigurationSettings, uid string, attribname1 string) (*GetAttributeResponse, error) { +func GetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string, attribname1 string) (*GetAttributeResponse, error) { logger := klog.FromContext(ctx) logger.V(0).Info("++ get attribute ", "uid", uid, "attribute", attribname1) @@ -293,7 +292,7 @@ func GetAttribute(ctx context.Context, settings *ConfigurationSettings, uid stri AttributeName: "Original Creation Date", } - kmipResp, err := kmipops.GetAttribute(ctx, settings, &req) + kmipResp, err := kmipops.GetAttribute(ctx, connection, settings, &req) if err != nil { return nil, fmt.Errorf("failed to get attribute using (%s), err: %v", settings.ServiceType, err) } @@ -306,7 +305,7 @@ func GetAttribute(ctx context.Context, settings *ConfigurationSettings, uid stri } // LocateUid: retrieve a UID for a ID -func LocateUid(ctx context.Context, settings *ConfigurationSettings, id string, attribname1 string, attribvalue1 string, attribname2 string, attribvalue2 string) (string, error) { +func LocateUid(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, id string, attribname1 string, attribvalue1 string, attribname2 string, attribvalue2 string) (string, error) { logger := klog.FromContext(ctx) logger.V(2).Info("++ locate uid", "id", id) @@ -323,7 +322,7 @@ func LocateUid(ctx context.Context, settings *ConfigurationSettings, id string, AttribValue2: attribvalue2, } - kmipResp, err := kmipops.Locate(ctx, settings, &req) + kmipResp, err := kmipops.Locate(ctx, connection, settings, &req) if err != nil { return "", fmt.Errorf("failed to locate using (%s), err: %v", settings.ServiceType, err) } @@ -336,7 +335,7 @@ func LocateUid(ctx context.Context, settings *ConfigurationSettings, id string, } // RevokeKey: revoke a key based on UID -func RevokeKey(ctx context.Context, settings *ConfigurationSettings, uid string, reason uint32) (string, error) { +func RevokeKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string, reason uint32) (string, error) { logger := klog.FromContext(ctx) logger.V(2).Info("++ revoke key", "uid", uid) @@ -350,7 +349,7 @@ func RevokeKey(ctx context.Context, settings *ConfigurationSettings, uid string, RevocationReason: reason, } - kmipResp, err := kmipops.RevokeKey(ctx, settings, &req) + kmipResp, err := kmipops.RevokeKey(ctx, connection, settings, &req) if err != nil { return "", fmt.Errorf("failed to revoke key for uid (%s), err: %v", uid, err) } @@ -363,7 +362,7 @@ func RevokeKey(ctx context.Context, settings *ConfigurationSettings, uid string, } // DestroyKey: destroy a key based on UID -func DestroyKey(ctx context.Context, settings *ConfigurationSettings, uid string) (string, error) { +func DestroyKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string) (string, error) { logger := klog.FromContext(ctx) logger.V(2).Info("++ destroy key", "uid", uid) @@ -376,7 +375,7 @@ func DestroyKey(ctx context.Context, settings *ConfigurationSettings, uid string UniqueIdentifier: uid, } - kmipResp, err := kmipops.DestroyKey(ctx, settings, &req) + kmipResp, err := kmipops.DestroyKey(ctx, connection, settings, &req) if err != nil { return "", fmt.Errorf("failed to destroy key for uid (%s), err: %v", uid, err) } @@ -389,7 +388,7 @@ func DestroyKey(ctx context.Context, settings *ConfigurationSettings, uid string } // SetAttribute: Set an attribute name and value for an uid -func SetAttribute(ctx context.Context, settings *ConfigurationSettings, uid, attributeName, attributeValue string) (string, error) { +func SetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid, attributeName, attributeValue string) (string, error) { logger := klog.FromContext(ctx) logger.V(2).Info("++ set attribute", "uid", uid, "name", attributeName, "value", attributeValue) @@ -404,7 +403,7 @@ func SetAttribute(ctx context.Context, settings *ConfigurationSettings, uid, att AttributeValue: attributeValue, } - kmipResp, err := kmipops.SetAttribute(ctx, settings, &req) + kmipResp, err := kmipops.SetAttribute(ctx, connection, settings, &req) if err != nil { return uid, fmt.Errorf("failed to set attribute for uid (%s), err: %v", uid, err) } @@ -413,7 +412,7 @@ func SetAttribute(ctx context.Context, settings *ConfigurationSettings, uid, att } // ReKey: Assign a new KMIP key for a uid -func ReKey(ctx context.Context, settings *ConfigurationSettings, uid string) (string, error) { +func ReKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string) (string, error) { logger := klog.FromContext(ctx) logger.V(2).Info("++ rekey", "uid", uid) @@ -426,7 +425,7 @@ func ReKey(ctx context.Context, settings *ConfigurationSettings, uid string) (st UniqueIdentifier: uid, } - kmipResp, err := kmipops.ReKey(ctx, settings, &req) + kmipResp, err := kmipops.ReKey(ctx, connection, settings, &req) if err != nil { return "", fmt.Errorf("failed to rekey using uid (%s), err: %v", uid, err) } diff --git a/src/kmipapi/config.go b/src/kmipapi/config.go index 33a6029..c4e6d8c 100644 --- a/src/kmipapi/config.go +++ b/src/kmipapi/config.go @@ -4,15 +4,18 @@ import ( "context" "encoding/json" "fmt" + "log/slog" "os" - "k8s.io/klog/v2" + "github.com/Seagate/kmip-go/pkg/common" ) +var kmsConfigurationFile = "kms.json" + // Store: Save all configuration settings to a JSON file func Store(ctx context.Context, settings *ConfigurationSettings) (err error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("Store configuration settings", "config", settings.SettingsFile) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Info("Store configuration settings", "config", kmsConfigurationFile) // Convert object into JSON format js, err := json.MarshalIndent(settings, "", " ") @@ -23,35 +26,61 @@ func Store(ctx context.Context, settings *ConfigurationSettings) (err error) { // Write report to file // Set permissions so that owner can read/write (6), group can read (first 4), all others can read (second 4) - err = os.WriteFile(settings.SettingsFile, js, 0o644) + err = os.WriteFile(kmsConfigurationFile, js, 0644) if err != nil { - fmt.Printf("unable to write configuration settings to storage, error: %v\n", err) - return fmt.Errorf("unable to write configuration settings to storage, error: %v", err) + fmt.Printf("store unable to write configuration settings to storage, error: %v\n", err) + return fmt.Errorf("store unable to write configuration settings to storage, error: %v", err) } - // fmt.Printf("configuration settings written to (%s)\n", settings.SettingsFile) return nil } // Restore: Read all configuration settings from a JSON file func Restore(ctx context.Context, settings *ConfigurationSettings, filename string) (err error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("Restore configuration settings", "config", filename) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Restore configuration settings", "filename", filename) - file2, err := os.ReadFile(filename) - if err != nil { - fmt.Printf("unable to restore configuration settings from (%s), error: %v\n", filename, err) - return fmt.Errorf("unable to restore configuration settings from (%s), error: %v", filename, err) + if filename == "" { + filename = kmsConfigurationFile } - err = json.Unmarshal([]byte(file2), settings) - if err != nil { - fmt.Printf("unable to unmarshal configuration settings from (%s), error: %v\n", filename, err) - return fmt.Errorf("unable to unmarshal configuration settings from (%s), error: %v", filename, err) - } + if _, err := os.Stat(kmsConfigurationFile); err == nil { + logger.Debug("configuration file exists", "filename", filename) + file2, err := os.ReadFile(filename) + if err != nil { + fmt.Printf("unable to restore configuration settings from (%s), error: %v\n", filename, err) + return fmt.Errorf("unable to restore configuration settings from (%s), error: %v", filename, err) + } - // Set pointers to nil - settings.Connection = nil + err = json.Unmarshal([]byte(file2), settings) + if err != nil { + fmt.Printf("unable to unmarshal configuration settings from (%s), error: %v\n", filename, err) + return fmt.Errorf("unable to unmarshal configuration settings from (%s), error: %v", filename, err) + } + + } else { + logger.Debug("configuration file does NOT exist", "filename", filename) + file, err := os.Create(filename) + if err != nil { + return fmt.Errorf("unable to create file, error: %v", err) + } + defer file.Close() + + // Convert object into JSON format + js, err := json.MarshalIndent(settings, "", " ") + if err != nil { + fmt.Printf("unable to translate configuration settings to JSON, error: %v\n", err) + return fmt.Errorf("unable to translate configuration settings to JSON, error: %v", err) + } + + // Write report to file + // Set permissions so that owner can read/write (6), group can read (first 4), all others can read (second 4) + _, err = file.Write(js) + if err != nil { + fmt.Printf("create unable to write configuration settings to storage, error: %v\n", err) + return fmt.Errorf("create unable to write configuration settings to storage, error: %v", err) + } + } return nil } diff --git a/src/kmipapi/kmip14.go b/src/kmipapi/kmip14.go index 26c0982..4d7ea4e 100755 --- a/src/kmipapi/kmip14.go +++ b/src/kmipapi/kmip14.go @@ -4,6 +4,7 @@ package kmipapi import ( "context" + "crypto/tls" "encoding/hex" "fmt" "math/rand" @@ -15,7 +16,7 @@ import ( ) // Discover: Send a KMIP OperationDiscoverVersion message -func (kmips *kmip14service) Discover(ctx context.Context, settings *ConfigurationSettings, req *DiscoverRequest) (*DiscoverResponse, error) { +func (kmips *kmip14service) Discover(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *DiscoverRequest) (*DiscoverResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== kmip discover ======") @@ -24,7 +25,7 @@ func (kmips *kmip14service) Discover(ctx context.Context, settings *Configuratio ProtocolVersion: req.ClientVersions, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip14.OperationDiscoverVersions), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationDiscoverVersions), &payload, false) if err != nil { return nil, err } @@ -42,7 +43,7 @@ func (kmips *kmip14service) Discover(ctx context.Context, settings *Configuratio } // Query: Retrieve info about KMIP server -func (kmips *kmip14service) Query(ctx context.Context, settings *ConfigurationSettings, req *QueryRequest) (*QueryResponse, error) { +func (kmips *kmip14service) Query(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *QueryRequest) (*QueryResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== query server ======", "id", req.Id) @@ -53,7 +54,7 @@ func (kmips *kmip14service) Query(ctx context.Context, settings *ConfigurationSe payload := kmip.QueryRequestPayload{ QueryFunction: req.QueryFunction, } - decoder, item, err = SendRequestMessage(ctx, settings, uint32(kmip14.OperationQuery), &payload, false) + decoder, item, err = SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationQuery), &payload, false) if err != nil { return nil, err } @@ -82,7 +83,7 @@ func (kmips *kmip14service) Query(ctx context.Context, settings *ConfigurationSe } // CreateKey: Send a KMIP OperationCreate message -func (kmips *kmip14service) CreateKey(ctx context.Context, settings *ConfigurationSettings, req *CreateKeyRequest) (*CreateKeyResponse, error) { +func (kmips *kmip14service) CreateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *CreateKeyRequest) (*CreateKeyResponse, error) { logger := klog.FromContext(ctx) type createReqAttrs struct { @@ -110,7 +111,7 @@ func (kmips *kmip14service) CreateKey(ctx context.Context, settings *Configurati NameType: kmip14.NameTypeUninterpretedTextString, }) - decoder, item, err = SendRequestMessage(ctx, settings, uint32(kmip14.OperationCreate), &payload, false) + decoder, item, err = SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationCreate), &payload, false) if err != nil { logger.Error(err, "The call to SendRequestMessage failed") return nil, err @@ -186,7 +187,7 @@ func ZeroizeMemory(data []byte) { } // GetKey: Send a KMIP OperationGet message -func (kmips *kmip14service) GetKey(ctx context.Context, settings *ConfigurationSettings, req *GetKeyRequest) (*GetKeyResponse, error) { +func (kmips *kmip14service) GetKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *GetKeyRequest) (*GetKeyResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== get key ======", "uid", req.UniqueIdentifier) @@ -196,7 +197,7 @@ func (kmips *kmip14service) GetKey(ctx context.Context, settings *ConfigurationS payload = kmip.GetRequestPayload{UniqueIdentifier: req.UniqueIdentifier} } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip14.OperationGet), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationGet), &payload, false) logger.V(5).Info("get key response item", "item", item) if err != nil { @@ -266,7 +267,7 @@ func (kmips *kmip14service) GetKey(ctx context.Context, settings *ConfigurationS } // DestroyKey: -func (kmips *kmip14service) DestroyKey(ctx context.Context, settings *ConfigurationSettings, req *DestroyKeyRequest) (*DestroyKeyResponse, error) { +func (kmips *kmip14service) DestroyKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *DestroyKeyRequest) (*DestroyKeyResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== destroy key ======", "uid", req.UniqueIdentifier) @@ -276,7 +277,7 @@ func (kmips *kmip14service) DestroyKey(ctx context.Context, settings *Configurat payload = kmip.DestroyRequestPayload{UniqueIdentifier: req.UniqueIdentifier} } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip14.OperationDestroy), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationDestroy), &payload, false) if err != nil { logger.Error(err, "The call to SendRequestMessage failed") return nil, err @@ -296,7 +297,7 @@ func (kmips *kmip14service) DestroyKey(ctx context.Context, settings *Configurat } // ActivateKey: -func (kmips *kmip14service) ActivateKey(ctx context.Context, settings *ConfigurationSettings, req *ActivateKeyRequest) (*ActivateKeyResponse, error) { +func (kmips *kmip14service) ActivateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *ActivateKeyRequest) (*ActivateKeyResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== activate key ======", "uid", req.UniqueIdentifier) @@ -307,7 +308,7 @@ func (kmips *kmip14service) ActivateKey(ctx context.Context, settings *Configura payload = kmip.ActivateRequestPayload{UniqueIdentifier: req.UniqueIdentifier} } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip14.OperationActivate), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationActivate), &payload, false) if err != nil { logger.Error(err, "activate key call to SendRequestMessage failed") return nil, err @@ -327,7 +328,7 @@ func (kmips *kmip14service) ActivateKey(ctx context.Context, settings *Configura } // RevokeKey: -func (kmips *kmip14service) RevokeKey(ctx context.Context, settings *ConfigurationSettings, req *RevokeKeyRequest) (*RevokeKeyResponse, error) { +func (kmips *kmip14service) RevokeKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *RevokeKeyRequest) (*RevokeKeyResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== revoke key ======", "uid", req.UniqueIdentifier) @@ -338,7 +339,7 @@ func (kmips *kmip14service) RevokeKey(ctx context.Context, settings *Configurati }, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip14.OperationRevoke), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationRevoke), &payload, false) if err != nil { logger.Error(err, "revoke key call to SendRequestMessage failed") return nil, err @@ -358,7 +359,7 @@ func (kmips *kmip14service) RevokeKey(ctx context.Context, settings *Configurati } // Register: Register a key -func (kmips *kmip14service) Register(ctx context.Context, settings *ConfigurationSettings, req *RegisterRequest) (*RegisterResponse, error) { +func (kmips *kmip14service) Register(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *RegisterRequest) (*RegisterResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== register key ======") @@ -418,7 +419,7 @@ func (kmips *kmip14service) Register(ctx context.Context, settings *Configuratio }) } - decoder, item, err = SendRequestMessage(ctx, settings, uint32(kmip14.OperationRegister), &payload, false) + decoder, item, err = SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationRegister), &payload, false) if err != nil { logger.Error(err, "The call to SendRequestMessage failed") return nil, err @@ -439,7 +440,7 @@ func (kmips *kmip14service) Register(ctx context.Context, settings *Configuratio } // GetAttribute: -func (kmips *kmip14service) GetAttribute(ctx context.Context, settings *ConfigurationSettings, req *GetAttributeRequest) (*GetAttributeResponse, error) { +func (kmips *kmip14service) GetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *GetAttributeRequest) (*GetAttributeResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== get attribute ======", "req", req) @@ -448,7 +449,7 @@ func (kmips *kmip14service) GetAttribute(ctx context.Context, settings *Configur AttributeName: req.AttributeName, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip14.OperationGetAttributes), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationGetAttributes), &payload, false) if err != nil { logger.Error(err, "The call to SendRequestMessage failed") return nil, err @@ -471,7 +472,7 @@ func (kmips *kmip14service) GetAttribute(ctx context.Context, settings *Configur } // Locate: -func (kmips *kmip14service) Locate(ctx context.Context, settings *ConfigurationSettings, req *LocateRequest) (*LocateResponse, error) { +func (kmips *kmip14service) Locate(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *LocateRequest) (*LocateResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== locate ======", "name", req.Name) @@ -494,7 +495,7 @@ func (kmips *kmip14service) Locate(ctx context.Context, settings *ConfigurationS payload.Attribute = append(payload.Attribute, kmip.NewAttributeFromTag(kmip14.TagObjectType, 0, kmip14.ObjectTypeSecretData)) } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip14.OperationLocate), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationLocate), &payload, false) if err != nil { logger.Error(err, "The call to SendRequestMessage failed") return nil, err @@ -516,18 +517,18 @@ func (kmips *kmip14service) Locate(ctx context.Context, settings *ConfigurationS } // SetAttribute: Not Supported -func (kmips *kmip14service) SetAttribute(ctx context.Context, settings *ConfigurationSettings, req *SetAttributeRequest) (*SetAttributeResponse, error) { +func (kmips *kmip14service) SetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *SetAttributeRequest) (*SetAttributeResponse, error) { return &SetAttributeResponse{}, fmt.Errorf("SetAttribute command is not supported") } // ReKey: -func (kmips *kmip14service) ReKey(ctx context.Context, settings *ConfigurationSettings, req *ReKeyRequest) (*ReKeyResponse, error) { +func (kmips *kmip14service) ReKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *ReKeyRequest) (*ReKeyResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== rekey ======", "uid", req.UniqueIdentifier) payload := kmip.ReKeyRequestPayload{UniqueIdentifier: req.UniqueIdentifier} - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip14.OperationReKey), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationReKey), &payload, false) if err != nil { logger.Error(err, "The call to SendRequestMessage failed") return nil, err diff --git a/src/kmipapi/kmip20.go b/src/kmipapi/kmip20.go index dc72050..dd54487 100755 --- a/src/kmipapi/kmip20.go +++ b/src/kmipapi/kmip20.go @@ -4,6 +4,7 @@ package kmipapi import ( "context" + "crypto/tls" "encoding/hex" "fmt" @@ -15,7 +16,7 @@ import ( ) // Discover: Send a KMIP OperationDiscoverVersion message -func (kmips *kmip20service) Discover(ctx context.Context, settings *ConfigurationSettings, req *DiscoverRequest) (*DiscoverResponse, error) { +func (kmips *kmip20service) Discover(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *DiscoverRequest) (*DiscoverResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== kmips discover ======") @@ -24,7 +25,7 @@ func (kmips *kmip20service) Discover(ctx context.Context, settings *Configuratio ProtocolVersion: req.ClientVersions, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip20.OperationDiscoverVersions), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationDiscoverVersions), &payload, false) if err != nil { return nil, err } @@ -42,7 +43,7 @@ func (kmips *kmip20service) Discover(ctx context.Context, settings *Configuratio } // Query: Retrieve info about KMIP server -func (kmips *kmip20service) Query(ctx context.Context, settings *ConfigurationSettings, req *QueryRequest) (*QueryResponse, error) { +func (kmips *kmip20service) Query(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *QueryRequest) (*QueryResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== query server ======", "id", req.Id) @@ -53,7 +54,7 @@ func (kmips *kmip20service) Query(ctx context.Context, settings *ConfigurationSe payload := kmip.QueryRequestPayload{ QueryFunction: req.QueryFunction, } - decoder, item, err = SendRequestMessage(ctx, settings, uint32(kmip14.OperationQuery), &payload, false) + decoder, item, err = SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationQuery), &payload, false) if err != nil { return nil, err } @@ -76,7 +77,7 @@ func (kmips *kmip20service) Query(ctx context.Context, settings *ConfigurationSe } // CreateKey: Send a KMIP OperationCreate message -func (kmips *kmip20service) CreateKey(ctx context.Context, settings *ConfigurationSettings, req *CreateKeyRequest) (*CreateKeyResponse, error) { +func (kmips *kmip20service) CreateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *CreateKeyRequest) (*CreateKeyResponse, error) { logger := klog.FromContext(ctx) type createReqAttrs struct { @@ -105,7 +106,7 @@ func (kmips *kmip20service) CreateKey(ctx context.Context, settings *Configurati }, } - decoder, item, err = SendRequestMessage(ctx, settings, uint32(kmip20.OperationCreate), &payload, false) + decoder, item, err = SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationCreate), &payload, false) if err != nil { return nil, err } @@ -174,7 +175,7 @@ func (kmips *kmip20service) GenerateLocatePayload(ctx context.Context, settings } // GetKey: Send a KMIP OperationGet message to retrieve key material based on a uid -func (kmips *kmip20service) GetKey(ctx context.Context, settings *ConfigurationSettings, req *GetKeyRequest) (*GetKeyResponse, error) { +func (kmips *kmip20service) GetKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *GetKeyRequest) (*GetKeyResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== get key ======", "uid", req.UniqueIdentifier) @@ -186,7 +187,7 @@ func (kmips *kmip20service) GetKey(ctx context.Context, settings *ConfigurationS }, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip20.OperationGet), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationGet), &payload, false) logger.V(5).Info("get key response item", "item", item) // Extract the GetResponsePayload type of message @@ -240,7 +241,7 @@ func (kmips *kmip20service) GetKey(ctx context.Context, settings *ConfigurationS } // DestroyKey: -func (kmips *kmip20service) DestroyKey(ctx context.Context, settings *ConfigurationSettings, req *DestroyKeyRequest) (*DestroyKeyResponse, error) { +func (kmips *kmip20service) DestroyKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *DestroyKeyRequest) (*DestroyKeyResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== destroy key ======", "uid", req.UniqueIdentifier) @@ -252,7 +253,7 @@ func (kmips *kmip20service) DestroyKey(ctx context.Context, settings *Configurat }, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip20.OperationDestroy), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationDestroy), &payload, false) if err != nil { return nil, err } @@ -271,7 +272,7 @@ func (kmips *kmip20service) DestroyKey(ctx context.Context, settings *Configurat } // ActivateKey: -func (kmips *kmip20service) ActivateKey(ctx context.Context, settings *ConfigurationSettings, req *ActivateKeyRequest) (*ActivateKeyResponse, error) { +func (kmips *kmip20service) ActivateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *ActivateKeyRequest) (*ActivateKeyResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== activate key ======", "uid", req.UniqueIdentifier) @@ -283,7 +284,7 @@ func (kmips *kmip20service) ActivateKey(ctx context.Context, settings *Configura }, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip20.OperationActivate), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationActivate), &payload, false) if err != nil { return nil, err } @@ -302,7 +303,7 @@ func (kmips *kmip20service) ActivateKey(ctx context.Context, settings *Configura } // RevokeKey: -func (kmips *kmip20service) RevokeKey(ctx context.Context, settings *ConfigurationSettings, req *RevokeKeyRequest) (*RevokeKeyResponse, error) { +func (kmips *kmip20service) RevokeKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *RevokeKeyRequest) (*RevokeKeyResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== revoke key ======", "uid", req.UniqueIdentifier) @@ -317,7 +318,7 @@ func (kmips *kmip20service) RevokeKey(ctx context.Context, settings *Configurati }, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip20.OperationRevoke), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationRevoke), &payload, false) if err != nil { return nil, err } @@ -336,7 +337,7 @@ func (kmips *kmip20service) RevokeKey(ctx context.Context, settings *Configurati } // Register: -func (kmips *kmip20service) Register(ctx context.Context, settings *ConfigurationSettings, req *RegisterRequest) (*RegisterResponse, error) { +func (kmips *kmip20service) Register(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *RegisterRequest) (*RegisterResponse, error) { logger := klog.FromContext(ctx) type Attribute struct { @@ -401,7 +402,7 @@ func (kmips *kmip20service) Register(ctx context.Context, settings *Configuratio payload.Attributes = attributes - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip20.OperationRegister), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationRegister), &payload, false) if err != nil { logger.Error(err, "The call to SendRequestMessage failed") return nil, err @@ -420,7 +421,7 @@ func (kmips *kmip20service) Register(ctx context.Context, settings *Configuratio return &RegisterResponse{UniqueIdentifier: uid}, nil } -func (kmips *kmip20service) GetAttribute(ctx context.Context, settings *ConfigurationSettings, req *GetAttributeRequest) (*GetAttributeResponse, error) { +func (kmips *kmip20service) GetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *GetAttributeRequest) (*GetAttributeResponse, error) { // return &GetAttributeResponse{}, fmt.Errorf("ERROR command is not implemented") logger := klog.FromContext(ctx) @@ -444,7 +445,7 @@ func (kmips *kmip20service) GetAttribute(ctx context.Context, settings *Configur }, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip20.OperationGetAttributes), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationGetAttributes), &payload, false) if err != nil { logger.Error(err, "The call to SendRequestMessage failed") return nil, err @@ -464,7 +465,7 @@ func (kmips *kmip20service) GetAttribute(ctx context.Context, settings *Configur } // Locate: -func (kmips *kmip20service) Locate(ctx context.Context, settings *ConfigurationSettings, req *LocateRequest) (*LocateResponse, error) { +func (kmips *kmip20service) Locate(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *LocateRequest) (*LocateResponse, error) { type createReqAttrs struct { Name kmip.Name } @@ -481,7 +482,7 @@ func (kmips *kmip20service) Locate(ctx context.Context, settings *ConfigurationS }, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip20.OperationLocate), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationLocate), &payload, false) if err != nil { return nil, err } @@ -505,7 +506,7 @@ func (kmips *kmip20service) Locate(ctx context.Context, settings *ConfigurationS } // SetAttribute: -func (kmips *kmip20service) SetAttribute(ctx context.Context, settings *ConfigurationSettings, req *SetAttributeRequest) (*SetAttributeResponse, error) { +func (kmips *kmip20service) SetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *SetAttributeRequest) (*SetAttributeResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== set attribute ======", "uid", req.UniqueIdentifier, "value", req.AttributeValue) @@ -519,7 +520,7 @@ func (kmips *kmip20service) SetAttribute(ctx context.Context, settings *Configur // FIXME AttributeValue: req.AttributeValue, } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip20.OperationSetAttribute), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationSetAttribute), &payload, false) if err != nil { return nil, err } @@ -537,7 +538,7 @@ func (kmips *kmip20service) SetAttribute(ctx context.Context, settings *Configur } // ReKey: -func (kmips *kmip20service) ReKey(ctx context.Context, settings *ConfigurationSettings, req *ReKeyRequest) (*ReKeyResponse, error) { +func (kmips *kmip20service) ReKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *ReKeyRequest) (*ReKeyResponse, error) { logger := klog.FromContext(ctx) logger.V(4).Info("====== rekey ======", "uid", req.UniqueIdentifier) @@ -551,7 +552,7 @@ func (kmips *kmip20service) ReKey(ctx context.Context, settings *ConfigurationSe // FIXME }, // FIXME } - decoder, item, err := SendRequestMessage(ctx, settings, uint32(kmip20.OperationReKey), &payload, false) + decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationReKey), &payload, false) if err != nil { return nil, err } diff --git a/src/kmipapi/kmipservice.go b/src/kmipapi/kmipservice.go index becf6db..1184862 100755 --- a/src/kmipapi/kmipservice.go +++ b/src/kmipapi/kmipservice.go @@ -4,22 +4,23 @@ package kmipapi import ( "context" + "crypto/tls" "errors" ) type KMIPOperations interface { - CreateKey(context.Context, *ConfigurationSettings, *CreateKeyRequest) (*CreateKeyResponse, error) - GetKey(context.Context, *ConfigurationSettings, *GetKeyRequest) (*GetKeyResponse, error) - DestroyKey(context.Context, *ConfigurationSettings, *DestroyKeyRequest) (*DestroyKeyResponse, error) - ActivateKey(context.Context, *ConfigurationSettings, *ActivateKeyRequest) (*ActivateKeyResponse, error) - RevokeKey(context.Context, *ConfigurationSettings, *RevokeKeyRequest) (*RevokeKeyResponse, error) - Register(context.Context, *ConfigurationSettings, *RegisterRequest) (*RegisterResponse, error) - Locate(context.Context, *ConfigurationSettings, *LocateRequest) (*LocateResponse, error) - Query(context.Context, *ConfigurationSettings, *QueryRequest) (*QueryResponse, error) - SetAttribute(context.Context, *ConfigurationSettings, *SetAttributeRequest) (*SetAttributeResponse, error) - Discover(context.Context, *ConfigurationSettings, *DiscoverRequest) (*DiscoverResponse, error) - ReKey(context.Context, *ConfigurationSettings, *ReKeyRequest) (*ReKeyResponse, error) - GetAttribute(context.Context, *ConfigurationSettings, *GetAttributeRequest) (*GetAttributeResponse, error) + CreateKey(context.Context, *tls.Conn, *ConfigurationSettings, *CreateKeyRequest) (*CreateKeyResponse, error) + GetKey(context.Context, *tls.Conn, *ConfigurationSettings, *GetKeyRequest) (*GetKeyResponse, error) + DestroyKey(context.Context, *tls.Conn, *ConfigurationSettings, *DestroyKeyRequest) (*DestroyKeyResponse, error) + ActivateKey(context.Context, *tls.Conn, *ConfigurationSettings, *ActivateKeyRequest) (*ActivateKeyResponse, error) + RevokeKey(context.Context, *tls.Conn, *ConfigurationSettings, *RevokeKeyRequest) (*RevokeKeyResponse, error) + Register(context.Context, *tls.Conn, *ConfigurationSettings, *RegisterRequest) (*RegisterResponse, error) + Locate(context.Context, *tls.Conn, *ConfigurationSettings, *LocateRequest) (*LocateResponse, error) + Query(context.Context, *tls.Conn, *ConfigurationSettings, *QueryRequest) (*QueryResponse, error) + SetAttribute(context.Context, *tls.Conn, *ConfigurationSettings, *SetAttributeRequest) (*SetAttributeResponse, error) + Discover(context.Context, *tls.Conn, *ConfigurationSettings, *DiscoverRequest) (*DiscoverResponse, error) + ReKey(context.Context, *tls.Conn, *ConfigurationSettings, *ReKeyRequest) (*ReKeyResponse, error) + GetAttribute(context.Context, *tls.Conn, *ConfigurationSettings, *GetAttributeRequest) (*GetAttributeResponse, error) GenerateCreateKeyPayload(context.Context, *ConfigurationSettings, *CreateKeyRequest) interface{} GenerateLocatePayload(context.Context, *ConfigurationSettings, *LocateRequest) interface{} } diff --git a/src/kmipapi/send.go b/src/kmipapi/send.go index b7c587b..4cccb61 100644 --- a/src/kmipapi/send.go +++ b/src/kmipapi/send.go @@ -4,6 +4,7 @@ import ( "bufio" "bytes" "context" + "crypto/tls" "fmt" "github.com/Seagate/kmip-go" @@ -39,7 +40,7 @@ func BatchCmdGenerateMessage(ctx context.Context, settings *ConfigurationSetting } // SendRequestMessage: Send a KMIP request message -func SendRequestMessage(ctx context.Context, settings *ConfigurationSettings, operation uint32, payload interface{}, dobatch bool) (*ttlv.Decoder, *kmip.ResponseBatchItem, error) { +func SendRequestMessage(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, operation uint32, payload interface{}, dobatch bool) (*ttlv.Decoder, *kmip.ResponseBatchItem, error) { logger := klog.FromContext(ctx) biID := uuid.New() @@ -82,17 +83,17 @@ func SendRequestMessage(ctx context.Context, settings *ConfigurationSettings, op } logger.V(5).Info("KMIP message", "request", kmipreq) - if settings.Connection != nil { + if connection != nil { logger.V(4).Info("(3) write message") - _, err = settings.Connection.Write(kmipreq) + _, err = connection.Write(kmipreq) if err != nil { return nil, nil, fmt.Errorf("failed to write message, error: %v", err) } logger.V(4).Info("(4) read response 1") buf := make([]byte, DefaultBufferSize) - _, err = bufio.NewReader(settings.Connection).Read(buf) + _, err = bufio.NewReader(connection).Read(buf) if err != nil { return nil, nil, fmt.Errorf("failed to read buffer from response, error: %v", err) } diff --git a/src/kmipapi/types.go b/src/kmipapi/types.go index 132ac6e..987892e 100644 --- a/src/kmipapi/types.go +++ b/src/kmipapi/types.go @@ -1,19 +1,14 @@ package kmipapi -import "crypto/tls" - type ConfigurationSettings struct { - SaveSettingsToFile bool `json:"save_settings_to_file"` // Save the configuration settings to a file - SettingsFile string `json:"settings_file"` // Configuration settings storage file - KmsServerName string `json:"kms_server_name"` // KMS server name for informational purposes - KmsServerIp string `json:"kms_server_ip"` // KMS server IP address - KmsServerPort string `json:"kms_server_port"` // KMS server sort, typically 5696 - CertAuthFile string `json:"cert_auth_file"` // Client certificate authority PEM file - KeyFile string `json:"key_file"` // Client private key PEM file - CertFile string `json:"cert_file"` // Client certificate PEM file - Connection *tls.Conn `json:"connection"` // The TLS connection object returned from Dial - ProtocolVersionMajor int `json:"protocol_version_major"` // Major version, 1, 2, or 3 - ProtocolVersionMinor int `json:"protocol_version_minor"` // Minor version for 1.4 or 2.0 - ServiceType string `json:"service_type"` // The KMIP version service string, kmip14, kmip20, etc - ShowElapsed bool `json:"show_elapsed"` // Display the elapsed time for each command executed. + LastWritten int64 `json:"last_written"` // Unix timestamp (seconds since Jan 1, 1970) this data was last written + KmsServerIp string `json:"kms_server_ip"` // KMS server IP address + KmsServerPort string `json:"kms_server_port"` // KMS server sort, typically 5696 + CertAuthFile string `json:"cert_auth_file"` // Client certificate authority PEM file + KeyFile string `json:"key_file"` // Client private key PEM file + CertFile string `json:"cert_file"` // Client certificate PEM file + ProtocolVersionMajor int `json:"protocol_version_major"` // Major version, 1, 2, or 3 + ProtocolVersionMinor int `json:"protocol_version_minor"` // Minor version for 1.4 or 2.0 + ServiceType string `json:"service_type"` // The KMIP version service string, kmip14, kmip20, etc + ShowElapsed bool `json:"show_elapsed"` // Display the elapsed time for each command executed. } From 48141e4ea7b363b6610903327ff3775502060a3d Mon Sep 17 00:00:00 2001 From: Joe Skazinski Date: Tue, 15 Oct 2024 10:27:58 -0700 Subject: [PATCH 3/4] slog changes --- cmd/kms/main.go | 1 - go.mod | 2 - go.sum | 4 -- src/handlers/env.go | 3 +- src/kmipapi/clientapi.go | 69 +++++++++++++------------ src/kmipapi/config.go | 2 +- src/kmipapi/kmip14.go | 109 ++++++++++++++++++++------------------- src/kmipapi/kmip20.go | 99 ++++++++++++++++++----------------- src/kmipapi/send.go | 35 +++++++------ 9 files changed, 160 insertions(+), 164 deletions(-) diff --git a/cmd/kms/main.go b/cmd/kms/main.go index 08a9fd3..a6c2b97 100644 --- a/cmd/kms/main.go +++ b/cmd/kms/main.go @@ -31,7 +31,6 @@ func init() { // main: the main application func main() { - flag.Usage = func() { _, _ = fmt.Fprintf(flag.CommandLine.Output(), "[] kms (version=%s) usage:\n", version) _, _ = fmt.Fprintln(flag.CommandLine.Output(), "") diff --git a/go.mod b/go.mod index d450068..a4acca2 100644 --- a/go.mod +++ b/go.mod @@ -9,13 +9,11 @@ require ( github.com/google/uuid v1.6.0 github.com/stretchr/testify v1.9.0 golang.org/x/text v0.19.0 - k8s.io/klog/v2 v2.130.1 ) require ( github.com/ansel1/merry/v2 v2.2.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/go-logr/logr v1.4.2 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect diff --git a/go.sum b/go.sum index 85d7566..70ea735 100644 --- a/go.sum +++ b/go.sum @@ -27,8 +27,6 @@ github.com/gemalto/flume v0.13.1/go.mod h1:CCm9802zdB4Sy7Jx8dpHaFJjd4fF/nVfCIWBS github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.1.1 h1:ljK/pL5ltg3qoN+OtN6yCv9HWSfMwxSx90GJCZQxYNg= github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -185,5 +183,3 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= -k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= diff --git a/src/handlers/env.go b/src/handlers/env.go index 73dd0c2..76b733e 100644 --- a/src/handlers/env.go +++ b/src/handlers/env.go @@ -40,7 +40,7 @@ func Env(ctx context.Context, connection **tls.Conn, settings *kmipapi.Configura } if *connection == nil { - fmt.Printf(" %*s %-v\n", col1, key("Connection"), value(connection)) + fmt.Printf(" %*s %-v\n", col1, key("Connection"), value(*connection)) } else { fmt.Printf(" %*s %-v\n", col1, key("Connection"), value((*connection).RemoteAddr())) } @@ -211,6 +211,7 @@ func Load(ctx context.Context, connection **tls.Conn, settings *kmipapi.Configur err := kmipapi.Restore(ctx, settings, filename) if err == nil { fmt.Printf("configuration settings read from (%s)\n", filename) + kmipapi.Store(ctx, settings) } } } diff --git a/src/kmipapi/clientapi.go b/src/kmipapi/clientapi.go index 0c060a6..891d3f4 100755 --- a/src/kmipapi/clientapi.go +++ b/src/kmipapi/clientapi.go @@ -9,17 +9,18 @@ import ( "encoding/json" "errors" "fmt" + "log/slog" "os" "github.com/Seagate/kmip-go" "github.com/Seagate/kmip-go/kmip14" - "k8s.io/klog/v2" + "github.com/Seagate/kmip-go/pkg/common" ) // OpenSession: Read PEM files and establish a TLS connection with the KMS server func OpenSession(ctx context.Context, settings *ConfigurationSettings) (*tls.Conn, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info("Open TLS session", "KmsServerIp", settings.KmsServerIp, "KmsServerPort", settings.KmsServerPort) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("Open TLS session", "KmsServerIp", settings.KmsServerIp, "KmsServerPort", settings.KmsServerPort) // Open a session certificate, err := os.ReadFile(settings.CertAuthFile) @@ -75,13 +76,13 @@ func OpenSession(ctx context.Context, settings *ConfigurationSettings) (*tls.Con return nil, fmt.Errorf("TLS Dial failure: %v", err) } - logger.V(2).Info("TLS Connection opened", "KmsServerIp", settings.KmsServerIp, "KmsServerPort", settings.KmsServerPort) + logger.Debug("TLS Connection opened", "KmsServerIp", settings.KmsServerIp, "KmsServerPort", settings.KmsServerPort) return connection, nil } // CloseSession: Close the TLS connection with the KMS Server func CloseSession(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings) error { - logger := klog.FromContext(ctx) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) if connection != nil { err := connection.Close() @@ -90,14 +91,14 @@ func CloseSession(ctx context.Context, connection *tls.Conn, settings *Configura } } - logger.V(2).Info("TLS Connection closed", "KmsServerIp", settings.KmsServerIp, "KmsServerPort", settings.KmsServerPort) + logger.Debug("TLS Connection closed", "KmsServerIp", settings.KmsServerIp, "KmsServerPort", settings.KmsServerPort) return nil } // Discover: Perform a discover operation to retrieve KMIP protocol versions supported. func DiscoverServer(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, clientVersions []kmip.ProtocolVersion) ([]kmip.ProtocolVersion, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info(" ++ discover server", "clientVersions", clientVersions) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug(" ++ discover server", "clientVersions", clientVersions) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -109,7 +110,7 @@ func DiscoverServer(ctx context.Context, connection *tls.Conn, settings *Configu } kmipResp, err := kmipops.Discover(ctx, connection, settings, &req) - logger.V(4).Info("discover response", "kmipResp", kmipResp, "error", err) + logger.Debug("discover response", "kmipResp", kmipResp, "error", err) if err != nil { return nil, fmt.Errorf("failed to discover server using (%s), err: %v", settings.ServiceType, err) @@ -124,8 +125,8 @@ func DiscoverServer(ctx context.Context, connection *tls.Conn, settings *Configu // QueryServer: Perform a query operation. func QueryServer(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, queryops []kmip14.QueryFunction) (string, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info(" ++ querying server", "queryops", queryops) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug(" ++ querying server", "queryops", queryops) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -156,8 +157,8 @@ func QueryServer(ctx context.Context, connection *tls.Conn, settings *Configurat // CreateKey: Create a unique identifier for a id and return that uid func CreateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, id string) (string, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info("++ create key", "id", id) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("++ create key", "id", id) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -187,8 +188,8 @@ func CreateKey(ctx context.Context, connection *tls.Conn, settings *Configuratio // ActivateKey: Activate a key created using a unique identifier func ActivateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string) (string, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info("++ activate key", "uid", uid) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("++ activate key", "uid", uid) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -213,8 +214,8 @@ func ActivateKey(ctx context.Context, connection *tls.Conn, settings *Configurat // GetKey: Retrieve a key for a specified UID func GetKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string) (key *string, err error) { - logger := klog.FromContext(ctx) - logger.V(2).Info("++ get key", "uid", uid) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("++ get key", "uid", uid) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -234,14 +235,14 @@ func GetKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSe return nil, errors.New("failed to get key, KMIP Response was null") } - logger.V(3).Info("++ get key success", "uid", uid) + logger.Debug("++ get key success", "uid", uid) return kmipResp.KeyValue, nil } // RegisterKey: Register a key func RegisterKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, keymaterial string, keyformat string, datatype string, objgrp string, attribname1 string, attribvalue1 string, attribname2 string, attribvalue2 string, attribname3 string, attribvalue3 string, attribname4 string, attribvalue4 string, objtype string, name string) (string, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info("++ register key ", "name", name) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("++ register key ", "name", name) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -279,8 +280,8 @@ func RegisterKey(ctx context.Context, connection *tls.Conn, settings *Configurat // GetAttribute: Register a key func GetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string, attribname1 string) (*GetAttributeResponse, error) { - logger := klog.FromContext(ctx) - logger.V(0).Info("++ get attribute ", "uid", uid, "attribute", attribname1) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("++ get attribute ", "uid", uid, "attribute", attribname1) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -306,8 +307,8 @@ func GetAttribute(ctx context.Context, connection *tls.Conn, settings *Configura // LocateUid: retrieve a UID for a ID func LocateUid(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, id string, attribname1 string, attribvalue1 string, attribname2 string, attribvalue2 string) (string, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info("++ locate uid", "id", id) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("++ locate uid", "id", id) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -336,8 +337,8 @@ func LocateUid(ctx context.Context, connection *tls.Conn, settings *Configuratio // RevokeKey: revoke a key based on UID func RevokeKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string, reason uint32) (string, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info("++ revoke key", "uid", uid) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("++ revoke key", "uid", uid) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -363,8 +364,8 @@ func RevokeKey(ctx context.Context, connection *tls.Conn, settings *Configuratio // DestroyKey: destroy a key based on UID func DestroyKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string) (string, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info("++ destroy key", "uid", uid) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("++ destroy key", "uid", uid) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -389,8 +390,8 @@ func DestroyKey(ctx context.Context, connection *tls.Conn, settings *Configurati // SetAttribute: Set an attribute name and value for an uid func SetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid, attributeName, attributeValue string) (string, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info("++ set attribute", "uid", uid, "name", attributeName, "value", attributeValue) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("++ set attribute", "uid", uid, "name", attributeName, "value", attributeValue) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -413,8 +414,8 @@ func SetAttribute(ctx context.Context, connection *tls.Conn, settings *Configura // ReKey: Assign a new KMIP key for a uid func ReKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, uid string) (string, error) { - logger := klog.FromContext(ctx) - logger.V(2).Info("++ rekey", "uid", uid) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("++ rekey", "uid", uid) kmipops, err := NewKMIPInterface(settings.ServiceType, nil) if err != nil || kmipops == nil { @@ -455,7 +456,7 @@ func BatchCmdCreateList() []kmip.RequestBatchItem { } func BatchCmdAddItem(ctx context.Context, BatchList []kmip.RequestBatchItem, BatchItems BatchListItem, batchnum []byte, batchcount byte) ([]kmip.RequestBatchItem, []byte, error) { - logger := klog.FromContext(ctx) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) batchnum = append(batchnum, byte(batchcount+1)) BatchList = append(BatchList, kmip.RequestBatchItem{ @@ -464,7 +465,7 @@ func BatchCmdAddItem(ctx context.Context, BatchList []kmip.RequestBatchItem, Bat RequestPayload: BatchItems.RequestPayload, }, ) - logger.V(2).Info("++ batch cmd add item", "BatchList", BatchList) + logger.Debug("++ batch cmd add item", "BatchList", BatchList) return BatchList, batchnum, nil } diff --git a/src/kmipapi/config.go b/src/kmipapi/config.go index c4e6d8c..ab2603b 100644 --- a/src/kmipapi/config.go +++ b/src/kmipapi/config.go @@ -26,7 +26,7 @@ func Store(ctx context.Context, settings *ConfigurationSettings) (err error) { // Write report to file // Set permissions so that owner can read/write (6), group can read (first 4), all others can read (second 4) - err = os.WriteFile(kmsConfigurationFile, js, 0644) + err = os.WriteFile(kmsConfigurationFile, js, 0o644) if err != nil { fmt.Printf("store unable to write configuration settings to storage, error: %v\n", err) return fmt.Errorf("store unable to write configuration settings to storage, error: %v", err) diff --git a/src/kmipapi/kmip14.go b/src/kmipapi/kmip14.go index 4d7ea4e..d8fc983 100755 --- a/src/kmipapi/kmip14.go +++ b/src/kmipapi/kmip14.go @@ -7,18 +7,19 @@ import ( "crypto/tls" "encoding/hex" "fmt" + "log/slog" "math/rand" "github.com/Seagate/kmip-go" "github.com/Seagate/kmip-go/kmip14" + "github.com/Seagate/kmip-go/pkg/common" "github.com/Seagate/kmip-go/ttlv" - "k8s.io/klog/v2" ) // Discover: Send a KMIP OperationDiscoverVersion message func (kmips *kmip14service) Discover(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *DiscoverRequest) (*DiscoverResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== kmip discover ======") + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== kmip discover ======") // Leave the payload empty to get all supported versions from server payload := kmip.DiscoverVersionsRequestPayload{ @@ -44,8 +45,8 @@ func (kmips *kmip14service) Discover(ctx context.Context, connection *tls.Conn, // Query: Retrieve info about KMIP server func (kmips *kmip14service) Query(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *QueryRequest) (*QueryResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== query server ======", "id", req.Id) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== query server ======", "id", req.Id) var err error var decoder *ttlv.Decoder @@ -77,14 +78,14 @@ func (kmips *kmip14service) Query(ctx context.Context, connection *tls.Conn, set return nil, fmt.Errorf("unable to decode QueryResponsePayload, error: %v", err) } - logger.V(4).Info("Query", "Payload", respPayload) + logger.Debug("Query", "Payload", respPayload) return &QueryResponse{Operation: respPayload.Operation, ObjectType: respPayload.ObjectType, VendorIdentification: respPayload.VendorIdentification, CapabilityInformation: respPayload.CapabilityInformation}, nil } // CreateKey: Send a KMIP OperationCreate message func (kmips *kmip14service) CreateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *CreateKeyRequest) (*CreateKeyResponse, error) { - logger := klog.FromContext(ctx) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) type createReqAttrs struct { CryptographicAlgorithm kmip14.CryptographicAlgorithm @@ -93,7 +94,7 @@ func (kmips *kmip14service) CreateKey(ctx context.Context, connection *tls.Conn, Name kmip.Name } - logger.V(4).Info("====== create key ======", "id", req.Id) + logger.Debug("====== create key ======", "id", req.Id) var err error var decoder *ttlv.Decoder @@ -113,7 +114,7 @@ func (kmips *kmip14service) CreateKey(ctx context.Context, connection *tls.Conn, decoder, item, err = SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationCreate), &payload, false) if err != nil { - logger.Error(err, "The call to SendRequestMessage failed") + logger.Error("The call to SendRequestMessage failed", "error", err) return nil, err } @@ -121,20 +122,20 @@ func (kmips *kmip14service) CreateKey(ctx context.Context, connection *tls.Conn, var respPayload kmip.CreateResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) if err != nil { - logger.Error(err, "create key decode value failed") + logger.Error("create key decode value failed", "error", err) return nil, fmt.Errorf("create key decode value failed, error:%v", err) } uid := respPayload.UniqueIdentifier - logger.V(4).Info("create key success", "uid", uid) + logger.Debug("create key success", "uid", uid) return &CreateKeyResponse{UniqueIdentifier: uid}, nil } // CreateKey: Send a KMIP OperationCreate message func (kmips *kmip14service) GenerateCreateKeyPayload(ctx context.Context, settings *ConfigurationSettings, req *CreateKeyRequest) interface{} { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== batch create key payload ======", "id", req.Id) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== batch create key payload ======", "id", req.Id) payload := kmip.CreateRequestPayload{ ObjectType: kmip14.ObjectTypeSymmetricKey, @@ -148,14 +149,14 @@ func (kmips *kmip14service) GenerateCreateKeyPayload(ctx context.Context, settin NameType: kmip14.NameTypeUninterpretedTextString, }) - logger.V(4).Info("create", "Payload", payload) + logger.Debug("create", "Payload", payload) return payload } // GenerateLocatePayload: func (kmips *kmip14service) GenerateLocatePayload(ctx context.Context, settings *ConfigurationSettings, req *LocateRequest) interface{} { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== batch locate ======", "name", req.Name) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== batch locate ======", "name", req.Name) Name := kmip.Name{ NameValue: req.Name, @@ -188,8 +189,8 @@ func ZeroizeMemory(data []byte) { // GetKey: Send a KMIP OperationGet message func (kmips *kmip14service) GetKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *GetKeyRequest) (*GetKeyResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== get key ======", "uid", req.UniqueIdentifier) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== get key ======", "uid", req.UniqueIdentifier) payload := kmip.GetRequestPayload{} @@ -198,25 +199,25 @@ func (kmips *kmip14service) GetKey(ctx context.Context, connection *tls.Conn, se } decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationGet), &payload, false) - logger.V(5).Info("get key response item", "item", item) + logger.Debug("get key response item", "item", item) if err != nil { - logger.Error(err, "get key call to SendRequestMessage failed") + logger.Error("get key call to SendRequestMessage failed", "error", err) return nil, err } // Extract the GetResponsePayload type of message var respPayload kmip.GetResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - logger.V(5).Info("get key decode value") + logger.Debug("get key decode value") if err != nil { - logger.Error(err, "get key decode value failed") + logger.Error("get key decode value failed", "error", err) return nil, fmt.Errorf("get key decode value failed, error: %v", err) } uid := respPayload.UniqueIdentifier - logger.V(4).Info("get key success", "uid", uid) + logger.Debug("get key success", "uid", uid) response := GetKeyResponse{ Type: respPayload.ObjectType, @@ -268,8 +269,8 @@ func (kmips *kmip14service) GetKey(ctx context.Context, connection *tls.Conn, se // DestroyKey: func (kmips *kmip14service) DestroyKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *DestroyKeyRequest) (*DestroyKeyResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== destroy key ======", "uid", req.UniqueIdentifier) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== destroy key ======", "uid", req.UniqueIdentifier) payload := kmip.DestroyRequestPayload{} @@ -279,7 +280,7 @@ func (kmips *kmip14service) DestroyKey(ctx context.Context, connection *tls.Conn decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationDestroy), &payload, false) if err != nil { - logger.Error(err, "The call to SendRequestMessage failed") + logger.Error("The call to SendRequestMessage failed", "error", err) return nil, err } @@ -291,15 +292,15 @@ func (kmips *kmip14service) DestroyKey(ctx context.Context, connection *tls.Conn } uid := respPayload.UniqueIdentifier - logger.V(4).Info("XXX DestroyKey response payload", "uid", uid) + logger.Debug("XXX DestroyKey response payload", "uid", uid) return &DestroyKeyResponse{UniqueIdentifier: uid}, nil } // ActivateKey: func (kmips *kmip14service) ActivateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *ActivateKeyRequest) (*ActivateKeyResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== activate key ======", "uid", req.UniqueIdentifier) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== activate key ======", "uid", req.UniqueIdentifier) // payload := kmip.ActivateRequestPayload{UniqueIdentifier: req.UniqueIdentifier} payload := kmip.ActivateRequestPayload{} @@ -310,7 +311,7 @@ func (kmips *kmip14service) ActivateKey(ctx context.Context, connection *tls.Con decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationActivate), &payload, false) if err != nil { - logger.Error(err, "activate key call to SendRequestMessage failed") + logger.Error("activate key call to SendRequestMessage failed", "error", err) return nil, err } @@ -322,15 +323,15 @@ func (kmips *kmip14service) ActivateKey(ctx context.Context, connection *tls.Con } uid := respPayload.UniqueIdentifier - logger.V(4).Info("activate key success", "uid", uid) + logger.Debug("activate key success", "uid", uid) return &ActivateKeyResponse{UniqueIdentifier: uid}, nil } // RevokeKey: func (kmips *kmip14service) RevokeKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *RevokeKeyRequest) (*RevokeKeyResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== revoke key ======", "uid", req.UniqueIdentifier) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== revoke key ======", "uid", req.UniqueIdentifier) payload := kmip.RevokeRequestPayload{ UniqueIdentifier: req.UniqueIdentifier, @@ -341,7 +342,7 @@ func (kmips *kmip14service) RevokeKey(ctx context.Context, connection *tls.Conn, decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationRevoke), &payload, false) if err != nil { - logger.Error(err, "revoke key call to SendRequestMessage failed") + logger.Error("revoke key call to SendRequestMessage failed", "error", err) return nil, err } @@ -353,15 +354,15 @@ func (kmips *kmip14service) RevokeKey(ctx context.Context, connection *tls.Conn, } uid := respPayload.UniqueIdentifier - logger.V(4).Info("XXX RevokeKey response payload", "uid", uid) + logger.Debug("XXX RevokeKey response payload", "uid", uid) return &RevokeKeyResponse{UniqueIdentifier: uid}, nil } // Register: Register a key func (kmips *kmip14service) Register(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *RegisterRequest) (*RegisterResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== register key ======") + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== register key ======") var err error var decoder *ttlv.Decoder @@ -421,7 +422,7 @@ func (kmips *kmip14service) Register(ctx context.Context, connection *tls.Conn, decoder, item, err = SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationRegister), &payload, false) if err != nil { - logger.Error(err, "The call to SendRequestMessage failed") + logger.Error("The call to SendRequestMessage failed", "error", err) return nil, err } @@ -429,20 +430,20 @@ func (kmips *kmip14service) Register(ctx context.Context, connection *tls.Conn, var respPayload kmip.RegisterResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) if err != nil { - logger.Error(err, "register key decode value failed") + logger.Error("register key decode value failed", "error", err) return nil, fmt.Errorf("register key decode value failed, error:%v", err) } uid := respPayload.UniqueIdentifier - logger.V(4).Info("register key success", "uid", uid) + logger.Debug("register key success", "uid", uid) return &RegisterResponse{UniqueIdentifier: uid}, nil } // GetAttribute: func (kmips *kmip14service) GetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *GetAttributeRequest) (*GetAttributeResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== get attribute ======", "req", req) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== get attribute ======", "req", req) payload := kmip.GetAttributesRequestPayload{ UniqueIdentifier: req.UniqueIdentifier, @@ -451,7 +452,7 @@ func (kmips *kmip14service) GetAttribute(ctx context.Context, connection *tls.Co decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationGetAttributes), &payload, false) if err != nil { - logger.Error(err, "The call to SendRequestMessage failed") + logger.Error("The call to SendRequestMessage failed", "error", err) return nil, err } @@ -462,19 +463,19 @@ func (kmips *kmip14service) GetAttribute(ctx context.Context, connection *tls.Co return nil, fmt.Errorf("unable to decode GetAttributesResponsePayload, error: %v", err) } - logger.V(4).Info("XXX GetAttribute response payload", "respPayload", respPayload) + logger.Debug("XXX GetAttribute response payload", "respPayload", respPayload) uid := respPayload.UniqueIdentifier attrib := respPayload.Attribute - logger.V(4).Info("XXX GetAttribute response payload", "uid", respPayload.UniqueIdentifier) + logger.Debug("XXX GetAttribute response payload", "uid", respPayload.UniqueIdentifier) return &GetAttributeResponse{UniqueIdentifier: uid, Attribute: attrib}, nil } // Locate: func (kmips *kmip14service) Locate(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *LocateRequest) (*LocateResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== locate ======", "name", req.Name) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== locate ======", "name", req.Name) Name := kmip.Name{ NameValue: req.Name, @@ -497,7 +498,7 @@ func (kmips *kmip14service) Locate(ctx context.Context, connection *tls.Conn, se decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationLocate), &payload, false) if err != nil { - logger.Error(err, "The call to SendRequestMessage failed") + logger.Error("The call to SendRequestMessage failed", "error", err) return nil, err } @@ -508,10 +509,10 @@ func (kmips *kmip14service) Locate(ctx context.Context, connection *tls.Conn, se return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } - logger.V(4).Info("XXX Locate response payload", "respPayload", respPayload) + logger.Debug("XXX Locate response payload", "respPayload", respPayload) uid := respPayload.UniqueIdentifier - logger.V(4).Info("XXX Locate response payload", "uid", respPayload.UniqueIdentifier) + logger.Debug("XXX Locate response payload", "uid", respPayload.UniqueIdentifier) return &LocateResponse{UniqueIdentifier: uid}, nil } @@ -523,14 +524,14 @@ func (kmips *kmip14service) SetAttribute(ctx context.Context, connection *tls.Co // ReKey: func (kmips *kmip14service) ReKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *ReKeyRequest) (*ReKeyResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== rekey ======", "uid", req.UniqueIdentifier) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== rekey ======", "uid", req.UniqueIdentifier) payload := kmip.ReKeyRequestPayload{UniqueIdentifier: req.UniqueIdentifier} decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip14.OperationReKey), &payload, false) if err != nil { - logger.Error(err, "The call to SendRequestMessage failed") + logger.Error("The call to SendRequestMessage failed", "error", err) return nil, err } @@ -542,7 +543,7 @@ func (kmips *kmip14service) ReKey(ctx context.Context, connection *tls.Conn, set } uid := respPayload.UniqueIdentifier - logger.V(4).Info("xxx ReKey Response Payload", "uid", uid) + logger.Debug("xxx ReKey Response Payload", "uid", uid) return &ReKeyResponse{UniqueIdentifier: uid}, nil } diff --git a/src/kmipapi/kmip20.go b/src/kmipapi/kmip20.go index dd54487..d8333c3 100755 --- a/src/kmipapi/kmip20.go +++ b/src/kmipapi/kmip20.go @@ -7,18 +7,19 @@ import ( "crypto/tls" "encoding/hex" "fmt" + "log/slog" "github.com/Seagate/kmip-go" "github.com/Seagate/kmip-go/kmip14" "github.com/Seagate/kmip-go/kmip20" + "github.com/Seagate/kmip-go/pkg/common" "github.com/Seagate/kmip-go/ttlv" - "k8s.io/klog/v2" ) // Discover: Send a KMIP OperationDiscoverVersion message func (kmips *kmip20service) Discover(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *DiscoverRequest) (*DiscoverResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== kmips discover ======") + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== kmips discover ======") // Leave the payload empty to get all supported versions from server payload := kmip.DiscoverVersionsRequestPayload{ @@ -44,8 +45,8 @@ func (kmips *kmip20service) Discover(ctx context.Context, connection *tls.Conn, // Query: Retrieve info about KMIP server func (kmips *kmip20service) Query(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *QueryRequest) (*QueryResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== query server ======", "id", req.Id) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== query server ======", "id", req.Id) var err error var decoder *ttlv.Decoder @@ -71,14 +72,14 @@ func (kmips *kmip20service) Query(ctx context.Context, connection *tls.Conn, set return nil, fmt.Errorf("unable to decode QueryResponsePayload, error: %v", err) } - logger.V(4).Info("Query", "Payload", respPayload) + logger.Debug("Query", "Payload", respPayload) return &QueryResponse{Operation: respPayload.Operation, ObjectType: respPayload.ObjectType, VendorIdentification: respPayload.VendorIdentification, CapabilityInformation: respPayload.CapabilityInformation}, nil } // CreateKey: Send a KMIP OperationCreate message func (kmips *kmip20service) CreateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *CreateKeyRequest) (*CreateKeyResponse, error) { - logger := klog.FromContext(ctx) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) type createReqAttrs struct { CryptographicAlgorithm kmip14.CryptographicAlgorithm @@ -87,7 +88,7 @@ func (kmips *kmip20service) CreateKey(ctx context.Context, connection *tls.Conn, Name kmip.Name } - logger.V(4).Info("====== create key ======", "id", req.Id) + logger.Debug("====== create key ======", "id", req.Id) var err error var decoder *ttlv.Decoder @@ -119,14 +120,14 @@ func (kmips *kmip20service) CreateKey(ctx context.Context, connection *tls.Conn, } uid := respPayload.UniqueIdentifier - logger.V(4).Info("create key success", "uid", uid) + logger.Debug("create key success", "uid", uid) return &CreateKeyResponse{UniqueIdentifier: uid}, nil } // CreateKey: Send a KMIP OperationCreate message func (kmips *kmip20service) GenerateCreateKeyPayload(ctx context.Context, settings *ConfigurationSettings, req *CreateKeyRequest) interface{} { - logger := klog.FromContext(ctx) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) type createReqAttrs struct { CryptographicAlgorithm kmip14.CryptographicAlgorithm @@ -135,7 +136,7 @@ func (kmips *kmip20service) GenerateCreateKeyPayload(ctx context.Context, settin Name kmip.Name } - logger.V(4).Info("====== batch create key ======", "id", req.Id) + logger.Debug("====== batch create key ======", "id", req.Id) payload := kmip20.CreateRequestPayload{ ObjectType: kmip20.ObjectTypeSymmetricKey, @@ -155,13 +156,13 @@ func (kmips *kmip20service) GenerateCreateKeyPayload(ctx context.Context, settin // Locate: func (kmips *kmip20service) GenerateLocatePayload(ctx context.Context, settings *ConfigurationSettings, req *LocateRequest) interface{} { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== batch locate ======", "name", req.Name) + type createReqAttrs struct { Name kmip.Name } - logger := klog.FromContext(ctx) - logger.V(4).Info("====== batch locate ======", "name", req.Name) - payload := kmip20.LocateRequestPayload{ Attributes: createReqAttrs{ Name: kmip.Name{ @@ -176,8 +177,8 @@ func (kmips *kmip20service) GenerateLocatePayload(ctx context.Context, settings // GetKey: Send a KMIP OperationGet message to retrieve key material based on a uid func (kmips *kmip20service) GetKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *GetKeyRequest) (*GetKeyResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== get key ======", "uid", req.UniqueIdentifier) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== get key ======", "uid", req.UniqueIdentifier) payload := kmip20.GetRequestPayload{ UniqueIdentifier: &kmip20.UniqueIdentifierValue{ @@ -188,19 +189,19 @@ func (kmips *kmip20service) GetKey(ctx context.Context, connection *tls.Conn, se } decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationGet), &payload, false) - logger.V(5).Info("get key response item", "item", item) + logger.Debug("get key response item", "item", item) // Extract the GetResponsePayload type of message var respPayload kmip20.GetResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) - logger.V(5).Info("get key decode value") + logger.Debug("get key decode value") if err != nil { return nil, fmt.Errorf("get key decode value failed, error: %v", err) } uid := respPayload.UniqueIdentifier - logger.V(4).Info("get key success", "uid", uid) + logger.Debug("get key success", "uid", uid) // Example: // ResponsePayload (Structure/144): @@ -242,8 +243,8 @@ func (kmips *kmip20service) GetKey(ctx context.Context, connection *tls.Conn, se // DestroyKey: func (kmips *kmip20service) DestroyKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *DestroyKeyRequest) (*DestroyKeyResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== destroy key ======", "uid", req.UniqueIdentifier) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== destroy key ======", "uid", req.UniqueIdentifier) payload := kmip20.DestroyRequestPayload{ UniqueIdentifier: &kmip20.UniqueIdentifierValue{ @@ -266,15 +267,15 @@ func (kmips *kmip20service) DestroyKey(ctx context.Context, connection *tls.Conn } uid := respPayload.UniqueIdentifier - logger.V(4).Info("XXX DestroyKey response payload", "uid", uid) + logger.Debug("XXX DestroyKey response payload", "uid", uid) return &DestroyKeyResponse{UniqueIdentifier: uid}, nil } // ActivateKey: func (kmips *kmip20service) ActivateKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *ActivateKeyRequest) (*ActivateKeyResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== activate key ======", "uid", req.UniqueIdentifier) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== activate key ======", "uid", req.UniqueIdentifier) payload := kmip20.ActivateRequestPayload{ UniqueIdentifier: &kmip20.UniqueIdentifierValue{ @@ -297,15 +298,15 @@ func (kmips *kmip20service) ActivateKey(ctx context.Context, connection *tls.Con } uid := respPayload.UniqueIdentifier - logger.V(4).Info("activate key success", "uid", uid) + logger.Debug("activate key success", "uid", uid) return &ActivateKeyResponse{UniqueIdentifier: uid}, nil } // RevokeKey: func (kmips *kmip20service) RevokeKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *RevokeKeyRequest) (*RevokeKeyResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== revoke key ======", "uid", req.UniqueIdentifier) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== revoke key ======", "uid", req.UniqueIdentifier) payload := kmip20.RevokeRequestPayload{ UniqueIdentifier: &kmip20.UniqueIdentifierValue{ @@ -331,14 +332,14 @@ func (kmips *kmip20service) RevokeKey(ctx context.Context, connection *tls.Conn, } uid := respPayload.UniqueIdentifier - logger.V(4).Info("XXX RevokeKey response payload", "uid", uid) + logger.Debug("XXX RevokeKey response payload", "uid", uid) return &RevokeKeyResponse{UniqueIdentifier: uid}, nil } // Register: func (kmips *kmip20service) Register(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *RegisterRequest) (*RegisterResponse, error) { - logger := klog.FromContext(ctx) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) type Attribute struct { VendorIdentification string @@ -352,7 +353,7 @@ func (kmips *kmip20service) Register(ctx context.Context, connection *tls.Conn, Name kmip.Name } - logger.V(4).Info("====== register key ======") + logger.Debug("====== register key ======") newkey := []byte(req.KeyMaterial) @@ -404,7 +405,7 @@ func (kmips *kmip20service) Register(ctx context.Context, connection *tls.Conn, decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationRegister), &payload, false) if err != nil { - logger.Error(err, "The call to SendRequestMessage failed") + logger.Error("The call to SendRequestMessage failed", "error", err) return nil, err } @@ -412,21 +413,19 @@ func (kmips *kmip20service) Register(ctx context.Context, connection *tls.Conn, var respPayload kmip20.RegisterResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) if err != nil { - logger.Error(err, "register key decode value failed") + logger.Error("register key decode value failed", "error", err) return nil, fmt.Errorf("register key decode value failed, error:%v", err) } uid := respPayload.UniqueIdentifier - logger.V(4).Info("register key success", "uid", uid) + logger.Debug("register key success", "uid", uid) return &RegisterResponse{UniqueIdentifier: uid}, nil } func (kmips *kmip20service) GetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *GetAttributeRequest) (*GetAttributeResponse, error) { - // return &GetAttributeResponse{}, fmt.Errorf("ERROR command is not implemented") - - logger := klog.FromContext(ctx) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) - logger.V(4).Info("====== get attribute ======") + logger.Debug("====== get attribute ======") type createReqAttrs struct { VendorIdentification string @@ -447,7 +446,7 @@ func (kmips *kmip20service) GetAttribute(ctx context.Context, connection *tls.Co decoder, item, err := SendRequestMessage(ctx, connection, settings, uint32(kmip20.OperationGetAttributes), &payload, false) if err != nil { - logger.Error(err, "The call to SendRequestMessage failed") + logger.Error("The call to SendRequestMessage failed", "error", err) return nil, err } @@ -455,24 +454,24 @@ func (kmips *kmip20service) GetAttribute(ctx context.Context, connection *tls.Co var respPayload kmip20.GetAttributesResponsePayload err = decoder.DecodeValue(&respPayload, item.ResponsePayload.(ttlv.TTLV)) if err != nil { - logger.Error(err, "get attribute decode value failed") + logger.Error("get attribute decode value failed", "error", err) return nil, fmt.Errorf("get attribute decode value failed, error:%v", err) } uid := respPayload.UniqueIdentifier - logger.V(4).Info("get attribute success", "uid", uid) + logger.Debug("get attribute success", "uid", uid) return &GetAttributeResponse{UniqueIdentifier: uid}, nil } // Locate: func (kmips *kmip20service) Locate(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *LocateRequest) (*LocateResponse, error) { + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== locate ======", "name", req.Name) + type createReqAttrs struct { Name kmip.Name } - logger := klog.FromContext(ctx) - logger.V(4).Info("====== locate ======", "name", req.Name) - payload := kmip20.LocateRequestPayload{ Attributes: createReqAttrs{ Name: kmip.Name{ @@ -495,7 +494,7 @@ func (kmips *kmip20service) Locate(ctx context.Context, connection *tls.Conn, se } uids := respPayload.UniqueIdentifier - logger.V(4).Info("XXX Locate response payload", "uid", respPayload.UniqueIdentifier) + logger.Debug("XXX Locate response payload", "uid", respPayload.UniqueIdentifier) uid := "" if len(uids) > 0 { @@ -507,8 +506,8 @@ func (kmips *kmip20service) Locate(ctx context.Context, connection *tls.Conn, se // SetAttribute: func (kmips *kmip20service) SetAttribute(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *SetAttributeRequest) (*SetAttributeResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== set attribute ======", "uid", req.UniqueIdentifier, "value", req.AttributeValue) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== set attribute ======", "uid", req.UniqueIdentifier, "value", req.AttributeValue) payload := kmip20.SetAttributeRequestPayload{ UniqueIdentifier: &kmip20.UniqueIdentifierValue{ @@ -532,15 +531,15 @@ func (kmips *kmip20service) SetAttribute(ctx context.Context, connection *tls.Co return nil, fmt.Errorf("unable to decode GetResponsePayload, error: %v", err) } - logger.V(4).Info("XXX SetAttribute response payload", "uid", respPayload.UniqueIdentifier) + logger.Debug("XXX SetAttribute response payload", "uid", respPayload.UniqueIdentifier) return &SetAttributeResponse{}, nil } // ReKey: func (kmips *kmip20service) ReKey(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, req *ReKeyRequest) (*ReKeyResponse, error) { - logger := klog.FromContext(ctx) - logger.V(4).Info("====== rekey ======", "uid", req.UniqueIdentifier) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) + logger.Debug("====== rekey ======", "uid", req.UniqueIdentifier) payload := kmip.ReKeyRequestPayload{ UniqueIdentifier: "FIXME", @@ -565,7 +564,7 @@ func (kmips *kmip20service) ReKey(ctx context.Context, connection *tls.Conn, set } uid := respPayload.UniqueIdentifier - logger.V(4).Info("xxx ReKey Response Payload", "uid", uid) + logger.Debug("xxx ReKey Response Payload", "uid", uid) return &ReKeyResponse{UniqueIdentifier: uid}, nil } diff --git a/src/kmipapi/send.go b/src/kmipapi/send.go index 4cccb61..a80e4fd 100644 --- a/src/kmipapi/send.go +++ b/src/kmipapi/send.go @@ -6,12 +6,13 @@ import ( "context" "crypto/tls" "fmt" + "log/slog" "github.com/Seagate/kmip-go" "github.com/Seagate/kmip-go/kmip14" + "github.com/Seagate/kmip-go/pkg/common" "github.com/Seagate/kmip-go/ttlv" "github.com/google/uuid" - "k8s.io/klog/v2" ) const ( @@ -19,10 +20,10 @@ const ( ) func BatchCmdGenerateMessage(ctx context.Context, settings *ConfigurationSettings, payload []kmip.RequestBatchItem) (kmip.RequestMessage, error) { - logger := klog.FromContext(ctx) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) - logger.V(4).Info("(1) create batch request message") - logger.V(5).Info("send batch request message", "CurrentProtocolVersionMajor", settings.ProtocolVersionMajor, "CurrentProtocolVersionMinor", settings.ProtocolVersionMinor) + logger.Debug("(1) create batch request message") + logger.Debug("send batch request message", "CurrentProtocolVersionMajor", settings.ProtocolVersionMajor, "CurrentProtocolVersionMinor", settings.ProtocolVersionMinor) BatchNum := len(payload) msg := kmip.RequestMessage{ @@ -41,7 +42,7 @@ func BatchCmdGenerateMessage(ctx context.Context, settings *ConfigurationSetting // SendRequestMessage: Send a KMIP request message func SendRequestMessage(ctx context.Context, connection *tls.Conn, settings *ConfigurationSettings, operation uint32, payload interface{}, dobatch bool) (*ttlv.Decoder, *kmip.ResponseBatchItem, error) { - logger := klog.FromContext(ctx) + logger := ctx.Value(common.LoggerKey).(*slog.Logger) biID := uuid.New() var kmipreq []byte @@ -54,8 +55,8 @@ func SendRequestMessage(ctx context.Context, connection *tls.Conn, settings *Con return nil, nil, fmt.Errorf("dobatch - failed to marshal message, error: %v", err) } } else { - logger.V(4).Info("(1) create request message") - logger.V(5).Info("send request message", "CurrentProtocolVersionMajor", settings.ProtocolVersionMajor, "CurrentProtocolVersionMinor", settings.ProtocolVersionMinor) + logger.Debug("(1) create request message") + logger.Debug("send request message", "CurrentProtocolVersionMajor", settings.ProtocolVersionMajor, "CurrentProtocolVersionMinor", settings.ProtocolVersionMinor) msg := kmip.RequestMessage{ RequestHeader: kmip.RequestHeader{ @@ -75,32 +76,32 @@ func SendRequestMessage(ctx context.Context, connection *tls.Conn, settings *Con }, } - logger.V(4).Info("(2) marshal message and print request") + logger.Debug("(2) marshal message and print request") kmipreq, err = ttlv.Marshal(msg) if err != nil { return nil, nil, fmt.Errorf("failed to marshal message, error: %v", err) } } - logger.V(5).Info("KMIP message", "request", kmipreq) + logger.Debug("KMIP message", "request", kmipreq) if connection != nil { - logger.V(4).Info("(3) write message") + logger.Debug("(3) write message") _, err = connection.Write(kmipreq) if err != nil { return nil, nil, fmt.Errorf("failed to write message, error: %v", err) } - logger.V(4).Info("(4) read response 1") + logger.Debug("(4) read response 1") buf := make([]byte, DefaultBufferSize) _, err = bufio.NewReader(connection).Read(buf) if err != nil { return nil, nil, fmt.Errorf("failed to read buffer from response, error: %v", err) } - logger.V(4).Info("(5) extract response from TTLV buffer") + logger.Debug("(5) extract response from TTLV buffer") resp := ttlv.TTLV(buf) - logger.V(5).Info("ttlv", "response", resp) + logger.Debug("ttlv", "response", resp) // Create a TTLV decoder from a new reader decoder := ttlv.NewDecoder(bytes.NewReader(resp)) @@ -115,8 +116,8 @@ func SendRequestMessage(ctx context.Context, connection *tls.Conn, settings *Con return nil, nil, fmt.Errorf("failed to decode response message, error: %v", err) } - logger.V(4).Info("(6) extract batch item from response message", "BatchCount", respMsg.ResponseHeader.BatchCount) - logger.V(5).Info("response", "message", respMsg) + logger.Debug("(6) extract batch item from response message", "BatchCount", respMsg.ResponseHeader.BatchCount) + logger.Debug("response", "message", respMsg) if len(respMsg.BatchItem) == 0 { return nil, nil, fmt.Errorf("response message had not batch items") } @@ -126,7 +127,7 @@ func SendRequestMessage(ctx context.Context, connection *tls.Conn, settings *Con for j := 0; j <= i; j++ { if respMsg.ResponseHeader.BatchCount >= 0 { if respMsg.BatchItem[j].ResultStatus != kmip14.ResultStatusSuccess { - logger.V(4).Info("send message results", "ResultStatus", respMsg.BatchItem[j].ResultStatus, "ResultReason", + logger.Debug("send message results", "ResultStatus", respMsg.BatchItem[j].ResultStatus, "ResultReason", respMsg.BatchItem[j].ResultReason, "ResultMessage", respMsg.BatchItem[j].ResultMessage) return nil, nil, fmt.Errorf("send operation (%d) status (%s) reason (%s) message (%s)", operation, respMsg.BatchItem[j].ResultStatus, respMsg.BatchItem[j].ResultReason, respMsg.BatchItem[j].ResultMessage) @@ -135,7 +136,7 @@ func SendRequestMessage(ctx context.Context, connection *tls.Conn, settings *Con } if respMsg.ResponseHeader.BatchCount >= 0 && respMsg.BatchItem[i].ResultStatus == kmip14.ResultStatusSuccess { - logger.V(4).Info("(7) returning decoder and the first batch item", "items", len(respMsg.BatchItem)) + logger.Debug("(7) returning decoder and the first batch item", "items", len(respMsg.BatchItem)) return decoder, &respMsg.BatchItem[i], nil } else { return nil, nil, fmt.Errorf( From e859afe09c4ae6af5812cca79f075590b796b773 Mon Sep 17 00:00:00 2001 From: Joe Skazinski Date: Tue, 15 Oct 2024 10:31:48 -0700 Subject: [PATCH 4/4] changelog updates --- .gitignore | 1 - cmd/kms/CHANGELOG.md | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 23499c2..2127a4c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,4 @@ build vendor /pykmip-server/server.log /pykmip-server/server.db -cmd/kms/kms kms \ No newline at end of file diff --git a/cmd/kms/CHANGELOG.md b/cmd/kms/CHANGELOG.md index 0f690a4..65c4c5f 100644 --- a/cmd/kms/CHANGELOG.md +++ b/cmd/kms/CHANGELOG.md @@ -1,4 +1,4 @@ -# [1.3.0] (2024-10-14) +# [1.3.0] (2024-10-15) ### Features - Switch to using the standard package `slog`