From 99685a1545baf04e14a73fd46d9db80523252711 Mon Sep 17 00:00:00 2001 From: VickyTheViking Date: Sat, 21 Feb 2026 05:12:55 +0400 Subject: [PATCH 1/3] Secret extractor for MongoDB --- binary/proto/scan_result.proto | 5 + .../scan_result_go_proto/scan_result.pb.go | 736 ++++++++++-------- binary/proto/secret.go | 17 + go.mod | 41 +- go.sum | 90 ++- veles/secrets/mongodburi/detector.go | 57 ++ veles/secrets/mongodburi/detector_test.go | 175 +++++ veles/secrets/mongodburi/mongodburi.go | 30 + veles/secrets/mongodburi/validator.go | 94 +++ veles/secrets/mongodburi/validator_test.go | 185 +++++ 10 files changed, 1059 insertions(+), 371 deletions(-) create mode 100644 veles/secrets/mongodburi/detector.go create mode 100644 veles/secrets/mongodburi/detector_test.go create mode 100644 veles/secrets/mongodburi/mongodburi.go create mode 100644 veles/secrets/mongodburi/validator.go create mode 100644 veles/secrets/mongodburi/validator_test.go diff --git a/binary/proto/scan_result.proto b/binary/proto/scan_result.proto index 6b14c0b67..b72dcd1ac 100644 --- a/binary/proto/scan_result.proto +++ b/binary/proto/scan_result.proto @@ -824,6 +824,7 @@ message SecretData { HerokuSecretKey heroku_secret_key = 74; NpmJsAccessToken npmjs_access_token = 75; CloudflareAPIToken cloudflare_api_token = 76; + MongoDBConnectionURL mongodb_connection_url = 77; } message GCPSAK { @@ -924,6 +925,10 @@ message SecretData { string token = 1; } + message MongoDBConnectionURL { + string url = 1; + } + message DenoPat { string pat = 1; } diff --git a/binary/proto/scan_result_go_proto/scan_result.pb.go b/binary/proto/scan_result_go_proto/scan_result.pb.go index 3db56abc0..967b1d6ce 100644 --- a/binary/proto/scan_result_go_proto/scan_result.pb.go +++ b/binary/proto/scan_result_go_proto/scan_result.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.10 -// protoc v3.21.1 +// protoc-gen-go v1.36.11 +// protoc v6.31.1 // source: proto/scan_result.proto package scan_result_go_proto @@ -5936,6 +5936,7 @@ type SecretData struct { // *SecretData_HerokuSecretKey_ // *SecretData_NpmjsAccessToken // *SecretData_CloudflareApiToken + // *SecretData_MongodbConnectionUrl Secret isSecretData_Secret `protobuf_oneof:"secret"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -6662,6 +6663,15 @@ func (x *SecretData) GetCloudflareApiToken() *SecretData_CloudflareAPIToken { return nil } +func (x *SecretData) GetMongodbConnectionUrl() *SecretData_MongoDBConnectionURL { + if x != nil { + if x, ok := x.Secret.(*SecretData_MongodbConnectionUrl); ok { + return x.MongodbConnectionUrl + } + } + return nil +} + type isSecretData_Secret interface { isSecretData_Secret() } @@ -6970,6 +6980,10 @@ type SecretData_CloudflareApiToken struct { CloudflareApiToken *SecretData_CloudflareAPIToken `protobuf:"bytes,76,opt,name=cloudflare_api_token,json=cloudflareApiToken,proto3,oneof"` } +type SecretData_MongodbConnectionUrl struct { + MongodbConnectionUrl *SecretData_MongoDBConnectionURL `protobuf:"bytes,77,opt,name=mongodb_connection_url,json=mongodbConnectionUrl,proto3,oneof"` +} + func (*SecretData_Gcpsak) isSecretData_Secret() {} func (*SecretData_AnthropicWorkspaceApiKey) isSecretData_Secret() {} @@ -7122,6 +7136,8 @@ func (*SecretData_NpmjsAccessToken) isSecretData_Secret() {} func (*SecretData_CloudflareApiToken) isSecretData_Secret() {} +func (*SecretData_MongodbConnectionUrl) isSecretData_Secret() {} + type SecretStatus struct { state protoimpl.MessageState `protogen:"open.v1"` Status SecretStatus_SecretStatusEnum `protobuf:"varint,1,opt,name=status,proto3,enum=scalibr.SecretStatus_SecretStatusEnum" json:"status,omitempty"` @@ -8734,6 +8750,50 @@ func (x *SecretData_CloudflareAPIToken) GetToken() string { return "" } +type SecretData_MongoDBConnectionURL struct { + state protoimpl.MessageState `protogen:"open.v1"` + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SecretData_MongoDBConnectionURL) Reset() { + *x = SecretData_MongoDBConnectionURL{} + mi := &file_proto_scan_result_proto_msgTypes[94] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SecretData_MongoDBConnectionURL) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SecretData_MongoDBConnectionURL) ProtoMessage() {} + +func (x *SecretData_MongoDBConnectionURL) ProtoReflect() protoreflect.Message { + mi := &file_proto_scan_result_proto_msgTypes[94] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SecretData_MongoDBConnectionURL.ProtoReflect.Descriptor instead. +func (*SecretData_MongoDBConnectionURL) Descriptor() ([]byte, []int) { + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 17} +} + +func (x *SecretData_MongoDBConnectionURL) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + type SecretData_DenoPat struct { state protoimpl.MessageState `protogen:"open.v1"` Pat string `protobuf:"bytes,1,opt,name=pat,proto3" json:"pat,omitempty"` @@ -8743,7 +8803,7 @@ type SecretData_DenoPat struct { func (x *SecretData_DenoPat) Reset() { *x = SecretData_DenoPat{} - mi := &file_proto_scan_result_proto_msgTypes[94] + mi := &file_proto_scan_result_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8755,7 +8815,7 @@ func (x *SecretData_DenoPat) String() string { func (*SecretData_DenoPat) ProtoMessage() {} func (x *SecretData_DenoPat) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[94] + mi := &file_proto_scan_result_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8768,7 +8828,7 @@ func (x *SecretData_DenoPat) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_DenoPat.ProtoReflect.Descriptor instead. func (*SecretData_DenoPat) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 17} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 18} } func (x *SecretData_DenoPat) GetPat() string { @@ -8787,7 +8847,7 @@ type SecretData_GitlabPat struct { func (x *SecretData_GitlabPat) Reset() { *x = SecretData_GitlabPat{} - mi := &file_proto_scan_result_proto_msgTypes[95] + mi := &file_proto_scan_result_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8799,7 +8859,7 @@ func (x *SecretData_GitlabPat) String() string { func (*SecretData_GitlabPat) ProtoMessage() {} func (x *SecretData_GitlabPat) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[95] + mi := &file_proto_scan_result_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8812,7 +8872,7 @@ func (x *SecretData_GitlabPat) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_GitlabPat.ProtoReflect.Descriptor instead. func (*SecretData_GitlabPat) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 18} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 19} } func (x *SecretData_GitlabPat) GetPat() string { @@ -8831,7 +8891,7 @@ type SecretData_SlackAppLevelToken struct { func (x *SecretData_SlackAppLevelToken) Reset() { *x = SecretData_SlackAppLevelToken{} - mi := &file_proto_scan_result_proto_msgTypes[96] + mi := &file_proto_scan_result_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8843,7 +8903,7 @@ func (x *SecretData_SlackAppLevelToken) String() string { func (*SecretData_SlackAppLevelToken) ProtoMessage() {} func (x *SecretData_SlackAppLevelToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[96] + mi := &file_proto_scan_result_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8856,7 +8916,7 @@ func (x *SecretData_SlackAppLevelToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_SlackAppLevelToken.ProtoReflect.Descriptor instead. func (*SecretData_SlackAppLevelToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 19} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 20} } func (x *SecretData_SlackAppLevelToken) GetToken() string { @@ -8875,7 +8935,7 @@ type SecretData_SlackAppConfigAccessToken struct { func (x *SecretData_SlackAppConfigAccessToken) Reset() { *x = SecretData_SlackAppConfigAccessToken{} - mi := &file_proto_scan_result_proto_msgTypes[97] + mi := &file_proto_scan_result_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8887,7 +8947,7 @@ func (x *SecretData_SlackAppConfigAccessToken) String() string { func (*SecretData_SlackAppConfigAccessToken) ProtoMessage() {} func (x *SecretData_SlackAppConfigAccessToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[97] + mi := &file_proto_scan_result_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8900,7 +8960,7 @@ func (x *SecretData_SlackAppConfigAccessToken) ProtoReflect() protoreflect.Messa // Deprecated: Use SecretData_SlackAppConfigAccessToken.ProtoReflect.Descriptor instead. func (*SecretData_SlackAppConfigAccessToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 20} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 21} } func (x *SecretData_SlackAppConfigAccessToken) GetToken() string { @@ -8919,7 +8979,7 @@ type SecretData_SlackAppConfigRefreshToken struct { func (x *SecretData_SlackAppConfigRefreshToken) Reset() { *x = SecretData_SlackAppConfigRefreshToken{} - mi := &file_proto_scan_result_proto_msgTypes[98] + mi := &file_proto_scan_result_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8931,7 +8991,7 @@ func (x *SecretData_SlackAppConfigRefreshToken) String() string { func (*SecretData_SlackAppConfigRefreshToken) ProtoMessage() {} func (x *SecretData_SlackAppConfigRefreshToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[98] + mi := &file_proto_scan_result_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8944,7 +9004,7 @@ func (x *SecretData_SlackAppConfigRefreshToken) ProtoReflect() protoreflect.Mess // Deprecated: Use SecretData_SlackAppConfigRefreshToken.ProtoReflect.Descriptor instead. func (*SecretData_SlackAppConfigRefreshToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 21} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 22} } func (x *SecretData_SlackAppConfigRefreshToken) GetToken() string { @@ -8963,7 +9023,7 @@ type SecretData_PostmanAPIKey struct { func (x *SecretData_PostmanAPIKey) Reset() { *x = SecretData_PostmanAPIKey{} - mi := &file_proto_scan_result_proto_msgTypes[99] + mi := &file_proto_scan_result_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8975,7 +9035,7 @@ func (x *SecretData_PostmanAPIKey) String() string { func (*SecretData_PostmanAPIKey) ProtoMessage() {} func (x *SecretData_PostmanAPIKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[99] + mi := &file_proto_scan_result_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8988,7 +9048,7 @@ func (x *SecretData_PostmanAPIKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_PostmanAPIKey.ProtoReflect.Descriptor instead. func (*SecretData_PostmanAPIKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 22} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 23} } func (x *SecretData_PostmanAPIKey) GetKey() string { @@ -9007,7 +9067,7 @@ type SecretData_PostmanCollectionAccessToken struct { func (x *SecretData_PostmanCollectionAccessToken) Reset() { *x = SecretData_PostmanCollectionAccessToken{} - mi := &file_proto_scan_result_proto_msgTypes[100] + mi := &file_proto_scan_result_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9019,7 +9079,7 @@ func (x *SecretData_PostmanCollectionAccessToken) String() string { func (*SecretData_PostmanCollectionAccessToken) ProtoMessage() {} func (x *SecretData_PostmanCollectionAccessToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[100] + mi := &file_proto_scan_result_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9032,7 +9092,7 @@ func (x *SecretData_PostmanCollectionAccessToken) ProtoReflect() protoreflect.Me // Deprecated: Use SecretData_PostmanCollectionAccessToken.ProtoReflect.Descriptor instead. func (*SecretData_PostmanCollectionAccessToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 23} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 24} } func (x *SecretData_PostmanCollectionAccessToken) GetKey() string { @@ -9051,7 +9111,7 @@ type SecretData_OpenRouterAPIKey struct { func (x *SecretData_OpenRouterAPIKey) Reset() { *x = SecretData_OpenRouterAPIKey{} - mi := &file_proto_scan_result_proto_msgTypes[101] + mi := &file_proto_scan_result_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9063,7 +9123,7 @@ func (x *SecretData_OpenRouterAPIKey) String() string { func (*SecretData_OpenRouterAPIKey) ProtoMessage() {} func (x *SecretData_OpenRouterAPIKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[101] + mi := &file_proto_scan_result_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9076,7 +9136,7 @@ func (x *SecretData_OpenRouterAPIKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_OpenRouterAPIKey.ProtoReflect.Descriptor instead. func (*SecretData_OpenRouterAPIKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 24} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 25} } func (x *SecretData_OpenRouterAPIKey) GetKey() string { @@ -9095,7 +9155,7 @@ type SecretData_DigitalOceanAPIToken struct { func (x *SecretData_DigitalOceanAPIToken) Reset() { *x = SecretData_DigitalOceanAPIToken{} - mi := &file_proto_scan_result_proto_msgTypes[102] + mi := &file_proto_scan_result_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9107,7 +9167,7 @@ func (x *SecretData_DigitalOceanAPIToken) String() string { func (*SecretData_DigitalOceanAPIToken) ProtoMessage() {} func (x *SecretData_DigitalOceanAPIToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[102] + mi := &file_proto_scan_result_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9120,7 +9180,7 @@ func (x *SecretData_DigitalOceanAPIToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_DigitalOceanAPIToken.ProtoReflect.Descriptor instead. func (*SecretData_DigitalOceanAPIToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 25} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 26} } func (x *SecretData_DigitalOceanAPIToken) GetKey() string { @@ -9139,7 +9199,7 @@ type SecretData_CratesIOAPIToken struct { func (x *SecretData_CratesIOAPIToken) Reset() { *x = SecretData_CratesIOAPIToken{} - mi := &file_proto_scan_result_proto_msgTypes[103] + mi := &file_proto_scan_result_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9151,7 +9211,7 @@ func (x *SecretData_CratesIOAPIToken) String() string { func (*SecretData_CratesIOAPIToken) ProtoMessage() {} func (x *SecretData_CratesIOAPIToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[103] + mi := &file_proto_scan_result_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9164,7 +9224,7 @@ func (x *SecretData_CratesIOAPIToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_CratesIOAPIToken.ProtoReflect.Descriptor instead. func (*SecretData_CratesIOAPIToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 26} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 27} } func (x *SecretData_CratesIOAPIToken) GetToken() string { @@ -9183,7 +9243,7 @@ type SecretData_NpmJsAccessToken struct { func (x *SecretData_NpmJsAccessToken) Reset() { *x = SecretData_NpmJsAccessToken{} - mi := &file_proto_scan_result_proto_msgTypes[104] + mi := &file_proto_scan_result_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9195,7 +9255,7 @@ func (x *SecretData_NpmJsAccessToken) String() string { func (*SecretData_NpmJsAccessToken) ProtoMessage() {} func (x *SecretData_NpmJsAccessToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[104] + mi := &file_proto_scan_result_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9208,7 +9268,7 @@ func (x *SecretData_NpmJsAccessToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_NpmJsAccessToken.ProtoReflect.Descriptor instead. func (*SecretData_NpmJsAccessToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 27} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 28} } func (x *SecretData_NpmJsAccessToken) GetToken() string { @@ -9227,7 +9287,7 @@ type SecretData_GithubAppRefreshToken struct { func (x *SecretData_GithubAppRefreshToken) Reset() { *x = SecretData_GithubAppRefreshToken{} - mi := &file_proto_scan_result_proto_msgTypes[105] + mi := &file_proto_scan_result_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9239,7 +9299,7 @@ func (x *SecretData_GithubAppRefreshToken) String() string { func (*SecretData_GithubAppRefreshToken) ProtoMessage() {} func (x *SecretData_GithubAppRefreshToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[105] + mi := &file_proto_scan_result_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9252,7 +9312,7 @@ func (x *SecretData_GithubAppRefreshToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_GithubAppRefreshToken.ProtoReflect.Descriptor instead. func (*SecretData_GithubAppRefreshToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 28} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 29} } func (x *SecretData_GithubAppRefreshToken) GetToken() string { @@ -9271,7 +9331,7 @@ type SecretData_GithubAppServerToServerToken struct { func (x *SecretData_GithubAppServerToServerToken) Reset() { *x = SecretData_GithubAppServerToServerToken{} - mi := &file_proto_scan_result_proto_msgTypes[106] + mi := &file_proto_scan_result_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9283,7 +9343,7 @@ func (x *SecretData_GithubAppServerToServerToken) String() string { func (*SecretData_GithubAppServerToServerToken) ProtoMessage() {} func (x *SecretData_GithubAppServerToServerToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[106] + mi := &file_proto_scan_result_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9296,7 +9356,7 @@ func (x *SecretData_GithubAppServerToServerToken) ProtoReflect() protoreflect.Me // Deprecated: Use SecretData_GithubAppServerToServerToken.ProtoReflect.Descriptor instead. func (*SecretData_GithubAppServerToServerToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 29} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 30} } func (x *SecretData_GithubAppServerToServerToken) GetToken() string { @@ -9315,7 +9375,7 @@ type SecretData_GithubClassicPersonalAccessToken struct { func (x *SecretData_GithubClassicPersonalAccessToken) Reset() { *x = SecretData_GithubClassicPersonalAccessToken{} - mi := &file_proto_scan_result_proto_msgTypes[107] + mi := &file_proto_scan_result_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9327,7 +9387,7 @@ func (x *SecretData_GithubClassicPersonalAccessToken) String() string { func (*SecretData_GithubClassicPersonalAccessToken) ProtoMessage() {} func (x *SecretData_GithubClassicPersonalAccessToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[107] + mi := &file_proto_scan_result_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9340,7 +9400,7 @@ func (x *SecretData_GithubClassicPersonalAccessToken) ProtoReflect() protoreflec // Deprecated: Use SecretData_GithubClassicPersonalAccessToken.ProtoReflect.Descriptor instead. func (*SecretData_GithubClassicPersonalAccessToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 30} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 31} } func (x *SecretData_GithubClassicPersonalAccessToken) GetToken() string { @@ -9359,7 +9419,7 @@ type SecretData_GithubFineGrainedPersonalAccessToken struct { func (x *SecretData_GithubFineGrainedPersonalAccessToken) Reset() { *x = SecretData_GithubFineGrainedPersonalAccessToken{} - mi := &file_proto_scan_result_proto_msgTypes[108] + mi := &file_proto_scan_result_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9371,7 +9431,7 @@ func (x *SecretData_GithubFineGrainedPersonalAccessToken) String() string { func (*SecretData_GithubFineGrainedPersonalAccessToken) ProtoMessage() {} func (x *SecretData_GithubFineGrainedPersonalAccessToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[108] + mi := &file_proto_scan_result_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9384,7 +9444,7 @@ func (x *SecretData_GithubFineGrainedPersonalAccessToken) ProtoReflect() protore // Deprecated: Use SecretData_GithubFineGrainedPersonalAccessToken.ProtoReflect.Descriptor instead. func (*SecretData_GithubFineGrainedPersonalAccessToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 31} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 32} } func (x *SecretData_GithubFineGrainedPersonalAccessToken) GetToken() string { @@ -9403,7 +9463,7 @@ type SecretData_GithubOAuthToken struct { func (x *SecretData_GithubOAuthToken) Reset() { *x = SecretData_GithubOAuthToken{} - mi := &file_proto_scan_result_proto_msgTypes[109] + mi := &file_proto_scan_result_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9415,7 +9475,7 @@ func (x *SecretData_GithubOAuthToken) String() string { func (*SecretData_GithubOAuthToken) ProtoMessage() {} func (x *SecretData_GithubOAuthToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[109] + mi := &file_proto_scan_result_proto_msgTypes[110] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9428,7 +9488,7 @@ func (x *SecretData_GithubOAuthToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_GithubOAuthToken.ProtoReflect.Descriptor instead. func (*SecretData_GithubOAuthToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 32} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 33} } func (x *SecretData_GithubOAuthToken) GetToken() string { @@ -9447,7 +9507,7 @@ type SecretData_GithubAppUserToServerToken struct { func (x *SecretData_GithubAppUserToServerToken) Reset() { *x = SecretData_GithubAppUserToServerToken{} - mi := &file_proto_scan_result_proto_msgTypes[110] + mi := &file_proto_scan_result_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9459,7 +9519,7 @@ func (x *SecretData_GithubAppUserToServerToken) String() string { func (*SecretData_GithubAppUserToServerToken) ProtoMessage() {} func (x *SecretData_GithubAppUserToServerToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[110] + mi := &file_proto_scan_result_proto_msgTypes[111] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9472,7 +9532,7 @@ func (x *SecretData_GithubAppUserToServerToken) ProtoReflect() protoreflect.Mess // Deprecated: Use SecretData_GithubAppUserToServerToken.ProtoReflect.Descriptor instead. func (*SecretData_GithubAppUserToServerToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 33} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 34} } func (x *SecretData_GithubAppUserToServerToken) GetToken() string { @@ -9491,7 +9551,7 @@ type SecretData_PyPIAPIToken struct { func (x *SecretData_PyPIAPIToken) Reset() { *x = SecretData_PyPIAPIToken{} - mi := &file_proto_scan_result_proto_msgTypes[111] + mi := &file_proto_scan_result_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9503,7 +9563,7 @@ func (x *SecretData_PyPIAPIToken) String() string { func (*SecretData_PyPIAPIToken) ProtoMessage() {} func (x *SecretData_PyPIAPIToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[111] + mi := &file_proto_scan_result_proto_msgTypes[112] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9516,7 +9576,7 @@ func (x *SecretData_PyPIAPIToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_PyPIAPIToken.ProtoReflect.Descriptor instead. func (*SecretData_PyPIAPIToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 34} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 35} } func (x *SecretData_PyPIAPIToken) GetToken() string { @@ -9535,7 +9595,7 @@ type SecretData_TinkKeyset struct { func (x *SecretData_TinkKeyset) Reset() { *x = SecretData_TinkKeyset{} - mi := &file_proto_scan_result_proto_msgTypes[112] + mi := &file_proto_scan_result_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9547,7 +9607,7 @@ func (x *SecretData_TinkKeyset) String() string { func (*SecretData_TinkKeyset) ProtoMessage() {} func (x *SecretData_TinkKeyset) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[112] + mi := &file_proto_scan_result_proto_msgTypes[113] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9560,7 +9620,7 @@ func (x *SecretData_TinkKeyset) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_TinkKeyset.ProtoReflect.Descriptor instead. func (*SecretData_TinkKeyset) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 35} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 36} } func (x *SecretData_TinkKeyset) GetContent() string { @@ -9579,7 +9639,7 @@ type SecretData_HashiCorpVaultToken struct { func (x *SecretData_HashiCorpVaultToken) Reset() { *x = SecretData_HashiCorpVaultToken{} - mi := &file_proto_scan_result_proto_msgTypes[113] + mi := &file_proto_scan_result_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9591,7 +9651,7 @@ func (x *SecretData_HashiCorpVaultToken) String() string { func (*SecretData_HashiCorpVaultToken) ProtoMessage() {} func (x *SecretData_HashiCorpVaultToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[113] + mi := &file_proto_scan_result_proto_msgTypes[114] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9604,7 +9664,7 @@ func (x *SecretData_HashiCorpVaultToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_HashiCorpVaultToken.ProtoReflect.Descriptor instead. func (*SecretData_HashiCorpVaultToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 36} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 37} } func (x *SecretData_HashiCorpVaultToken) GetToken() string { @@ -9625,7 +9685,7 @@ type SecretData_HashiCorpVaultAppRoleCredentials struct { func (x *SecretData_HashiCorpVaultAppRoleCredentials) Reset() { *x = SecretData_HashiCorpVaultAppRoleCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[114] + mi := &file_proto_scan_result_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9637,7 +9697,7 @@ func (x *SecretData_HashiCorpVaultAppRoleCredentials) String() string { func (*SecretData_HashiCorpVaultAppRoleCredentials) ProtoMessage() {} func (x *SecretData_HashiCorpVaultAppRoleCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[114] + mi := &file_proto_scan_result_proto_msgTypes[115] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9650,7 +9710,7 @@ func (x *SecretData_HashiCorpVaultAppRoleCredentials) ProtoReflect() protoreflec // Deprecated: Use SecretData_HashiCorpVaultAppRoleCredentials.ProtoReflect.Descriptor instead. func (*SecretData_HashiCorpVaultAppRoleCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 37} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 38} } func (x *SecretData_HashiCorpVaultAppRoleCredentials) GetRoleId() string { @@ -9683,7 +9743,7 @@ type SecretData_GCPAPIKey struct { func (x *SecretData_GCPAPIKey) Reset() { *x = SecretData_GCPAPIKey{} - mi := &file_proto_scan_result_proto_msgTypes[115] + mi := &file_proto_scan_result_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9695,7 +9755,7 @@ func (x *SecretData_GCPAPIKey) String() string { func (*SecretData_GCPAPIKey) ProtoMessage() {} func (x *SecretData_GCPAPIKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[115] + mi := &file_proto_scan_result_proto_msgTypes[116] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9708,7 +9768,7 @@ func (x *SecretData_GCPAPIKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_GCPAPIKey.ProtoReflect.Descriptor instead. func (*SecretData_GCPAPIKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 38} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 39} } func (x *SecretData_GCPAPIKey) GetKey() string { @@ -9729,7 +9789,7 @@ type SecretData_HuggingfaceAPIKey struct { func (x *SecretData_HuggingfaceAPIKey) Reset() { *x = SecretData_HuggingfaceAPIKey{} - mi := &file_proto_scan_result_proto_msgTypes[116] + mi := &file_proto_scan_result_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9741,7 +9801,7 @@ func (x *SecretData_HuggingfaceAPIKey) String() string { func (*SecretData_HuggingfaceAPIKey) ProtoMessage() {} func (x *SecretData_HuggingfaceAPIKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[116] + mi := &file_proto_scan_result_proto_msgTypes[117] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9754,7 +9814,7 @@ func (x *SecretData_HuggingfaceAPIKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_HuggingfaceAPIKey.ProtoReflect.Descriptor instead. func (*SecretData_HuggingfaceAPIKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 39} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 40} } func (x *SecretData_HuggingfaceAPIKey) GetKey() string { @@ -9788,7 +9848,7 @@ type SecretData_HashiCorpCloudPlatformCredentials struct { func (x *SecretData_HashiCorpCloudPlatformCredentials) Reset() { *x = SecretData_HashiCorpCloudPlatformCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[117] + mi := &file_proto_scan_result_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9800,7 +9860,7 @@ func (x *SecretData_HashiCorpCloudPlatformCredentials) String() string { func (*SecretData_HashiCorpCloudPlatformCredentials) ProtoMessage() {} func (x *SecretData_HashiCorpCloudPlatformCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[117] + mi := &file_proto_scan_result_proto_msgTypes[118] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9813,7 +9873,7 @@ func (x *SecretData_HashiCorpCloudPlatformCredentials) ProtoReflect() protorefle // Deprecated: Use SecretData_HashiCorpCloudPlatformCredentials.ProtoReflect.Descriptor instead. func (*SecretData_HashiCorpCloudPlatformCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 40} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 41} } func (x *SecretData_HashiCorpCloudPlatformCredentials) GetClientId() string { @@ -9848,7 +9908,7 @@ type SecretData_HashiCorpCloudPlatformToken struct { func (x *SecretData_HashiCorpCloudPlatformToken) Reset() { *x = SecretData_HashiCorpCloudPlatformToken{} - mi := &file_proto_scan_result_proto_msgTypes[118] + mi := &file_proto_scan_result_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9860,7 +9920,7 @@ func (x *SecretData_HashiCorpCloudPlatformToken) String() string { func (*SecretData_HashiCorpCloudPlatformToken) ProtoMessage() {} func (x *SecretData_HashiCorpCloudPlatformToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[118] + mi := &file_proto_scan_result_proto_msgTypes[119] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9873,7 +9933,7 @@ func (x *SecretData_HashiCorpCloudPlatformToken) ProtoReflect() protoreflect.Mes // Deprecated: Use SecretData_HashiCorpCloudPlatformToken.ProtoReflect.Descriptor instead. func (*SecretData_HashiCorpCloudPlatformToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 41} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 42} } func (x *SecretData_HashiCorpCloudPlatformToken) GetToken() string { @@ -9948,7 +10008,7 @@ type SecretData_StripeSecretKey struct { func (x *SecretData_StripeSecretKey) Reset() { *x = SecretData_StripeSecretKey{} - mi := &file_proto_scan_result_proto_msgTypes[119] + mi := &file_proto_scan_result_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9960,7 +10020,7 @@ func (x *SecretData_StripeSecretKey) String() string { func (*SecretData_StripeSecretKey) ProtoMessage() {} func (x *SecretData_StripeSecretKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[119] + mi := &file_proto_scan_result_proto_msgTypes[120] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9973,7 +10033,7 @@ func (x *SecretData_StripeSecretKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_StripeSecretKey.ProtoReflect.Descriptor instead. func (*SecretData_StripeSecretKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 42} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 43} } func (x *SecretData_StripeSecretKey) GetKey() string { @@ -9992,7 +10052,7 @@ type SecretData_StripeRestrictedKey struct { func (x *SecretData_StripeRestrictedKey) Reset() { *x = SecretData_StripeRestrictedKey{} - mi := &file_proto_scan_result_proto_msgTypes[120] + mi := &file_proto_scan_result_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10004,7 +10064,7 @@ func (x *SecretData_StripeRestrictedKey) String() string { func (*SecretData_StripeRestrictedKey) ProtoMessage() {} func (x *SecretData_StripeRestrictedKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[120] + mi := &file_proto_scan_result_proto_msgTypes[121] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10017,7 +10077,7 @@ func (x *SecretData_StripeRestrictedKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_StripeRestrictedKey.ProtoReflect.Descriptor instead. func (*SecretData_StripeRestrictedKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 43} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 44} } func (x *SecretData_StripeRestrictedKey) GetKey() string { @@ -10036,7 +10096,7 @@ type SecretData_StripeWebhookSecret struct { func (x *SecretData_StripeWebhookSecret) Reset() { *x = SecretData_StripeWebhookSecret{} - mi := &file_proto_scan_result_proto_msgTypes[121] + mi := &file_proto_scan_result_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10048,7 +10108,7 @@ func (x *SecretData_StripeWebhookSecret) String() string { func (*SecretData_StripeWebhookSecret) ProtoMessage() {} func (x *SecretData_StripeWebhookSecret) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[121] + mi := &file_proto_scan_result_proto_msgTypes[122] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10061,7 +10121,7 @@ func (x *SecretData_StripeWebhookSecret) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_StripeWebhookSecret.ProtoReflect.Descriptor instead. func (*SecretData_StripeWebhookSecret) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 44} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 45} } func (x *SecretData_StripeWebhookSecret) GetKey() string { @@ -10085,7 +10145,7 @@ type SecretData_GCPOAuth2ClientCredentials struct { func (x *SecretData_GCPOAuth2ClientCredentials) Reset() { *x = SecretData_GCPOAuth2ClientCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[122] + mi := &file_proto_scan_result_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10097,7 +10157,7 @@ func (x *SecretData_GCPOAuth2ClientCredentials) String() string { func (*SecretData_GCPOAuth2ClientCredentials) ProtoMessage() {} func (x *SecretData_GCPOAuth2ClientCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[122] + mi := &file_proto_scan_result_proto_msgTypes[123] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10110,7 +10170,7 @@ func (x *SecretData_GCPOAuth2ClientCredentials) ProtoReflect() protoreflect.Mess // Deprecated: Use SecretData_GCPOAuth2ClientCredentials.ProtoReflect.Descriptor instead. func (*SecretData_GCPOAuth2ClientCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 45} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 46} } func (x *SecretData_GCPOAuth2ClientCredentials) GetId() string { @@ -10138,7 +10198,7 @@ type SecretData_GCPOAuth2AccessToken struct { func (x *SecretData_GCPOAuth2AccessToken) Reset() { *x = SecretData_GCPOAuth2AccessToken{} - mi := &file_proto_scan_result_proto_msgTypes[123] + mi := &file_proto_scan_result_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10150,7 +10210,7 @@ func (x *SecretData_GCPOAuth2AccessToken) String() string { func (*SecretData_GCPOAuth2AccessToken) ProtoMessage() {} func (x *SecretData_GCPOAuth2AccessToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[123] + mi := &file_proto_scan_result_proto_msgTypes[124] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10163,7 +10223,7 @@ func (x *SecretData_GCPOAuth2AccessToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_GCPOAuth2AccessToken.ProtoReflect.Descriptor instead. func (*SecretData_GCPOAuth2AccessToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 46} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 47} } func (x *SecretData_GCPOAuth2AccessToken) GetToken() string { @@ -10183,7 +10243,7 @@ type SecretData_GCSHmacKey struct { func (x *SecretData_GCSHmacKey) Reset() { *x = SecretData_GCSHmacKey{} - mi := &file_proto_scan_result_proto_msgTypes[124] + mi := &file_proto_scan_result_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10195,7 +10255,7 @@ func (x *SecretData_GCSHmacKey) String() string { func (*SecretData_GCSHmacKey) ProtoMessage() {} func (x *SecretData_GCSHmacKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[124] + mi := &file_proto_scan_result_proto_msgTypes[125] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10208,7 +10268,7 @@ func (x *SecretData_GCSHmacKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_GCSHmacKey.ProtoReflect.Descriptor instead. func (*SecretData_GCSHmacKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 47} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 48} } func (x *SecretData_GCSHmacKey) GetAccessId() string { @@ -10239,7 +10299,7 @@ type SecretData_MysqlMyloginSection struct { func (x *SecretData_MysqlMyloginSection) Reset() { *x = SecretData_MysqlMyloginSection{} - mi := &file_proto_scan_result_proto_msgTypes[125] + mi := &file_proto_scan_result_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10251,7 +10311,7 @@ func (x *SecretData_MysqlMyloginSection) String() string { func (*SecretData_MysqlMyloginSection) ProtoMessage() {} func (x *SecretData_MysqlMyloginSection) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[125] + mi := &file_proto_scan_result_proto_msgTypes[126] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10264,7 +10324,7 @@ func (x *SecretData_MysqlMyloginSection) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_MysqlMyloginSection.ProtoReflect.Descriptor instead. func (*SecretData_MysqlMyloginSection) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 48} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 49} } func (x *SecretData_MysqlMyloginSection) GetSectionName() string { @@ -10319,7 +10379,7 @@ type SecretData_VapidKey struct { func (x *SecretData_VapidKey) Reset() { *x = SecretData_VapidKey{} - mi := &file_proto_scan_result_proto_msgTypes[126] + mi := &file_proto_scan_result_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10331,7 +10391,7 @@ func (x *SecretData_VapidKey) String() string { func (*SecretData_VapidKey) ProtoMessage() {} func (x *SecretData_VapidKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[126] + mi := &file_proto_scan_result_proto_msgTypes[127] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10344,7 +10404,7 @@ func (x *SecretData_VapidKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_VapidKey.ProtoReflect.Descriptor instead. func (*SecretData_VapidKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 49} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 50} } func (x *SecretData_VapidKey) GetPrivateB64() string { @@ -10385,7 +10445,7 @@ type SecretData_OnePasswordConnectToken struct { func (x *SecretData_OnePasswordConnectToken) Reset() { *x = SecretData_OnePasswordConnectToken{} - mi := &file_proto_scan_result_proto_msgTypes[127] + mi := &file_proto_scan_result_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10397,7 +10457,7 @@ func (x *SecretData_OnePasswordConnectToken) String() string { func (*SecretData_OnePasswordConnectToken) ProtoMessage() {} func (x *SecretData_OnePasswordConnectToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[127] + mi := &file_proto_scan_result_proto_msgTypes[128] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10410,7 +10470,7 @@ func (x *SecretData_OnePasswordConnectToken) ProtoReflect() protoreflect.Message // Deprecated: Use SecretData_OnePasswordConnectToken.ProtoReflect.Descriptor instead. func (*SecretData_OnePasswordConnectToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 50} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 51} } func (x *SecretData_OnePasswordConnectToken) GetDeviceUuid() string { @@ -10478,7 +10538,7 @@ type SecretData_OnePasswordSecretKey struct { func (x *SecretData_OnePasswordSecretKey) Reset() { *x = SecretData_OnePasswordSecretKey{} - mi := &file_proto_scan_result_proto_msgTypes[128] + mi := &file_proto_scan_result_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10490,7 +10550,7 @@ func (x *SecretData_OnePasswordSecretKey) String() string { func (*SecretData_OnePasswordSecretKey) ProtoMessage() {} func (x *SecretData_OnePasswordSecretKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[128] + mi := &file_proto_scan_result_proto_msgTypes[129] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10503,7 +10563,7 @@ func (x *SecretData_OnePasswordSecretKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_OnePasswordSecretKey.ProtoReflect.Descriptor instead. func (*SecretData_OnePasswordSecretKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 51} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 52} } func (x *SecretData_OnePasswordSecretKey) GetKey() string { @@ -10522,7 +10582,7 @@ type SecretData_OnePasswordServiceToken struct { func (x *SecretData_OnePasswordServiceToken) Reset() { *x = SecretData_OnePasswordServiceToken{} - mi := &file_proto_scan_result_proto_msgTypes[129] + mi := &file_proto_scan_result_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10534,7 +10594,7 @@ func (x *SecretData_OnePasswordServiceToken) String() string { func (*SecretData_OnePasswordServiceToken) ProtoMessage() {} func (x *SecretData_OnePasswordServiceToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[129] + mi := &file_proto_scan_result_proto_msgTypes[130] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10547,7 +10607,7 @@ func (x *SecretData_OnePasswordServiceToken) ProtoReflect() protoreflect.Message // Deprecated: Use SecretData_OnePasswordServiceToken.ProtoReflect.Descriptor instead. func (*SecretData_OnePasswordServiceToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 52} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 53} } func (x *SecretData_OnePasswordServiceToken) GetKey() string { @@ -10566,7 +10626,7 @@ type SecretData_OnePasswordRecoveryCode struct { func (x *SecretData_OnePasswordRecoveryCode) Reset() { *x = SecretData_OnePasswordRecoveryCode{} - mi := &file_proto_scan_result_proto_msgTypes[130] + mi := &file_proto_scan_result_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10578,7 +10638,7 @@ func (x *SecretData_OnePasswordRecoveryCode) String() string { func (*SecretData_OnePasswordRecoveryCode) ProtoMessage() {} func (x *SecretData_OnePasswordRecoveryCode) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[130] + mi := &file_proto_scan_result_proto_msgTypes[131] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10591,7 +10651,7 @@ func (x *SecretData_OnePasswordRecoveryCode) ProtoReflect() protoreflect.Message // Deprecated: Use SecretData_OnePasswordRecoveryCode.ProtoReflect.Descriptor instead. func (*SecretData_OnePasswordRecoveryCode) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 53} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 54} } func (x *SecretData_OnePasswordRecoveryCode) GetKey() string { @@ -10611,7 +10671,7 @@ type SecretData_AwsAccessKeyCredentials struct { func (x *SecretData_AwsAccessKeyCredentials) Reset() { *x = SecretData_AwsAccessKeyCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[131] + mi := &file_proto_scan_result_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10623,7 +10683,7 @@ func (x *SecretData_AwsAccessKeyCredentials) String() string { func (*SecretData_AwsAccessKeyCredentials) ProtoMessage() {} func (x *SecretData_AwsAccessKeyCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[131] + mi := &file_proto_scan_result_proto_msgTypes[132] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10636,7 +10696,7 @@ func (x *SecretData_AwsAccessKeyCredentials) ProtoReflect() protoreflect.Message // Deprecated: Use SecretData_AwsAccessKeyCredentials.ProtoReflect.Descriptor instead. func (*SecretData_AwsAccessKeyCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 54} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 55} } func (x *SecretData_AwsAccessKeyCredentials) GetAccessId() string { @@ -10662,7 +10722,7 @@ type SecretData_ReCaptchaKey struct { func (x *SecretData_ReCaptchaKey) Reset() { *x = SecretData_ReCaptchaKey{} - mi := &file_proto_scan_result_proto_msgTypes[132] + mi := &file_proto_scan_result_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10674,7 +10734,7 @@ func (x *SecretData_ReCaptchaKey) String() string { func (*SecretData_ReCaptchaKey) ProtoMessage() {} func (x *SecretData_ReCaptchaKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[132] + mi := &file_proto_scan_result_proto_msgTypes[133] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10687,7 +10747,7 @@ func (x *SecretData_ReCaptchaKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_ReCaptchaKey.ProtoReflect.Descriptor instead. func (*SecretData_ReCaptchaKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 55} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 56} } func (x *SecretData_ReCaptchaKey) GetSecret() string { @@ -10706,7 +10766,7 @@ type SecretData_PyxKeyV1 struct { func (x *SecretData_PyxKeyV1) Reset() { *x = SecretData_PyxKeyV1{} - mi := &file_proto_scan_result_proto_msgTypes[133] + mi := &file_proto_scan_result_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10718,7 +10778,7 @@ func (x *SecretData_PyxKeyV1) String() string { func (*SecretData_PyxKeyV1) ProtoMessage() {} func (x *SecretData_PyxKeyV1) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[133] + mi := &file_proto_scan_result_proto_msgTypes[134] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10731,7 +10791,7 @@ func (x *SecretData_PyxKeyV1) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_PyxKeyV1.ProtoReflect.Descriptor instead. func (*SecretData_PyxKeyV1) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 56} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 57} } func (x *SecretData_PyxKeyV1) GetKey() string { @@ -10750,7 +10810,7 @@ type SecretData_PyxKeyV2 struct { func (x *SecretData_PyxKeyV2) Reset() { *x = SecretData_PyxKeyV2{} - mi := &file_proto_scan_result_proto_msgTypes[134] + mi := &file_proto_scan_result_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10762,7 +10822,7 @@ func (x *SecretData_PyxKeyV2) String() string { func (*SecretData_PyxKeyV2) ProtoMessage() {} func (x *SecretData_PyxKeyV2) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[134] + mi := &file_proto_scan_result_proto_msgTypes[135] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10775,7 +10835,7 @@ func (x *SecretData_PyxKeyV2) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_PyxKeyV2.ProtoReflect.Descriptor instead. func (*SecretData_PyxKeyV2) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 57} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 58} } func (x *SecretData_PyxKeyV2) GetKey() string { @@ -10794,7 +10854,7 @@ type SecretData_CodeCatalystCredentials struct { func (x *SecretData_CodeCatalystCredentials) Reset() { *x = SecretData_CodeCatalystCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[135] + mi := &file_proto_scan_result_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10806,7 +10866,7 @@ func (x *SecretData_CodeCatalystCredentials) String() string { func (*SecretData_CodeCatalystCredentials) ProtoMessage() {} func (x *SecretData_CodeCatalystCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[135] + mi := &file_proto_scan_result_proto_msgTypes[136] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10819,7 +10879,7 @@ func (x *SecretData_CodeCatalystCredentials) ProtoReflect() protoreflect.Message // Deprecated: Use SecretData_CodeCatalystCredentials.ProtoReflect.Descriptor instead. func (*SecretData_CodeCatalystCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 58} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 59} } func (x *SecretData_CodeCatalystCredentials) GetUrl() string { @@ -10838,7 +10898,7 @@ type SecretData_CodeCommitCredentials struct { func (x *SecretData_CodeCommitCredentials) Reset() { *x = SecretData_CodeCommitCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[136] + mi := &file_proto_scan_result_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10850,7 +10910,7 @@ func (x *SecretData_CodeCommitCredentials) String() string { func (*SecretData_CodeCommitCredentials) ProtoMessage() {} func (x *SecretData_CodeCommitCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[136] + mi := &file_proto_scan_result_proto_msgTypes[137] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10863,7 +10923,7 @@ func (x *SecretData_CodeCommitCredentials) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_CodeCommitCredentials.ProtoReflect.Descriptor instead. func (*SecretData_CodeCommitCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 59} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 60} } func (x *SecretData_CodeCommitCredentials) GetUrl() string { @@ -10882,7 +10942,7 @@ type SecretData_BitBucketCredentials struct { func (x *SecretData_BitBucketCredentials) Reset() { *x = SecretData_BitBucketCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[137] + mi := &file_proto_scan_result_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10894,7 +10954,7 @@ func (x *SecretData_BitBucketCredentials) String() string { func (*SecretData_BitBucketCredentials) ProtoMessage() {} func (x *SecretData_BitBucketCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[137] + mi := &file_proto_scan_result_proto_msgTypes[138] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10907,7 +10967,7 @@ func (x *SecretData_BitBucketCredentials) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_BitBucketCredentials.ProtoReflect.Descriptor instead. func (*SecretData_BitBucketCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 60} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 61} } func (x *SecretData_BitBucketCredentials) GetUrl() string { @@ -10926,7 +10986,7 @@ type SecretData_ElasticCloudAPIKey struct { func (x *SecretData_ElasticCloudAPIKey) Reset() { *x = SecretData_ElasticCloudAPIKey{} - mi := &file_proto_scan_result_proto_msgTypes[138] + mi := &file_proto_scan_result_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10938,7 +10998,7 @@ func (x *SecretData_ElasticCloudAPIKey) String() string { func (*SecretData_ElasticCloudAPIKey) ProtoMessage() {} func (x *SecretData_ElasticCloudAPIKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[138] + mi := &file_proto_scan_result_proto_msgTypes[139] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10951,7 +11011,7 @@ func (x *SecretData_ElasticCloudAPIKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_ElasticCloudAPIKey.ProtoReflect.Descriptor instead. func (*SecretData_ElasticCloudAPIKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 61} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 62} } func (x *SecretData_ElasticCloudAPIKey) GetKey() string { @@ -10970,7 +11030,7 @@ type SecretData_PaystackSecretKey struct { func (x *SecretData_PaystackSecretKey) Reset() { *x = SecretData_PaystackSecretKey{} - mi := &file_proto_scan_result_proto_msgTypes[139] + mi := &file_proto_scan_result_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10982,7 +11042,7 @@ func (x *SecretData_PaystackSecretKey) String() string { func (*SecretData_PaystackSecretKey) ProtoMessage() {} func (x *SecretData_PaystackSecretKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[139] + mi := &file_proto_scan_result_proto_msgTypes[140] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10995,7 +11055,7 @@ func (x *SecretData_PaystackSecretKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_PaystackSecretKey.ProtoReflect.Descriptor instead. func (*SecretData_PaystackSecretKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 62} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 63} } func (x *SecretData_PaystackSecretKey) GetKey() string { @@ -11016,7 +11076,7 @@ type SecretData_HerokuSecretKey struct { func (x *SecretData_HerokuSecretKey) Reset() { *x = SecretData_HerokuSecretKey{} - mi := &file_proto_scan_result_proto_msgTypes[140] + mi := &file_proto_scan_result_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11028,7 +11088,7 @@ func (x *SecretData_HerokuSecretKey) String() string { func (*SecretData_HerokuSecretKey) ProtoMessage() {} func (x *SecretData_HerokuSecretKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[140] + mi := &file_proto_scan_result_proto_msgTypes[141] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11041,7 +11101,7 @@ func (x *SecretData_HerokuSecretKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_HerokuSecretKey.ProtoReflect.Descriptor instead. func (*SecretData_HerokuSecretKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 63} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 64} } func (x *SecretData_HerokuSecretKey) GetKey() string { @@ -11070,7 +11130,7 @@ type SecretData_HerokuSecretKeyMetadata struct { func (x *SecretData_HerokuSecretKeyMetadata) Reset() { *x = SecretData_HerokuSecretKeyMetadata{} - mi := &file_proto_scan_result_proto_msgTypes[141] + mi := &file_proto_scan_result_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11082,7 +11142,7 @@ func (x *SecretData_HerokuSecretKeyMetadata) String() string { func (*SecretData_HerokuSecretKeyMetadata) ProtoMessage() {} func (x *SecretData_HerokuSecretKeyMetadata) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[141] + mi := &file_proto_scan_result_proto_msgTypes[142] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11095,7 +11155,7 @@ func (x *SecretData_HerokuSecretKeyMetadata) ProtoReflect() protoreflect.Message // Deprecated: Use SecretData_HerokuSecretKeyMetadata.ProtoReflect.Descriptor instead. func (*SecretData_HerokuSecretKeyMetadata) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 64} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 65} } func (x *SecretData_HerokuSecretKeyMetadata) GetExpireTime() *durationpb.Duration { @@ -11121,7 +11181,7 @@ type SecretData_TelegramBotToken struct { func (x *SecretData_TelegramBotToken) Reset() { *x = SecretData_TelegramBotToken{} - mi := &file_proto_scan_result_proto_msgTypes[142] + mi := &file_proto_scan_result_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11133,7 +11193,7 @@ func (x *SecretData_TelegramBotToken) String() string { func (*SecretData_TelegramBotToken) ProtoMessage() {} func (x *SecretData_TelegramBotToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[142] + mi := &file_proto_scan_result_proto_msgTypes[143] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11146,7 +11206,7 @@ func (x *SecretData_TelegramBotToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_TelegramBotToken.ProtoReflect.Descriptor instead. func (*SecretData_TelegramBotToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 65} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 66} } func (x *SecretData_TelegramBotToken) GetToken() string { @@ -11166,7 +11226,7 @@ type SecretData_SalesforceOAuth2AccessToken struct { func (x *SecretData_SalesforceOAuth2AccessToken) Reset() { *x = SecretData_SalesforceOAuth2AccessToken{} - mi := &file_proto_scan_result_proto_msgTypes[143] + mi := &file_proto_scan_result_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11178,7 +11238,7 @@ func (x *SecretData_SalesforceOAuth2AccessToken) String() string { func (*SecretData_SalesforceOAuth2AccessToken) ProtoMessage() {} func (x *SecretData_SalesforceOAuth2AccessToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[143] + mi := &file_proto_scan_result_proto_msgTypes[144] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11191,7 +11251,7 @@ func (x *SecretData_SalesforceOAuth2AccessToken) ProtoReflect() protoreflect.Mes // Deprecated: Use SecretData_SalesforceOAuth2AccessToken.ProtoReflect.Descriptor instead. func (*SecretData_SalesforceOAuth2AccessToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 66} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 67} } func (x *SecretData_SalesforceOAuth2AccessToken) GetToken() string { @@ -11210,7 +11270,7 @@ type SecretData_SendGridAPIKey struct { func (x *SecretData_SendGridAPIKey) Reset() { *x = SecretData_SendGridAPIKey{} - mi := &file_proto_scan_result_proto_msgTypes[144] + mi := &file_proto_scan_result_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11222,7 +11282,7 @@ func (x *SecretData_SendGridAPIKey) String() string { func (*SecretData_SendGridAPIKey) ProtoMessage() {} func (x *SecretData_SendGridAPIKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[144] + mi := &file_proto_scan_result_proto_msgTypes[145] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11235,7 +11295,7 @@ func (x *SecretData_SendGridAPIKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_SendGridAPIKey.ProtoReflect.Descriptor instead. func (*SecretData_SendGridAPIKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 67} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 68} } func (x *SecretData_SendGridAPIKey) GetKey() string { @@ -11259,7 +11319,7 @@ type SecretData_SalesforceOAuth2ClientCredentials struct { func (x *SecretData_SalesforceOAuth2ClientCredentials) Reset() { *x = SecretData_SalesforceOAuth2ClientCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[145] + mi := &file_proto_scan_result_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11271,7 +11331,7 @@ func (x *SecretData_SalesforceOAuth2ClientCredentials) String() string { func (*SecretData_SalesforceOAuth2ClientCredentials) ProtoMessage() {} func (x *SecretData_SalesforceOAuth2ClientCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[145] + mi := &file_proto_scan_result_proto_msgTypes[146] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11284,7 +11344,7 @@ func (x *SecretData_SalesforceOAuth2ClientCredentials) ProtoReflect() protorefle // Deprecated: Use SecretData_SalesforceOAuth2ClientCredentials.ProtoReflect.Descriptor instead. func (*SecretData_SalesforceOAuth2ClientCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 68} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 69} } func (x *SecretData_SalesforceOAuth2ClientCredentials) GetId() string { @@ -11322,7 +11382,7 @@ type SecretData_SalesforceOAuth2RefreshCredentials struct { func (x *SecretData_SalesforceOAuth2RefreshCredentials) Reset() { *x = SecretData_SalesforceOAuth2RefreshCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[146] + mi := &file_proto_scan_result_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11334,7 +11394,7 @@ func (x *SecretData_SalesforceOAuth2RefreshCredentials) String() string { func (*SecretData_SalesforceOAuth2RefreshCredentials) ProtoMessage() {} func (x *SecretData_SalesforceOAuth2RefreshCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[146] + mi := &file_proto_scan_result_proto_msgTypes[147] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11347,7 +11407,7 @@ func (x *SecretData_SalesforceOAuth2RefreshCredentials) ProtoReflect() protorefl // Deprecated: Use SecretData_SalesforceOAuth2RefreshCredentials.ProtoReflect.Descriptor instead. func (*SecretData_SalesforceOAuth2RefreshCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 69} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 70} } func (x *SecretData_SalesforceOAuth2RefreshCredentials) GetId() string { @@ -11385,7 +11445,7 @@ type SecretData_SalesforceOAuth2JWTCredentials struct { func (x *SecretData_SalesforceOAuth2JWTCredentials) Reset() { *x = SecretData_SalesforceOAuth2JWTCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[147] + mi := &file_proto_scan_result_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11397,7 +11457,7 @@ func (x *SecretData_SalesforceOAuth2JWTCredentials) String() string { func (*SecretData_SalesforceOAuth2JWTCredentials) ProtoMessage() {} func (x *SecretData_SalesforceOAuth2JWTCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[147] + mi := &file_proto_scan_result_proto_msgTypes[148] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11410,7 +11470,7 @@ func (x *SecretData_SalesforceOAuth2JWTCredentials) ProtoReflect() protoreflect. // Deprecated: Use SecretData_SalesforceOAuth2JWTCredentials.ProtoReflect.Descriptor instead. func (*SecretData_SalesforceOAuth2JWTCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 70} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 71} } func (x *SecretData_SalesforceOAuth2JWTCredentials) GetId() string { @@ -11443,7 +11503,7 @@ type SecretData_CursorAPIKey struct { func (x *SecretData_CursorAPIKey) Reset() { *x = SecretData_CursorAPIKey{} - mi := &file_proto_scan_result_proto_msgTypes[148] + mi := &file_proto_scan_result_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11455,7 +11515,7 @@ func (x *SecretData_CursorAPIKey) String() string { func (*SecretData_CursorAPIKey) ProtoMessage() {} func (x *SecretData_CursorAPIKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[148] + mi := &file_proto_scan_result_proto_msgTypes[149] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11468,7 +11528,7 @@ func (x *SecretData_CursorAPIKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_CursorAPIKey.ProtoReflect.Descriptor instead. func (*SecretData_CursorAPIKey) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 71} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 72} } func (x *SecretData_CursorAPIKey) GetKey() string { @@ -11487,7 +11547,7 @@ type SecretData_CircleCIPersonalAccessToken struct { func (x *SecretData_CircleCIPersonalAccessToken) Reset() { *x = SecretData_CircleCIPersonalAccessToken{} - mi := &file_proto_scan_result_proto_msgTypes[149] + mi := &file_proto_scan_result_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11499,7 +11559,7 @@ func (x *SecretData_CircleCIPersonalAccessToken) String() string { func (*SecretData_CircleCIPersonalAccessToken) ProtoMessage() {} func (x *SecretData_CircleCIPersonalAccessToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[149] + mi := &file_proto_scan_result_proto_msgTypes[150] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11512,7 +11572,7 @@ func (x *SecretData_CircleCIPersonalAccessToken) ProtoReflect() protoreflect.Mes // Deprecated: Use SecretData_CircleCIPersonalAccessToken.ProtoReflect.Descriptor instead. func (*SecretData_CircleCIPersonalAccessToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 72} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 73} } func (x *SecretData_CircleCIPersonalAccessToken) GetToken() string { @@ -11531,7 +11591,7 @@ type SecretData_CircleCIProjectToken struct { func (x *SecretData_CircleCIProjectToken) Reset() { *x = SecretData_CircleCIProjectToken{} - mi := &file_proto_scan_result_proto_msgTypes[150] + mi := &file_proto_scan_result_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11543,7 +11603,7 @@ func (x *SecretData_CircleCIProjectToken) String() string { func (*SecretData_CircleCIProjectToken) ProtoMessage() {} func (x *SecretData_CircleCIProjectToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[150] + mi := &file_proto_scan_result_proto_msgTypes[151] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11556,7 +11616,7 @@ func (x *SecretData_CircleCIProjectToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_CircleCIProjectToken.ProtoReflect.Descriptor instead. func (*SecretData_CircleCIProjectToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 73} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 74} } func (x *SecretData_CircleCIProjectToken) GetToken() string { @@ -11575,7 +11635,7 @@ type SecretData_URLCredentials struct { func (x *SecretData_URLCredentials) Reset() { *x = SecretData_URLCredentials{} - mi := &file_proto_scan_result_proto_msgTypes[151] + mi := &file_proto_scan_result_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11587,7 +11647,7 @@ func (x *SecretData_URLCredentials) String() string { func (*SecretData_URLCredentials) ProtoMessage() {} func (x *SecretData_URLCredentials) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[151] + mi := &file_proto_scan_result_proto_msgTypes[152] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11600,7 +11660,7 @@ func (x *SecretData_URLCredentials) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretData_URLCredentials.ProtoReflect.Descriptor instead. func (*SecretData_URLCredentials) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 74} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 75} } func (x *SecretData_URLCredentials) GetUrl() string { @@ -11619,7 +11679,7 @@ type SecretData_SquarePersonalAccessToken struct { func (x *SecretData_SquarePersonalAccessToken) Reset() { *x = SecretData_SquarePersonalAccessToken{} - mi := &file_proto_scan_result_proto_msgTypes[152] + mi := &file_proto_scan_result_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11631,7 +11691,7 @@ func (x *SecretData_SquarePersonalAccessToken) String() string { func (*SecretData_SquarePersonalAccessToken) ProtoMessage() {} func (x *SecretData_SquarePersonalAccessToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[152] + mi := &file_proto_scan_result_proto_msgTypes[153] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11644,7 +11704,7 @@ func (x *SecretData_SquarePersonalAccessToken) ProtoReflect() protoreflect.Messa // Deprecated: Use SecretData_SquarePersonalAccessToken.ProtoReflect.Descriptor instead. func (*SecretData_SquarePersonalAccessToken) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 75} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 76} } func (x *SecretData_SquarePersonalAccessToken) GetKey() string { @@ -11664,7 +11724,7 @@ type SecretData_SquareOAuthApplicationSecret struct { func (x *SecretData_SquareOAuthApplicationSecret) Reset() { *x = SecretData_SquareOAuthApplicationSecret{} - mi := &file_proto_scan_result_proto_msgTypes[153] + mi := &file_proto_scan_result_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11676,7 +11736,7 @@ func (x *SecretData_SquareOAuthApplicationSecret) String() string { func (*SecretData_SquareOAuthApplicationSecret) ProtoMessage() {} func (x *SecretData_SquareOAuthApplicationSecret) ProtoReflect() protoreflect.Message { - mi := &file_proto_scan_result_proto_msgTypes[153] + mi := &file_proto_scan_result_proto_msgTypes[154] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11689,7 +11749,7 @@ func (x *SecretData_SquareOAuthApplicationSecret) ProtoReflect() protoreflect.Me // Deprecated: Use SecretData_SquareOAuthApplicationSecret.ProtoReflect.Descriptor instead. func (*SecretData_SquareOAuthApplicationSecret) Descriptor() ([]byte, []int) { - return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 76} + return file_proto_scan_result_proto_rawDescGZIP(), []int{64, 77} } func (x *SecretData_SquareOAuthApplicationSecret) GetId() string { @@ -12176,7 +12236,7 @@ const file_proto_scan_result_proto_rawDesc = "" + "\x06Secret\x12+\n" + "\x06secret\x18\x01 \x01(\v2\x13.scalibr.SecretDataR\x06secret\x12-\n" + "\x06status\x18\x02 \x01(\v2\x15.scalibr.SecretStatusR\x06status\x12/\n" + - "\tlocations\x18\x03 \x03(\v2\x11.scalibr.LocationR\tlocations\"\xd2a\n" + + "\tlocations\x18\x03 \x03(\v2\x11.scalibr.LocationR\tlocations\"\xdeb\n" + "\n" + "SecretData\x124\n" + "\x06gcpsak\x18\x01 \x01(\v2\x1a.scalibr.SecretData.GCPSAKH\x00R\x06gcpsak\x12m\n" + @@ -12265,7 +12325,8 @@ const file_proto_scan_result_proto_rawDesc = "" + "\bdeno_pat\x18I \x01(\v2\x1b.scalibr.SecretData.DenoPatH\x00R\adenoPat\x12Q\n" + "\x11heroku_secret_key\x18J \x01(\v2#.scalibr.SecretData.HerokuSecretKeyH\x00R\x0fherokuSecretKey\x12T\n" + "\x12npmjs_access_token\x18K \x01(\v2$.scalibr.SecretData.NpmJsAccessTokenH\x00R\x10npmjsAccessToken\x12Z\n" + - "\x14cloudflare_api_token\x18L \x01(\v2&.scalibr.SecretData.CloudflareAPITokenH\x00R\x12cloudflareApiToken\x1a\xb0\x03\n" + + "\x14cloudflare_api_token\x18L \x01(\v2&.scalibr.SecretData.CloudflareAPITokenH\x00R\x12cloudflareApiToken\x12`\n" + + "\x16mongodb_connection_url\x18M \x01(\v2(.scalibr.SecretData.MongoDBConnectionURLH\x00R\x14mongodbConnectionUrl\x1a\xb0\x03\n" + "\x06GCPSAK\x12$\n" + "\x0eprivate_key_id\x18\x01 \x01(\tR\fprivateKeyId\x12!\n" + "\fclient_email\x18\x02 \x01(\tR\vclientEmail\x12\x1c\n" + @@ -12324,7 +12385,9 @@ const file_proto_scan_result_proto_rawDesc = "" + "\x03pat\x18\x01 \x01(\tR\x03pat\x12\x1a\n" + "\busername\x18\x02 \x01(\tR\busername\x1a*\n" + "\x12CloudflareAPIToken\x12\x14\n" + - "\x05token\x18\x01 \x01(\tR\x05token\x1a\x1b\n" + + "\x05token\x18\x01 \x01(\tR\x05token\x1a(\n" + + "\x14MongoDBConnectionURL\x12\x10\n" + + "\x03url\x18\x01 \x01(\tR\x03url\x1a\x1b\n" + "\aDenoPat\x12\x10\n" + "\x03pat\x18\x01 \x01(\tR\x03pat\x1a\x1d\n" + "\tGitlabPat\x12\x10\n" + @@ -12580,7 +12643,7 @@ func file_proto_scan_result_proto_rawDescGZIP() []byte { } var file_proto_scan_result_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_proto_scan_result_proto_msgTypes = make([]protoimpl.MessageInfo, 155) +var file_proto_scan_result_proto_msgTypes = make([]protoimpl.MessageInfo, 156) var file_proto_scan_result_proto_goTypes = []any{ (VexJustification)(0), // 0: scalibr.VexJustification (SeverityEnum)(0), // 1: scalibr.SeverityEnum @@ -12681,74 +12744,75 @@ var file_proto_scan_result_proto_goTypes = []any{ (*SecretData_OpenAIAPIKey)(nil), // 96: scalibr.SecretData.OpenAIAPIKey (*SecretData_DockerHubPat)(nil), // 97: scalibr.SecretData.DockerHubPat (*SecretData_CloudflareAPIToken)(nil), // 98: scalibr.SecretData.CloudflareAPIToken - (*SecretData_DenoPat)(nil), // 99: scalibr.SecretData.DenoPat - (*SecretData_GitlabPat)(nil), // 100: scalibr.SecretData.GitlabPat - (*SecretData_SlackAppLevelToken)(nil), // 101: scalibr.SecretData.SlackAppLevelToken - (*SecretData_SlackAppConfigAccessToken)(nil), // 102: scalibr.SecretData.SlackAppConfigAccessToken - (*SecretData_SlackAppConfigRefreshToken)(nil), // 103: scalibr.SecretData.SlackAppConfigRefreshToken - (*SecretData_PostmanAPIKey)(nil), // 104: scalibr.SecretData.PostmanAPIKey - (*SecretData_PostmanCollectionAccessToken)(nil), // 105: scalibr.SecretData.PostmanCollectionAccessToken - (*SecretData_OpenRouterAPIKey)(nil), // 106: scalibr.SecretData.OpenRouterAPIKey - (*SecretData_DigitalOceanAPIToken)(nil), // 107: scalibr.SecretData.DigitalOceanAPIToken - (*SecretData_CratesIOAPIToken)(nil), // 108: scalibr.SecretData.CratesIOAPIToken - (*SecretData_NpmJsAccessToken)(nil), // 109: scalibr.SecretData.NpmJsAccessToken - (*SecretData_GithubAppRefreshToken)(nil), // 110: scalibr.SecretData.GithubAppRefreshToken - (*SecretData_GithubAppServerToServerToken)(nil), // 111: scalibr.SecretData.GithubAppServerToServerToken - (*SecretData_GithubClassicPersonalAccessToken)(nil), // 112: scalibr.SecretData.GithubClassicPersonalAccessToken - (*SecretData_GithubFineGrainedPersonalAccessToken)(nil), // 113: scalibr.SecretData.GithubFineGrainedPersonalAccessToken - (*SecretData_GithubOAuthToken)(nil), // 114: scalibr.SecretData.GithubOAuthToken - (*SecretData_GithubAppUserToServerToken)(nil), // 115: scalibr.SecretData.GithubAppUserToServerToken - (*SecretData_PyPIAPIToken)(nil), // 116: scalibr.SecretData.PyPIAPIToken - (*SecretData_TinkKeyset)(nil), // 117: scalibr.SecretData.TinkKeyset - (*SecretData_HashiCorpVaultToken)(nil), // 118: scalibr.SecretData.HashiCorpVaultToken - (*SecretData_HashiCorpVaultAppRoleCredentials)(nil), // 119: scalibr.SecretData.HashiCorpVaultAppRoleCredentials - (*SecretData_GCPAPIKey)(nil), // 120: scalibr.SecretData.GCPAPIKey - (*SecretData_HuggingfaceAPIKey)(nil), // 121: scalibr.SecretData.HuggingfaceAPIKey - (*SecretData_HashiCorpCloudPlatformCredentials)(nil), // 122: scalibr.SecretData.HashiCorpCloudPlatformCredentials - (*SecretData_HashiCorpCloudPlatformToken)(nil), // 123: scalibr.SecretData.HashiCorpCloudPlatformToken - (*SecretData_StripeSecretKey)(nil), // 124: scalibr.SecretData.StripeSecretKey - (*SecretData_StripeRestrictedKey)(nil), // 125: scalibr.SecretData.StripeRestrictedKey - (*SecretData_StripeWebhookSecret)(nil), // 126: scalibr.SecretData.StripeWebhookSecret - (*SecretData_GCPOAuth2ClientCredentials)(nil), // 127: scalibr.SecretData.GCPOAuth2ClientCredentials - (*SecretData_GCPOAuth2AccessToken)(nil), // 128: scalibr.SecretData.GCPOAuth2AccessToken - (*SecretData_GCSHmacKey)(nil), // 129: scalibr.SecretData.GCSHmacKey - (*SecretData_MysqlMyloginSection)(nil), // 130: scalibr.SecretData.MysqlMyloginSection - (*SecretData_VapidKey)(nil), // 131: scalibr.SecretData.VapidKey - (*SecretData_OnePasswordConnectToken)(nil), // 132: scalibr.SecretData.OnePasswordConnectToken - (*SecretData_OnePasswordSecretKey)(nil), // 133: scalibr.SecretData.OnePasswordSecretKey - (*SecretData_OnePasswordServiceToken)(nil), // 134: scalibr.SecretData.OnePasswordServiceToken - (*SecretData_OnePasswordRecoveryCode)(nil), // 135: scalibr.SecretData.OnePasswordRecoveryCode - (*SecretData_AwsAccessKeyCredentials)(nil), // 136: scalibr.SecretData.AwsAccessKeyCredentials - (*SecretData_ReCaptchaKey)(nil), // 137: scalibr.SecretData.ReCaptchaKey - (*SecretData_PyxKeyV1)(nil), // 138: scalibr.SecretData.PyxKeyV1 - (*SecretData_PyxKeyV2)(nil), // 139: scalibr.SecretData.PyxKeyV2 - (*SecretData_CodeCatalystCredentials)(nil), // 140: scalibr.SecretData.CodeCatalystCredentials - (*SecretData_CodeCommitCredentials)(nil), // 141: scalibr.SecretData.CodeCommitCredentials - (*SecretData_BitBucketCredentials)(nil), // 142: scalibr.SecretData.BitBucketCredentials - (*SecretData_ElasticCloudAPIKey)(nil), // 143: scalibr.SecretData.ElasticCloudAPIKey - (*SecretData_PaystackSecretKey)(nil), // 144: scalibr.SecretData.PaystackSecretKey - (*SecretData_HerokuSecretKey)(nil), // 145: scalibr.SecretData.HerokuSecretKey - (*SecretData_HerokuSecretKeyMetadata)(nil), // 146: scalibr.SecretData.HerokuSecretKeyMetadata - (*SecretData_TelegramBotToken)(nil), // 147: scalibr.SecretData.TelegramBotToken - (*SecretData_SalesforceOAuth2AccessToken)(nil), // 148: scalibr.SecretData.SalesforceOAuth2AccessToken - (*SecretData_SendGridAPIKey)(nil), // 149: scalibr.SecretData.SendGridAPIKey - (*SecretData_SalesforceOAuth2ClientCredentials)(nil), // 150: scalibr.SecretData.SalesforceOAuth2ClientCredentials - (*SecretData_SalesforceOAuth2RefreshCredentials)(nil), // 151: scalibr.SecretData.SalesforceOAuth2RefreshCredentials - (*SecretData_SalesforceOAuth2JWTCredentials)(nil), // 152: scalibr.SecretData.SalesforceOAuth2JWTCredentials - (*SecretData_CursorAPIKey)(nil), // 153: scalibr.SecretData.CursorAPIKey - (*SecretData_CircleCIPersonalAccessToken)(nil), // 154: scalibr.SecretData.CircleCIPersonalAccessToken - (*SecretData_CircleCIProjectToken)(nil), // 155: scalibr.SecretData.CircleCIProjectToken - (*SecretData_URLCredentials)(nil), // 156: scalibr.SecretData.URLCredentials - (*SecretData_SquarePersonalAccessToken)(nil), // 157: scalibr.SecretData.SquarePersonalAccessToken - (*SecretData_SquareOAuthApplicationSecret)(nil), // 158: scalibr.SecretData.SquareOAuthApplicationSecret - nil, // 159: scalibr.ContainerImageMetadata.OsInfoEntry - (*timestamppb.Timestamp)(nil), // 160: google.protobuf.Timestamp - (*osvschema.Vulnerability)(nil), // 161: osv.Vulnerability - (*durationpb.Duration)(nil), // 162: google.protobuf.Duration + (*SecretData_MongoDBConnectionURL)(nil), // 99: scalibr.SecretData.MongoDBConnectionURL + (*SecretData_DenoPat)(nil), // 100: scalibr.SecretData.DenoPat + (*SecretData_GitlabPat)(nil), // 101: scalibr.SecretData.GitlabPat + (*SecretData_SlackAppLevelToken)(nil), // 102: scalibr.SecretData.SlackAppLevelToken + (*SecretData_SlackAppConfigAccessToken)(nil), // 103: scalibr.SecretData.SlackAppConfigAccessToken + (*SecretData_SlackAppConfigRefreshToken)(nil), // 104: scalibr.SecretData.SlackAppConfigRefreshToken + (*SecretData_PostmanAPIKey)(nil), // 105: scalibr.SecretData.PostmanAPIKey + (*SecretData_PostmanCollectionAccessToken)(nil), // 106: scalibr.SecretData.PostmanCollectionAccessToken + (*SecretData_OpenRouterAPIKey)(nil), // 107: scalibr.SecretData.OpenRouterAPIKey + (*SecretData_DigitalOceanAPIToken)(nil), // 108: scalibr.SecretData.DigitalOceanAPIToken + (*SecretData_CratesIOAPIToken)(nil), // 109: scalibr.SecretData.CratesIOAPIToken + (*SecretData_NpmJsAccessToken)(nil), // 110: scalibr.SecretData.NpmJsAccessToken + (*SecretData_GithubAppRefreshToken)(nil), // 111: scalibr.SecretData.GithubAppRefreshToken + (*SecretData_GithubAppServerToServerToken)(nil), // 112: scalibr.SecretData.GithubAppServerToServerToken + (*SecretData_GithubClassicPersonalAccessToken)(nil), // 113: scalibr.SecretData.GithubClassicPersonalAccessToken + (*SecretData_GithubFineGrainedPersonalAccessToken)(nil), // 114: scalibr.SecretData.GithubFineGrainedPersonalAccessToken + (*SecretData_GithubOAuthToken)(nil), // 115: scalibr.SecretData.GithubOAuthToken + (*SecretData_GithubAppUserToServerToken)(nil), // 116: scalibr.SecretData.GithubAppUserToServerToken + (*SecretData_PyPIAPIToken)(nil), // 117: scalibr.SecretData.PyPIAPIToken + (*SecretData_TinkKeyset)(nil), // 118: scalibr.SecretData.TinkKeyset + (*SecretData_HashiCorpVaultToken)(nil), // 119: scalibr.SecretData.HashiCorpVaultToken + (*SecretData_HashiCorpVaultAppRoleCredentials)(nil), // 120: scalibr.SecretData.HashiCorpVaultAppRoleCredentials + (*SecretData_GCPAPIKey)(nil), // 121: scalibr.SecretData.GCPAPIKey + (*SecretData_HuggingfaceAPIKey)(nil), // 122: scalibr.SecretData.HuggingfaceAPIKey + (*SecretData_HashiCorpCloudPlatformCredentials)(nil), // 123: scalibr.SecretData.HashiCorpCloudPlatformCredentials + (*SecretData_HashiCorpCloudPlatformToken)(nil), // 124: scalibr.SecretData.HashiCorpCloudPlatformToken + (*SecretData_StripeSecretKey)(nil), // 125: scalibr.SecretData.StripeSecretKey + (*SecretData_StripeRestrictedKey)(nil), // 126: scalibr.SecretData.StripeRestrictedKey + (*SecretData_StripeWebhookSecret)(nil), // 127: scalibr.SecretData.StripeWebhookSecret + (*SecretData_GCPOAuth2ClientCredentials)(nil), // 128: scalibr.SecretData.GCPOAuth2ClientCredentials + (*SecretData_GCPOAuth2AccessToken)(nil), // 129: scalibr.SecretData.GCPOAuth2AccessToken + (*SecretData_GCSHmacKey)(nil), // 130: scalibr.SecretData.GCSHmacKey + (*SecretData_MysqlMyloginSection)(nil), // 131: scalibr.SecretData.MysqlMyloginSection + (*SecretData_VapidKey)(nil), // 132: scalibr.SecretData.VapidKey + (*SecretData_OnePasswordConnectToken)(nil), // 133: scalibr.SecretData.OnePasswordConnectToken + (*SecretData_OnePasswordSecretKey)(nil), // 134: scalibr.SecretData.OnePasswordSecretKey + (*SecretData_OnePasswordServiceToken)(nil), // 135: scalibr.SecretData.OnePasswordServiceToken + (*SecretData_OnePasswordRecoveryCode)(nil), // 136: scalibr.SecretData.OnePasswordRecoveryCode + (*SecretData_AwsAccessKeyCredentials)(nil), // 137: scalibr.SecretData.AwsAccessKeyCredentials + (*SecretData_ReCaptchaKey)(nil), // 138: scalibr.SecretData.ReCaptchaKey + (*SecretData_PyxKeyV1)(nil), // 139: scalibr.SecretData.PyxKeyV1 + (*SecretData_PyxKeyV2)(nil), // 140: scalibr.SecretData.PyxKeyV2 + (*SecretData_CodeCatalystCredentials)(nil), // 141: scalibr.SecretData.CodeCatalystCredentials + (*SecretData_CodeCommitCredentials)(nil), // 142: scalibr.SecretData.CodeCommitCredentials + (*SecretData_BitBucketCredentials)(nil), // 143: scalibr.SecretData.BitBucketCredentials + (*SecretData_ElasticCloudAPIKey)(nil), // 144: scalibr.SecretData.ElasticCloudAPIKey + (*SecretData_PaystackSecretKey)(nil), // 145: scalibr.SecretData.PaystackSecretKey + (*SecretData_HerokuSecretKey)(nil), // 146: scalibr.SecretData.HerokuSecretKey + (*SecretData_HerokuSecretKeyMetadata)(nil), // 147: scalibr.SecretData.HerokuSecretKeyMetadata + (*SecretData_TelegramBotToken)(nil), // 148: scalibr.SecretData.TelegramBotToken + (*SecretData_SalesforceOAuth2AccessToken)(nil), // 149: scalibr.SecretData.SalesforceOAuth2AccessToken + (*SecretData_SendGridAPIKey)(nil), // 150: scalibr.SecretData.SendGridAPIKey + (*SecretData_SalesforceOAuth2ClientCredentials)(nil), // 151: scalibr.SecretData.SalesforceOAuth2ClientCredentials + (*SecretData_SalesforceOAuth2RefreshCredentials)(nil), // 152: scalibr.SecretData.SalesforceOAuth2RefreshCredentials + (*SecretData_SalesforceOAuth2JWTCredentials)(nil), // 153: scalibr.SecretData.SalesforceOAuth2JWTCredentials + (*SecretData_CursorAPIKey)(nil), // 154: scalibr.SecretData.CursorAPIKey + (*SecretData_CircleCIPersonalAccessToken)(nil), // 155: scalibr.SecretData.CircleCIPersonalAccessToken + (*SecretData_CircleCIProjectToken)(nil), // 156: scalibr.SecretData.CircleCIProjectToken + (*SecretData_URLCredentials)(nil), // 157: scalibr.SecretData.URLCredentials + (*SecretData_SquarePersonalAccessToken)(nil), // 158: scalibr.SecretData.SquarePersonalAccessToken + (*SecretData_SquareOAuthApplicationSecret)(nil), // 159: scalibr.SecretData.SquareOAuthApplicationSecret + nil, // 160: scalibr.ContainerImageMetadata.OsInfoEntry + (*timestamppb.Timestamp)(nil), // 161: google.protobuf.Timestamp + (*osvschema.Vulnerability)(nil), // 162: osv.Vulnerability + (*durationpb.Duration)(nil), // 163: google.protobuf.Duration } var file_proto_scan_result_proto_depIdxs = []int32{ - 160, // 0: scalibr.ScanResult.start_time:type_name -> google.protobuf.Timestamp - 160, // 1: scalibr.ScanResult.end_time:type_name -> google.protobuf.Timestamp + 161, // 0: scalibr.ScanResult.start_time:type_name -> google.protobuf.Timestamp + 161, // 1: scalibr.ScanResult.end_time:type_name -> google.protobuf.Timestamp 7, // 2: scalibr.ScanResult.status:type_name -> scalibr.ScanStatus 8, // 3: scalibr.ScanResult.plugin_status:type_name -> scalibr.PluginStatus 6, // 4: scalibr.ScanResult.inventory:type_name -> scalibr.Inventory @@ -12810,7 +12874,7 @@ var file_proto_scan_result_proto_depIdxs = []int32{ 14, // 60: scalibr.PackageExploitabilitySignal.vuln_identifiers:type_name -> scalibr.VulnIdentifiers 0, // 61: scalibr.FindingExploitabilitySignal.justification:type_name -> scalibr.VexJustification 17, // 62: scalibr.Purl.qualifiers:type_name -> scalibr.Qualifier - 161, // 63: scalibr.PackageVuln.vuln:type_name -> osv.Vulnerability + 162, // 63: scalibr.PackageVuln.vuln:type_name -> osv.Vulnerability 15, // 64: scalibr.PackageVuln.exploitability_signals:type_name -> scalibr.FindingExploitabilitySignal 20, // 65: scalibr.GenericFinding.adv:type_name -> scalibr.GenericFindingAdvisory 22, // 66: scalibr.GenericFinding.target:type_name -> scalibr.GenericFindingTargetDetails @@ -12821,8 +12885,8 @@ var file_proto_scan_result_proto_depIdxs = []int32{ 16, // 71: scalibr.SPDXPackageMetadata.purl:type_name -> scalibr.Purl 16, // 72: scalibr.CDXPackageMetadata.purl:type_name -> scalibr.Purl 81, // 73: scalibr.PodmanMetadata.exposed_ports:type_name -> scalibr.PodmanMetadata.ExposedPortsEntry - 160, // 74: scalibr.PodmanMetadata.started_time:type_name -> google.protobuf.Timestamp - 160, // 75: scalibr.PodmanMetadata.finished_time:type_name -> google.protobuf.Timestamp + 161, // 74: scalibr.PodmanMetadata.started_time:type_name -> google.protobuf.Timestamp + 161, // 75: scalibr.PodmanMetadata.finished_time:type_name -> google.protobuf.Timestamp 64, // 76: scalibr.DockerContainersMetadata.ports:type_name -> scalibr.DockerPort 67, // 77: scalibr.UnknownBinaryMetadata.attribution:type_name -> scalibr.UnknownBinaryAttribution 69, // 78: scalibr.Secret.secret:type_name -> scalibr.SecretData @@ -12836,93 +12900,94 @@ var file_proto_scan_result_proto_depIdxs = []int32{ 88, // 86: scalibr.SecretData.grok_xai_api_key:type_name -> scalibr.SecretData.GrokXAIAPIKey 89, // 87: scalibr.SecretData.grok_xai_management_api_key:type_name -> scalibr.SecretData.GrokXAIManagementAPIKey 97, // 88: scalibr.SecretData.docker_hub_pat:type_name -> scalibr.SecretData.DockerHubPat - 107, // 89: scalibr.SecretData.digitalocean:type_name -> scalibr.SecretData.DigitalOceanAPIToken + 108, // 89: scalibr.SecretData.digitalocean:type_name -> scalibr.SecretData.DigitalOceanAPIToken 96, // 90: scalibr.SecretData.openai_api_key:type_name -> scalibr.SecretData.OpenAIAPIKey - 104, // 91: scalibr.SecretData.postman_api_key:type_name -> scalibr.SecretData.PostmanAPIKey - 105, // 92: scalibr.SecretData.postman_collection_access_token:type_name -> scalibr.SecretData.PostmanCollectionAccessToken + 105, // 91: scalibr.SecretData.postman_api_key:type_name -> scalibr.SecretData.PostmanAPIKey + 106, // 92: scalibr.SecretData.postman_collection_access_token:type_name -> scalibr.SecretData.PostmanCollectionAccessToken 92, // 93: scalibr.SecretData.azure_access_token:type_name -> scalibr.SecretData.AzureAccessToken 95, // 94: scalibr.SecretData.azure_identity_token:type_name -> scalibr.SecretData.AzureIdentityToken - 117, // 95: scalibr.SecretData.tink_keyset:type_name -> scalibr.SecretData.TinkKeyset - 100, // 96: scalibr.SecretData.gitlab_pat:type_name -> scalibr.SecretData.GitlabPat - 118, // 97: scalibr.SecretData.hashicorp_vault_token:type_name -> scalibr.SecretData.HashiCorpVaultToken - 119, // 98: scalibr.SecretData.hashicorp_vault_app_role_credentials:type_name -> scalibr.SecretData.HashiCorpVaultAppRoleCredentials - 120, // 99: scalibr.SecretData.gcp_api_key:type_name -> scalibr.SecretData.GCPAPIKey - 121, // 100: scalibr.SecretData.hugginface:type_name -> scalibr.SecretData.HuggingfaceAPIKey - 110, // 101: scalibr.SecretData.github_app_refresh_token:type_name -> scalibr.SecretData.GithubAppRefreshToken - 124, // 102: scalibr.SecretData.stripe_secret_key:type_name -> scalibr.SecretData.StripeSecretKey - 125, // 103: scalibr.SecretData.stripe_restricted_key:type_name -> scalibr.SecretData.StripeRestrictedKey - 126, // 104: scalibr.SecretData.stripe_webhook_secret:type_name -> scalibr.SecretData.StripeWebhookSecret - 127, // 105: scalibr.SecretData.gcp_oauth2_client_credentials:type_name -> scalibr.SecretData.GCPOAuth2ClientCredentials - 128, // 106: scalibr.SecretData.gcp_oauth2_access_token:type_name -> scalibr.SecretData.GCPOAuth2AccessToken - 111, // 107: scalibr.SecretData.github_app_server_to_server_token:type_name -> scalibr.SecretData.GithubAppServerToServerToken - 112, // 108: scalibr.SecretData.github_classic_personal_access_token:type_name -> scalibr.SecretData.GithubClassicPersonalAccessToken - 113, // 109: scalibr.SecretData.github_fine_grained_personal_access_token:type_name -> scalibr.SecretData.GithubFineGrainedPersonalAccessToken - 115, // 110: scalibr.SecretData.github_app_user_to_server_token:type_name -> scalibr.SecretData.GithubAppUserToServerToken - 114, // 111: scalibr.SecretData.github_oauth_token:type_name -> scalibr.SecretData.GithubOAuthToken - 106, // 112: scalibr.SecretData.openrouter_api_key:type_name -> scalibr.SecretData.OpenRouterAPIKey - 103, // 113: scalibr.SecretData.slack_app_config_refresh_token:type_name -> scalibr.SecretData.SlackAppConfigRefreshToken - 101, // 114: scalibr.SecretData.slack_app_level_token:type_name -> scalibr.SecretData.SlackAppLevelToken - 102, // 115: scalibr.SecretData.slack_app_config_access_token:type_name -> scalibr.SecretData.SlackAppConfigAccessToken + 118, // 95: scalibr.SecretData.tink_keyset:type_name -> scalibr.SecretData.TinkKeyset + 101, // 96: scalibr.SecretData.gitlab_pat:type_name -> scalibr.SecretData.GitlabPat + 119, // 97: scalibr.SecretData.hashicorp_vault_token:type_name -> scalibr.SecretData.HashiCorpVaultToken + 120, // 98: scalibr.SecretData.hashicorp_vault_app_role_credentials:type_name -> scalibr.SecretData.HashiCorpVaultAppRoleCredentials + 121, // 99: scalibr.SecretData.gcp_api_key:type_name -> scalibr.SecretData.GCPAPIKey + 122, // 100: scalibr.SecretData.hugginface:type_name -> scalibr.SecretData.HuggingfaceAPIKey + 111, // 101: scalibr.SecretData.github_app_refresh_token:type_name -> scalibr.SecretData.GithubAppRefreshToken + 125, // 102: scalibr.SecretData.stripe_secret_key:type_name -> scalibr.SecretData.StripeSecretKey + 126, // 103: scalibr.SecretData.stripe_restricted_key:type_name -> scalibr.SecretData.StripeRestrictedKey + 127, // 104: scalibr.SecretData.stripe_webhook_secret:type_name -> scalibr.SecretData.StripeWebhookSecret + 128, // 105: scalibr.SecretData.gcp_oauth2_client_credentials:type_name -> scalibr.SecretData.GCPOAuth2ClientCredentials + 129, // 106: scalibr.SecretData.gcp_oauth2_access_token:type_name -> scalibr.SecretData.GCPOAuth2AccessToken + 112, // 107: scalibr.SecretData.github_app_server_to_server_token:type_name -> scalibr.SecretData.GithubAppServerToServerToken + 113, // 108: scalibr.SecretData.github_classic_personal_access_token:type_name -> scalibr.SecretData.GithubClassicPersonalAccessToken + 114, // 109: scalibr.SecretData.github_fine_grained_personal_access_token:type_name -> scalibr.SecretData.GithubFineGrainedPersonalAccessToken + 116, // 110: scalibr.SecretData.github_app_user_to_server_token:type_name -> scalibr.SecretData.GithubAppUserToServerToken + 115, // 111: scalibr.SecretData.github_oauth_token:type_name -> scalibr.SecretData.GithubOAuthToken + 107, // 112: scalibr.SecretData.openrouter_api_key:type_name -> scalibr.SecretData.OpenRouterAPIKey + 104, // 113: scalibr.SecretData.slack_app_config_refresh_token:type_name -> scalibr.SecretData.SlackAppConfigRefreshToken + 102, // 114: scalibr.SecretData.slack_app_level_token:type_name -> scalibr.SecretData.SlackAppLevelToken + 103, // 115: scalibr.SecretData.slack_app_config_access_token:type_name -> scalibr.SecretData.SlackAppConfigAccessToken 90, // 116: scalibr.SecretData.azure_storage_account_access_key:type_name -> scalibr.SecretData.AzureStorageAccountAccessKey - 122, // 117: scalibr.SecretData.hashicorp_cloud_platform_credentials:type_name -> scalibr.SecretData.HashiCorpCloudPlatformCredentials - 123, // 118: scalibr.SecretData.hashicorp_cloud_platform_token:type_name -> scalibr.SecretData.HashiCorpCloudPlatformToken - 133, // 119: scalibr.SecretData.onepassword_secret_key:type_name -> scalibr.SecretData.OnePasswordSecretKey - 134, // 120: scalibr.SecretData.onepassword_service_token:type_name -> scalibr.SecretData.OnePasswordServiceToken - 135, // 121: scalibr.SecretData.onepassword_recovery_code:type_name -> scalibr.SecretData.OnePasswordRecoveryCode - 132, // 122: scalibr.SecretData.onepassword_connect_token:type_name -> scalibr.SecretData.OnePasswordConnectToken + 123, // 117: scalibr.SecretData.hashicorp_cloud_platform_credentials:type_name -> scalibr.SecretData.HashiCorpCloudPlatformCredentials + 124, // 118: scalibr.SecretData.hashicorp_cloud_platform_token:type_name -> scalibr.SecretData.HashiCorpCloudPlatformToken + 134, // 119: scalibr.SecretData.onepassword_secret_key:type_name -> scalibr.SecretData.OnePasswordSecretKey + 135, // 120: scalibr.SecretData.onepassword_service_token:type_name -> scalibr.SecretData.OnePasswordServiceToken + 136, // 121: scalibr.SecretData.onepassword_recovery_code:type_name -> scalibr.SecretData.OnePasswordRecoveryCode + 133, // 122: scalibr.SecretData.onepassword_connect_token:type_name -> scalibr.SecretData.OnePasswordConnectToken 93, // 123: scalibr.SecretData.pgpass:type_name -> scalibr.SecretData.Pgpass - 116, // 124: scalibr.SecretData.pypi:type_name -> scalibr.SecretData.PyPIAPIToken - 108, // 125: scalibr.SecretData.crates_io_api_token:type_name -> scalibr.SecretData.CratesIOAPIToken + 117, // 124: scalibr.SecretData.pypi:type_name -> scalibr.SecretData.PyPIAPIToken + 109, // 125: scalibr.SecretData.crates_io_api_token:type_name -> scalibr.SecretData.CratesIOAPIToken 94, // 126: scalibr.SecretData.maria_db_credentials:type_name -> scalibr.SecretData.MariaDBCredentials - 129, // 127: scalibr.SecretData.gcs_hmac_key:type_name -> scalibr.SecretData.GCSHmacKey - 130, // 128: scalibr.SecretData.mysql_mylogin_section:type_name -> scalibr.SecretData.MysqlMyloginSection - 131, // 129: scalibr.SecretData.vapid_key:type_name -> scalibr.SecretData.VapidKey - 136, // 130: scalibr.SecretData.aws_access_key_credentials:type_name -> scalibr.SecretData.AwsAccessKeyCredentials - 137, // 131: scalibr.SecretData.re_captcha_key:type_name -> scalibr.SecretData.ReCaptchaKey - 138, // 132: scalibr.SecretData.pyx_key_v1:type_name -> scalibr.SecretData.PyxKeyV1 - 139, // 133: scalibr.SecretData.pyx_key_v2:type_name -> scalibr.SecretData.PyxKeyV2 - 140, // 134: scalibr.SecretData.code_catalyst_credentials:type_name -> scalibr.SecretData.CodeCatalystCredentials + 130, // 127: scalibr.SecretData.gcs_hmac_key:type_name -> scalibr.SecretData.GCSHmacKey + 131, // 128: scalibr.SecretData.mysql_mylogin_section:type_name -> scalibr.SecretData.MysqlMyloginSection + 132, // 129: scalibr.SecretData.vapid_key:type_name -> scalibr.SecretData.VapidKey + 137, // 130: scalibr.SecretData.aws_access_key_credentials:type_name -> scalibr.SecretData.AwsAccessKeyCredentials + 138, // 131: scalibr.SecretData.re_captcha_key:type_name -> scalibr.SecretData.ReCaptchaKey + 139, // 132: scalibr.SecretData.pyx_key_v1:type_name -> scalibr.SecretData.PyxKeyV1 + 140, // 133: scalibr.SecretData.pyx_key_v2:type_name -> scalibr.SecretData.PyxKeyV2 + 141, // 134: scalibr.SecretData.code_catalyst_credentials:type_name -> scalibr.SecretData.CodeCatalystCredentials 83, // 135: scalibr.SecretData.jwt_token:type_name -> scalibr.SecretData.JWTToken - 141, // 136: scalibr.SecretData.code_commit_credentials:type_name -> scalibr.SecretData.CodeCommitCredentials - 142, // 137: scalibr.SecretData.bitbucket_credentials:type_name -> scalibr.SecretData.BitBucketCredentials - 144, // 138: scalibr.SecretData.paystack_secret_key:type_name -> scalibr.SecretData.PaystackSecretKey - 147, // 139: scalibr.SecretData.telegram_bot_api_token:type_name -> scalibr.SecretData.TelegramBotToken - 153, // 140: scalibr.SecretData.cursor_api_key:type_name -> scalibr.SecretData.CursorAPIKey - 143, // 141: scalibr.SecretData.elastic_cloud_api_key:type_name -> scalibr.SecretData.ElasticCloudAPIKey - 156, // 142: scalibr.SecretData.url_credentials:type_name -> scalibr.SecretData.URLCredentials - 150, // 143: scalibr.SecretData.salesforce_oauth2_client_credentials:type_name -> scalibr.SecretData.SalesforceOAuth2ClientCredentials - 148, // 144: scalibr.SecretData.salesforce_oauth2_access_token:type_name -> scalibr.SecretData.SalesforceOAuth2AccessToken - 151, // 145: scalibr.SecretData.salesforce_oauth2_refresh_credentials:type_name -> scalibr.SecretData.SalesforceOAuth2RefreshCredentials + 142, // 136: scalibr.SecretData.code_commit_credentials:type_name -> scalibr.SecretData.CodeCommitCredentials + 143, // 137: scalibr.SecretData.bitbucket_credentials:type_name -> scalibr.SecretData.BitBucketCredentials + 145, // 138: scalibr.SecretData.paystack_secret_key:type_name -> scalibr.SecretData.PaystackSecretKey + 148, // 139: scalibr.SecretData.telegram_bot_api_token:type_name -> scalibr.SecretData.TelegramBotToken + 154, // 140: scalibr.SecretData.cursor_api_key:type_name -> scalibr.SecretData.CursorAPIKey + 144, // 141: scalibr.SecretData.elastic_cloud_api_key:type_name -> scalibr.SecretData.ElasticCloudAPIKey + 157, // 142: scalibr.SecretData.url_credentials:type_name -> scalibr.SecretData.URLCredentials + 151, // 143: scalibr.SecretData.salesforce_oauth2_client_credentials:type_name -> scalibr.SecretData.SalesforceOAuth2ClientCredentials + 149, // 144: scalibr.SecretData.salesforce_oauth2_access_token:type_name -> scalibr.SecretData.SalesforceOAuth2AccessToken + 152, // 145: scalibr.SecretData.salesforce_oauth2_refresh_credentials:type_name -> scalibr.SecretData.SalesforceOAuth2RefreshCredentials 87, // 146: scalibr.SecretData.mistral_api_key:type_name -> scalibr.SecretData.MistralAPIKey - 154, // 147: scalibr.SecretData.circleci_personal_access_token:type_name -> scalibr.SecretData.CircleCIPersonalAccessToken - 155, // 148: scalibr.SecretData.circleci_project_token:type_name -> scalibr.SecretData.CircleCIProjectToken - 157, // 149: scalibr.SecretData.square_personal_access_token:type_name -> scalibr.SecretData.SquarePersonalAccessToken - 158, // 150: scalibr.SecretData.square_oauth_application_secret:type_name -> scalibr.SecretData.SquareOAuthApplicationSecret - 152, // 151: scalibr.SecretData.salesforce_oauth2_jwt_credentials:type_name -> scalibr.SecretData.SalesforceOAuth2JWTCredentials - 149, // 152: scalibr.SecretData.sendgrid_api_key:type_name -> scalibr.SecretData.SendGridAPIKey - 99, // 153: scalibr.SecretData.deno_pat:type_name -> scalibr.SecretData.DenoPat - 145, // 154: scalibr.SecretData.heroku_secret_key:type_name -> scalibr.SecretData.HerokuSecretKey - 109, // 155: scalibr.SecretData.npmjs_access_token:type_name -> scalibr.SecretData.NpmJsAccessToken + 155, // 147: scalibr.SecretData.circleci_personal_access_token:type_name -> scalibr.SecretData.CircleCIPersonalAccessToken + 156, // 148: scalibr.SecretData.circleci_project_token:type_name -> scalibr.SecretData.CircleCIProjectToken + 158, // 149: scalibr.SecretData.square_personal_access_token:type_name -> scalibr.SecretData.SquarePersonalAccessToken + 159, // 150: scalibr.SecretData.square_oauth_application_secret:type_name -> scalibr.SecretData.SquareOAuthApplicationSecret + 153, // 151: scalibr.SecretData.salesforce_oauth2_jwt_credentials:type_name -> scalibr.SecretData.SalesforceOAuth2JWTCredentials + 150, // 152: scalibr.SecretData.sendgrid_api_key:type_name -> scalibr.SecretData.SendGridAPIKey + 100, // 153: scalibr.SecretData.deno_pat:type_name -> scalibr.SecretData.DenoPat + 146, // 154: scalibr.SecretData.heroku_secret_key:type_name -> scalibr.SecretData.HerokuSecretKey + 110, // 155: scalibr.SecretData.npmjs_access_token:type_name -> scalibr.SecretData.NpmJsAccessToken 98, // 156: scalibr.SecretData.cloudflare_api_token:type_name -> scalibr.SecretData.CloudflareAPIToken - 4, // 157: scalibr.SecretStatus.status:type_name -> scalibr.SecretStatus.SecretStatusEnum - 160, // 158: scalibr.SecretStatus.last_updated:type_name -> google.protobuf.Timestamp - 72, // 159: scalibr.Location.filepath:type_name -> scalibr.Filepath - 73, // 160: scalibr.Location.filepath_with_layer_details:type_name -> scalibr.FilepathWithLayerDetails - 74, // 161: scalibr.Location.environment_variable:type_name -> scalibr.EnvironmentVariable - 75, // 162: scalibr.Location.container_command:type_name -> scalibr.ContainerCommand - 12, // 163: scalibr.FilepathWithLayerDetails.layer_details:type_name -> scalibr.LayerDetails - 79, // 164: scalibr.ContainerImageMetadata.layer_metadata:type_name -> scalibr.LayerMetadata - 77, // 165: scalibr.ContainerImageMetadata.base_image_chains:type_name -> scalibr.BaseImageChain - 159, // 166: scalibr.ContainerImageMetadata.os_info:type_name -> scalibr.ContainerImageMetadata.OsInfoEntry - 78, // 167: scalibr.BaseImageChain.base_images:type_name -> scalibr.BaseImageDetails - 57, // 168: scalibr.PodmanMetadata.ExposedPortsEntry.value:type_name -> scalibr.Protocol - 146, // 169: scalibr.SecretData.HerokuSecretKey.heroku_secret_key_metadata:type_name -> scalibr.SecretData.HerokuSecretKeyMetadata - 162, // 170: scalibr.SecretData.HerokuSecretKeyMetadata.expire_time:type_name -> google.protobuf.Duration - 171, // [171:171] is the sub-list for method output_type - 171, // [171:171] is the sub-list for method input_type - 171, // [171:171] is the sub-list for extension type_name - 171, // [171:171] is the sub-list for extension extendee - 0, // [0:171] is the sub-list for field type_name + 99, // 157: scalibr.SecretData.mongodb_connection_url:type_name -> scalibr.SecretData.MongoDBConnectionURL + 4, // 158: scalibr.SecretStatus.status:type_name -> scalibr.SecretStatus.SecretStatusEnum + 161, // 159: scalibr.SecretStatus.last_updated:type_name -> google.protobuf.Timestamp + 72, // 160: scalibr.Location.filepath:type_name -> scalibr.Filepath + 73, // 161: scalibr.Location.filepath_with_layer_details:type_name -> scalibr.FilepathWithLayerDetails + 74, // 162: scalibr.Location.environment_variable:type_name -> scalibr.EnvironmentVariable + 75, // 163: scalibr.Location.container_command:type_name -> scalibr.ContainerCommand + 12, // 164: scalibr.FilepathWithLayerDetails.layer_details:type_name -> scalibr.LayerDetails + 79, // 165: scalibr.ContainerImageMetadata.layer_metadata:type_name -> scalibr.LayerMetadata + 77, // 166: scalibr.ContainerImageMetadata.base_image_chains:type_name -> scalibr.BaseImageChain + 160, // 167: scalibr.ContainerImageMetadata.os_info:type_name -> scalibr.ContainerImageMetadata.OsInfoEntry + 78, // 168: scalibr.BaseImageChain.base_images:type_name -> scalibr.BaseImageDetails + 57, // 169: scalibr.PodmanMetadata.ExposedPortsEntry.value:type_name -> scalibr.Protocol + 147, // 170: scalibr.SecretData.HerokuSecretKey.heroku_secret_key_metadata:type_name -> scalibr.SecretData.HerokuSecretKeyMetadata + 163, // 171: scalibr.SecretData.HerokuSecretKeyMetadata.expire_time:type_name -> google.protobuf.Duration + 172, // [172:172] is the sub-list for method output_type + 172, // [172:172] is the sub-list for method input_type + 172, // [172:172] is the sub-list for extension type_name + 172, // [172:172] is the sub-list for extension extendee + 0, // [0:172] is the sub-list for field type_name } func init() { file_proto_scan_result_proto_init() } @@ -13060,6 +13125,7 @@ func file_proto_scan_result_proto_init() { (*SecretData_HerokuSecretKey_)(nil), (*SecretData_NpmjsAccessToken)(nil), (*SecretData_CloudflareApiToken)(nil), + (*SecretData_MongodbConnectionUrl)(nil), } file_proto_scan_result_proto_msgTypes[66].OneofWrappers = []any{ (*Location_Filepath)(nil), @@ -13067,14 +13133,14 @@ func file_proto_scan_result_proto_init() { (*Location_EnvironmentVariable)(nil), (*Location_ContainerCommand)(nil), } - file_proto_scan_result_proto_msgTypes[140].OneofWrappers = []any{} + file_proto_scan_result_proto_msgTypes[141].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_scan_result_proto_rawDesc), len(file_proto_scan_result_proto_rawDesc)), NumEnums: 5, - NumMessages: 155, + NumMessages: 156, NumExtensions: 0, NumServices: 0, }, diff --git a/binary/proto/secret.go b/binary/proto/secret.go index ee098cb69..94bb3948a 100644 --- a/binary/proto/secret.go +++ b/binary/proto/secret.go @@ -54,6 +54,7 @@ import ( "github.com/google/osv-scalibr/veles/secrets/huggingfaceapikey" "github.com/google/osv-scalibr/veles/secrets/jwt" velesmistralapikey "github.com/google/osv-scalibr/veles/secrets/mistralapikey" + mongodbconnectionurl "github.com/google/osv-scalibr/veles/secrets/mongodburi" "github.com/google/osv-scalibr/veles/secrets/npmjsaccesstoken" velesonepasswordkeys "github.com/google/osv-scalibr/veles/secrets/onepasswordkeys" velesopenai "github.com/google/osv-scalibr/veles/secrets/openai" @@ -295,6 +296,8 @@ func velesSecretToProto(s veles.Secret) (*spb.SecretData, error) { return squarePersonalAccessTokenToProto(t), nil case velessquareapikey.SquareOAuthApplicationSecret: return squareOAuthApplicationSecretToProto(t), nil + case mongodbconnectionurl.MongoDBConnectionURL: + return mongoDBConnectionURIToProto(t), nil default: return nil, fmt.Errorf("%w: %T", ErrUnsupportedSecretType, s) } @@ -351,6 +354,16 @@ func squareOAuthApplicationSecretToProto(s velessquareapikey.SquareOAuthApplicat } } +func mongoDBConnectionURIToProto(s mongodbconnectionurl.MongoDBConnectionURL) *spb.SecretData { + return &spb.SecretData{ + Secret: &spb.SecretData_MongodbConnectionUrl{ + MongodbConnectionUrl: &spb.SecretData_MongoDBConnectionURL{ + Url: s.URL, + }, + }, + } +} + func elasticCloudAPIKeyToProto(s elasticcloudapikey.ElasticCloudAPIKey) *spb.SecretData { return &spb.SecretData{ Secret: &spb.SecretData_ElasticCloudApiKey{ @@ -1383,6 +1396,10 @@ func velesSecretToStruct(s *spb.SecretData) (veles.Secret, error) { return velessquareapikey.SquareOAuthApplicationSecret{ Key: s.GetSquareOauthApplicationSecret().GetKey(), }, nil + case *spb.SecretData_MongodbConnectionUrl: + return mongodbconnectionurl.MongoDBConnectionURL{ + URL: s.GetMongodbConnectionUrl().GetUrl(), + }, nil default: return nil, fmt.Errorf("%w: %T", ErrUnsupportedSecretType, s.GetSecret()) } diff --git a/go.mod b/go.mod index 8344ddd4d..0521a6138 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/containerd/containerd/api v1.9.0 github.com/deitch/magic v0.0.0-20240306090643-c67ab88f10cb github.com/diskfs/go-diskfs v1.7.0 - github.com/docker/docker v28.2.2+incompatible + github.com/docker/docker v28.5.1+incompatible github.com/dsoprea/go-exfat v0.0.0-20190906070738-5e932fbdb589 github.com/erikvarga/go-rpmdb v0.0.0-20250523120114-a15a62cd4593 github.com/go-git/go-git/v5 v5.16.2 @@ -51,22 +51,25 @@ require ( github.com/shirou/gopsutil v3.21.11+incompatible github.com/smacker/go-tree-sitter v0.0.0-20240827094217-dd81d9e9be82 github.com/spdx/tools-golang v0.5.5 + github.com/testcontainers/testcontainers-go v0.40.0 + github.com/testcontainers/testcontainers-go/modules/mongodb v0.40.0 github.com/thoas/go-funk v0.9.3 github.com/tidwall/gjson v1.18.0 github.com/tidwall/jsonc v0.3.2 github.com/tidwall/sjson v1.2.5 github.com/tink-crypto/tink-go/v2 v2.4.0 go.etcd.io/bbolt v1.4.1 + go.mongodb.org/mongo-driver/v2 v2.5.0 go.uber.org/multierr v1.11.0 - golang.org/x/crypto v0.41.0 - golang.org/x/mod v0.26.0 - golang.org/x/net v0.43.0 + golang.org/x/crypto v0.43.0 + golang.org/x/mod v0.28.0 + golang.org/x/net v0.45.0 golang.org/x/oauth2 v0.30.0 golang.org/x/sync v0.17.0 - golang.org/x/sys v0.35.0 - golang.org/x/term v0.34.0 - golang.org/x/text v0.28.0 - golang.org/x/tools v0.35.0 + golang.org/x/sys v0.37.0 + golang.org/x/term v0.36.0 + golang.org/x/text v0.30.0 + golang.org/x/tools v0.37.0 golang.org/x/vuln v1.1.4 google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 @@ -80,6 +83,7 @@ require ( require ( cloud.google.com/go/compute/metadata v0.8.0 // indirect + dario.cat/mergo v1.0.2 // indirect github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect @@ -90,6 +94,7 @@ require ( github.com/anchore/go-struct-converter v0.0.0-20230627203149-c72ef8859ca9 // indirect github.com/atotto/clipboard v0.1.4 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect github.com/charmbracelet/x/ansi v0.8.0 // indirect github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect @@ -104,17 +109,19 @@ require ( github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect github.com/containerd/ttrpc v1.2.7 // indirect github.com/containerd/typeurl/v2 v2.2.3 // indirect + github.com/cpuguy83/dockercfg v0.3.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/distribution/reference v0.6.0 // indirect github.com/djherbis/times v1.6.0 // indirect github.com/docker/cli v28.2.2+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/docker-credential-helpers v0.9.3 // indirect - github.com/docker/go-connections v0.5.0 // indirect + github.com/docker/go-connections v0.6.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.4 // indirect github.com/edsrzf/mmap-go v1.1.0 // indirect github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect @@ -132,19 +139,25 @@ require ( github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/klauspost/compress v1.18.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 // indirect + github.com/magiconair/properties v1.8.10 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mattn/go-shellwords v1.0.12 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/go-archive v0.1.0 // indirect github.com/moby/locker v1.0.1 // indirect + github.com/moby/patternmatcher v0.6.0 // indirect github.com/moby/sys/mountinfo v0.7.2 // indirect github.com/moby/sys/sequential v0.6.0 // indirect github.com/moby/sys/signal v0.7.1 // indirect github.com/moby/sys/user v0.4.0 // indirect github.com/moby/sys/userns v0.1.0 // indirect + github.com/moby/term v0.5.0 // indirect + github.com/morikuni/aec v1.0.0 // indirect github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/termenv v0.16.0 // indirect @@ -154,13 +167,17 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pkg/xattr v0.4.9 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/sahilm/fuzzy v0.1.1 // indirect github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 // indirect github.com/secDre4mer/pkcs7 v0.0.0-20240322103146-665324a4461d // indirect + github.com/shirou/gopsutil/v4 v4.25.6 // indirect github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af // indirect github.com/spdx/gordf v0.0.0-20221230105357-b735bd5aac89 // indirect + github.com/stretchr/testify v1.11.1 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect github.com/tklauser/go-sysconf v0.3.15 // indirect @@ -168,8 +185,12 @@ require ( github.com/tonistiigi/go-csvvalue v0.0.0-20240814133006-030d3b2625d0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/vbatts/tar-split v0.12.1 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.2.0 // indirect + github.com/xdg-go/stringprep v1.0.4 // indirect github.com/xhit/go-str2duration/v2 v2.1.0 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect @@ -181,7 +202,7 @@ require ( go.uber.org/zap v1.17.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect - golang.org/x/telemetry v0.0.0-20250710130107-8d8967aff50b // indirect + golang.org/x/telemetry v0.0.0-20250908211612-aef8a434d053 // indirect golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect diff --git a/go.sum b/go.sum index 30bd87867..0baad8318 100644 --- a/go.sum +++ b/go.sum @@ -3,6 +3,8 @@ bitbucket.org/creachadair/stringset v0.0.14/go.mod h1:Ej8fsr6rQvmeMDf6CCWMWGb14H cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go/compute/metadata v0.8.0 h1:HxMRIbao8w17ZX6wBnjhcDkW6lTFpgcaobyVfZWqRLA= cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw= +dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= +dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= deps.dev/api/v3 v3.0.0-20250903005441-604c45d5b44b h1:4f6EeZ4EexJUGBtmyMaxptWMoBw/pAVshOtvzTH6dj8= deps.dev/api/v3 v3.0.0-20250903005441-604c45d5b44b/go.mod h1:BWOjjNq4+j4makGArvrtyFhzBi5TXU7AGH2nDnRORk8= deps.dev/api/v3alpha v0.0.0-20250903005441-604c45d5b44b h1:iXre7CzhkmdmzAdiOi+u/Yk1iDMI9SYlFEnXgJd5Rnk= @@ -104,6 +106,10 @@ github.com/containerd/ttrpc v1.2.7 h1:qIrroQvuOL9HQ1X6KHe2ohc7p+HP/0VE6XPU7elJRq github.com/containerd/ttrpc v1.2.7/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o= github.com/containerd/typeurl/v2 v2.2.3 h1:yNA/94zxWdvYACdYO8zofhrTVuQY73fFU1y++dYSw40= github.com/containerd/typeurl/v2 v2.2.3/go.mod h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk= +github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= +github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -122,12 +128,12 @@ github.com/docker/cli v28.2.2+incompatible h1:qzx5BNUDFqlvyq4AHzdNB7gSyVTmU4cgsy github.com/docker/cli v28.2.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw= -github.com/docker/docker v28.2.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.5.1+incompatible h1:Bm8DchhSD2J6PsFzxC35TZo4TLGR2PdW/E69rU45NhM= +github.com/docker/docker v28.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8= github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo= -github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= -github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= +github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= +github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -140,6 +146,8 @@ github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd/go.mod h1:7I+3P github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.4 h1:CF7LEKg5FFOsASUj0+QwaXf8Ht6TlFxg09+S9wz0omw= +github.com/ebitengine/purego v0.8.4/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab h1:h1UgjJdAAhj+uPL68n7XASS6bU+07ZX1WJvVS2eyoeY= @@ -207,6 +215,7 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/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.3/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.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= @@ -245,8 +254,12 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 h1:EnfXoSqDfSNJv0VBNqY/88RNnhSGYkrHaO0mmFGbVsc= github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40/go.mod h1:vy1vK6wD6j7xX6O6hXe621WabdtNkou2h7uRtTfRMyg= +github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= +github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/masahiro331/go-ext4-filesystem v0.0.0-20240620024024-ca14e6327bbd h1:JEIW94K3spsvBI5Xb9PGhKSIza9/jxO1lF30tPCAJlA= github.com/masahiro331/go-ext4-filesystem v0.0.0-20240620024024-ca14e6327bbd/go.mod h1:3XMMY1M486mWGTD13WPItg6FsgflQR72ZMAkd+gsyoQ= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -268,8 +281,12 @@ github.com/moby/buildkit v0.23.2 h1:gt/dkfcpgTXKx+B9I310kV767hhVqTvEyxGgI3mqsGQ= github.com/moby/buildkit v0.23.2/go.mod h1:iEjAfPQKIuO+8y6OcInInvzqTMiKMbb2RdJz1K/95a0= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= +github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= @@ -282,8 +299,8 @@ github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= @@ -324,6 +341,8 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= @@ -351,6 +370,8 @@ github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v4 v4.25.6 h1:kLysI2JsKorfaFPcYmcJqbzROzsBWEOAtw6A7dIfqXs= +github.com/shirou/gopsutil/v4 v4.25.6/go.mod h1:PfybzyydfZcN+JMMjkF6Zb8Mq1A/VcogFFg7hj50W9c= github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af h1:Sp5TG9f7K39yfB+If0vjp97vuT74F72r8hfRpP8jLU0= github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smacker/go-tree-sitter v0.0.0-20240827094217-dd81d9e9be82 h1:6C8qej6f1bStuePVkLSFxoU22XBS165D3klxlzRg8F4= @@ -363,6 +384,7 @@ github.com/spdx/tools-golang v0.5.5/go.mod h1:MVIsXx8ZZzaRWNQpUDhC4Dud34edUYJYec 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/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.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -372,10 +394,14 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/terminalstatic/go-xsd-validate v0.1.6 h1:TenYeQ3eY631qNi1/cTmLH/s2slHPRKTTHT+XSHkepo= github.com/terminalstatic/go-xsd-validate v0.1.6/go.mod h1:18lsvYFofBflqCrvo1umpABZ99+GneNTw2kEEc8UPJw= +github.com/testcontainers/testcontainers-go v0.40.0 h1:pSdJYLOVgLE8YdUY2FHQ1Fxu+aMnb6JfVz1mxk7OeMU= +github.com/testcontainers/testcontainers-go v0.40.0/go.mod h1:FSXV5KQtX2HAMlm7U3APNyLkkap35zNLxukw9oBi/MY= +github.com/testcontainers/testcontainers-go/modules/mongodb v0.40.0 h1:z/1qHeliTLDKNaJ7uOHOx1FjwghbcbYfga4dTFkF0hU= +github.com/testcontainers/testcontainers-go/modules/mongodb v0.40.0/go.mod h1:GaunAWwMXLtsMKG3xn2HYIBDbKddGArfcGsF2Aog81E= github.com/thoas/go-funk v0.9.3 h1:7+nAEx3kn5ZJcnDm2Bh23N2yOtweO14bi//dvRtgLpw= github.com/thoas/go-funk v0.9.3/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= @@ -401,6 +427,12 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo= github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.2.0 h1:bYKF2AEwG5rqd1BumT4gAnvwU/M9nBp2pTSxeZw7Wvs= +github.com/xdg-go/scram v1.2.0/go.mod h1:3dlrS0iBaWKYVt2ZfA4cj48umJZ+cAEbR6/SjLA88I8= +github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= @@ -411,6 +443,8 @@ github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8 github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -418,6 +452,8 @@ github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.4.1 h1:5mOV+HWjIPLEAlUGMsveaUvK2+byZMFOzojoi7bh7uI= go.etcd.io/bbolt v1.4.1/go.mod h1:c8zu2BnXWTu2XM4XcICtbGSl9cFwsXtcf9zLt2OncM8= +go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE= +go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= @@ -453,8 +489,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk 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-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= -golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= +golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= @@ -464,8 +500,8 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl 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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= +golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= 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-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -479,8 +515,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.45.0 h1:RLBg5JKixCy82FtLJpeNlVM0nrSqpCRYzVU1n8kj0tM= +golang.org/x/net v0.45.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= @@ -499,6 +535,7 @@ golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/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-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -509,20 +546,21 @@ golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/telemetry v0.0.0-20250710130107-8d8967aff50b h1:DU+gwOBXU+6bO0sEyO7o/NeMlxZxCZEvI7v+J4a1zRQ= -golang.org/x/telemetry v0.0.0-20250710130107-8d8967aff50b/go.mod h1:4ZwOYna0/zsOKwuR5X/m0QFOJpSZvAxFfkQT+Erd9D4= +golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= +golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/telemetry v0.0.0-20250908211612-aef8a434d053 h1:dHQOQddU4YHS5gY33/6klKjq7Gp3WwMyOXGNp5nzRj8= +golang.org/x/telemetry v0.0.0-20250908211612-aef8a434d053/go.mod h1:+nZKN+XVh4LCiA9DV3ywrzN4gumyCnKjau3NGb9SGoE= 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.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= -golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= +golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= +golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 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.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= +golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -534,8 +572,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= +golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= golang.org/x/tools/go/expect v0.1.0-deprecated h1:jY2C5HGYR5lqex3gEniOQL0r7Dq5+VGVgY1nudX5lXY= golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= @@ -594,8 +632,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C 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= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= +gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= 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= modernc.org/cc/v4 v4.26.1 h1:+X5NtzVBn0KgsBCBe+xkDC7twLb/jNVj9FPgiwSQO3s= diff --git a/veles/secrets/mongodburi/detector.go b/veles/secrets/mongodburi/detector.go new file mode 100644 index 000000000..4bc84312d --- /dev/null +++ b/veles/secrets/mongodburi/detector.go @@ -0,0 +1,57 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package mongodbconnectionurl contains a Veles Secret type and a Detector for +// MongoDB connection URLs with embedded credentials. +package mongodbconnectionurl + +import ( + "regexp" + + "github.com/google/osv-scalibr/veles" + "github.com/google/osv-scalibr/veles/secrets/common/simpletoken" +) + +// maxURLLength is the maximum size of a MongoDB connection URL we expect to find. +// MongoDB URIs can be long due to options, replica set hosts, etc. +const maxURLLength = 4096 + +// mongoURIRe matches MongoDB connection URLs that contain credentials (user:password@host). +// It supports both mongodb:// and mongodb+srv:// schemes. +// The regex requires a username and password separated by a colon before the @ sign. +// +// Per the MongoDB connection string spec, the following characters in the +// username or password must be percent-encoded: $ : / ? # [ ] @ +// For example, '@' becomes '%40', ':' becomes '%3A', etc. +// The regex handles percent-encoded characters naturally since '%' and hex +// digits are allowed by the character classes. +// +// Matched examples: +// +// mongodb://myUser:myPass@localhost +// mongodb://myUser:D1fficultP%40ssw0rd@mongodb0.example.com:27017/?authSource=admin +// mongodb+srv://myUser:myPass@cluster0.example.net/myDB?retryWrites=true +var mongoURIRe = regexp.MustCompile(`mongodb(?:\+srv)?://[^\s:@/]+:[^\s@/]+@[^\s]+`) + +// NewDetector returns a new simpletoken.Detector that matches +// MongoDB connection URLs with embedded credentials. +func NewDetector() veles.Detector { + return simpletoken.Detector{ + MaxLen: maxURLLength, + Re: mongoURIRe, + FromMatch: func(b []byte) (veles.Secret, bool) { + return MongoDBConnectionURL{URL: string(b)}, true + }, + } +} diff --git a/veles/secrets/mongodburi/detector_test.go b/veles/secrets/mongodburi/detector_test.go new file mode 100644 index 000000000..4973a8a7b --- /dev/null +++ b/veles/secrets/mongodburi/detector_test.go @@ -0,0 +1,175 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package mongodbconnectionurl_test + +import ( + "fmt" + "strings" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + "github.com/google/osv-scalibr/veles" + mongodburi "github.com/google/osv-scalibr/veles/secrets/mongodburi" + "github.com/google/osv-scalibr/veles/velestest" +) + +const testURL = `mongodb://myDatabaseUser:D1fficultP%40ssw0rd@localhost` + +func TestDetectorAcceptance(t *testing.T) { + velestest.AcceptDetector( + t, + mongodburi.NewDetector(), + testURL, + mongodburi.MongoDBConnectionURL{URL: testURL}, + velestest.WithPad(' '), + ) +} + +// TestDetector_truePositives tests for cases where we know the Detector +// will find a MongoDB connection URL/s. +func TestDetector_truePositives(t *testing.T) { + engine, err := veles.NewDetectionEngine([]veles.Detector{mongodburi.NewDetector()}) + if err != nil { + t.Fatal(err) + } + + testURLWithPort := "mongodb://myDatabaseUser:D1fficultP%40ssw0rd@mongodb0.example.com:27017/?authSource=admin" + testURLSRV := "mongodb+srv://myUser:myPass@cluster0.example.net/myDB?retryWrites=true" + + cases := []struct { + name string + input string + want []veles.Secret + }{{ + name: "simple matching URL", + input: testURL, + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: testURL}, + }, + }, { + name: "URL with port and options", + input: testURLWithPort, + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: testURLWithPort}, + }, + }, { + name: "mongodb+srv scheme", + input: testURLSRV, + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: testURLSRV}, + }, + }, { + name: "match at end of string", + input: `MONGO_URI=` + testURL, + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: testURL}, + }, + }, { + name: "match in middle of string", + input: `MONGO_URI="` + testURL + `"`, + want: []veles.Secret{ + // The trailing quote is consumed by [^\s]+ but that's fine; + // the URL is still detected. + mongodburi.MongoDBConnectionURL{URL: testURL + `"`}, + }, + }, { + name: "multiple matches on separate lines", + input: testURL + "\n" + testURLWithPort, + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: testURL}, + mongodburi.MongoDBConnectionURL{URL: testURLWithPort}, + }, + }, { + name: "larger input containing URL", + input: fmt.Sprintf(` +# Database config +MONGO_URI=%s +DB_NAME=mydb + `, testURL), + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: testURL}, + }, + }, { + name: "URL with numeric password", + input: "mongodb://admin:123456@db.example.com:27017", + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: "mongodb://admin:123456@db.example.com:27017"}, + }, + }, { + name: "URL with special chars in password (percent-encoded)", + input: "mongodb://user:p%40ss%3Aw0rd@host.example.com:27017/testdb", + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: "mongodb://user:p%40ss%3Aw0rd@host.example.com:27017/testdb"}, + }, + }} + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + got, err := engine.Detect(t.Context(), strings.NewReader(tc.input)) + if err != nil { + t.Errorf("Detect() error: %v, want nil", err) + } + if diff := cmp.Diff(tc.want, got, cmpopts.EquateEmpty()); diff != "" { + t.Errorf("Detect() diff (-want +got):\n%s", diff) + } + }) + } +} + +// TestDetector_trueNegatives tests for cases where we know the Detector +// will not find a MongoDB connection URL. +func TestDetector_trueNegatives(t *testing.T) { + engine, err := veles.NewDetectionEngine([]veles.Detector{mongodburi.NewDetector()}) + if err != nil { + t.Fatal(err) + } + cases := []struct { + name string + input string + want []veles.Secret + }{{ + name: "empty input", + input: "", + }, { + name: "mongodb URL without credentials", + input: "mongodb://localhost:27017/mydb", + }, { + name: "mongodb URL with only username (no password)", + input: "mongodb://user@localhost:27017", + }, { + name: "random text", + input: "this is just some random text without any mongodb urls", + }, { + name: "http URL should not match", + input: "http://user:pass@example.com", + }, { + name: "incomplete scheme", + input: "mongo://user:pass@localhost", + }, { + name: "missing host after @", + input: "mongodb://user:pass@", + }} + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + got, err := engine.Detect(t.Context(), strings.NewReader(tc.input)) + if err != nil { + t.Errorf("Detect() error: %v, want nil", err) + } + if diff := cmp.Diff(tc.want, got, cmpopts.EquateEmpty()); diff != "" { + t.Errorf("Detect() diff (-want +got):\n%s", diff) + } + }) + } +} diff --git a/veles/secrets/mongodburi/mongodburi.go b/veles/secrets/mongodburi/mongodburi.go new file mode 100644 index 000000000..311fb4b9d --- /dev/null +++ b/veles/secrets/mongodburi/mongodburi.go @@ -0,0 +1,30 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package mongodbconnectionurl + +// MongoDBConnectionURL is a Veles Secret that holds a MongoDB connection URL +// containing credentials (user:password). +// +// Per the MongoDB connection string spec, the following characters in the +// username or password must be percent-encoded: $ : / ? # [ ] @ +// +// Examples: +// +// mongodb://myUser:myPass@localhost +// mongodb://myUser:D1fficultP%40ssw0rd@mongodb0.example.com:27017/?authSource=admin +// mongodb+srv://myUser:myPass@cluster0.example.net/myDB?retryWrites=true +type MongoDBConnectionURL struct { + URL string +} diff --git a/veles/secrets/mongodburi/validator.go b/veles/secrets/mongodburi/validator.go new file mode 100644 index 000000000..9709baea8 --- /dev/null +++ b/veles/secrets/mongodburi/validator.go @@ -0,0 +1,94 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package mongodbconnectionurl + +import ( + "context" + "fmt" + "strings" + "time" + + "github.com/google/osv-scalibr/veles" + "go.mongodb.org/mongo-driver/v2/mongo" + "go.mongodb.org/mongo-driver/v2/mongo/options" +) + +// Validator validates MongoDB connection URLs by attempting to connect +// and ping the MongoDB server. +type Validator struct { + // ConnectTimeout is the maximum time to wait for a connection. + // Defaults to 5 seconds if zero. + ConnectTimeout time.Duration +} + +// NewValidator creates a new Validator for MongoDB connection URLs. +func NewValidator() *Validator { + return &Validator{ + ConnectTimeout: 5 * time.Second, + } +} + +// Validate attempts to connect to the MongoDB server using the provided +// connection URL and sends a ping command. If the ping succeeds, the +// credentials are considered valid. Authentication failures indicate +// invalid credentials. Other errors result in ValidationFailed. +func (v *Validator) Validate(ctx context.Context, secret MongoDBConnectionURL) (veles.ValidationStatus, error) { + timeout := v.ConnectTimeout + if timeout == 0 { + timeout = 5 * time.Second + } + + ctx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() + + clientOpts := options.Client(). + ApplyURI(secret.URL). + SetConnectTimeout(timeout). + SetServerSelectionTimeout(timeout) + + client, err := mongo.Connect(clientOpts) + if err != nil { + // URI parse errors or config errors mean the URL is malformed/invalid. + return veles.ValidationInvalid, fmt.Errorf("mongo.Connect: %w", err) + } + defer func() { + _ = client.Disconnect(context.Background()) + }() + + err = client.Ping(ctx, nil) + if err != nil { + if isAuthError(err) { + return veles.ValidationInvalid, nil + } + return veles.ValidationFailed, fmt.Errorf("ping: %w", err) + } + + return veles.ValidationValid, nil +} + +// isAuthError checks whether the error indicates an authentication failure. +func isAuthError(err error) bool { + if err == nil { + return false + } + errMsg := err.Error() + // MongoDB authentication error codes: 18 (AuthenticationFailed) + // The driver may return errors containing these strings. + return strings.Contains(errMsg, "authentication failed") || + strings.Contains(errMsg, "Authentication failed") || + strings.Contains(errMsg, "auth error") || + strings.Contains(errMsg, "(Unauthorized)") || + strings.Contains(errMsg, "not authorized") +} diff --git a/veles/secrets/mongodburi/validator_test.go b/veles/secrets/mongodburi/validator_test.go new file mode 100644 index 000000000..bc5f26c2b --- /dev/null +++ b/veles/secrets/mongodburi/validator_test.go @@ -0,0 +1,185 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package mongodbconnectionurl_test + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/google/osv-scalibr/veles" + mongodburi "github.com/google/osv-scalibr/veles/secrets/mongodburi" + "github.com/testcontainers/testcontainers-go" + "github.com/testcontainers/testcontainers-go/modules/mongodb" + "github.com/testcontainers/testcontainers-go/wait" +) + +const ( + testMongoUser = "testuser" + testMongoPass = "testpassword" +) + +// startMongoContainer starts a MongoDB container with authentication enabled. +// It returns the container and the connection string (without credentials). +func startMongoContainer(t *testing.T) (*mongodb.MongoDBContainer, string, string) { + t.Helper() + + ctx := t.Context() + + mongoC, err := mongodb.Run(ctx, + "mongo:7", + mongodb.WithUsername(testMongoUser), + mongodb.WithPassword(testMongoPass), + testcontainers.WithWaitStrategy( + wait.ForLog("Waiting for connections").WithStartupTimeout(60*time.Second), + ), + ) + if err != nil { + t.Fatalf("failed to start MongoDB container: %v", err) + } + + t.Cleanup(func() { + if err := mongoC.Terminate(ctx); err != nil { + t.Logf("failed to terminate MongoDB container: %v", err) + } + }) + + host, err := mongoC.Host(ctx) + if err != nil { + t.Fatalf("failed to get container host: %v", err) + } + + port, err := mongoC.MappedPort(ctx, "27017") + if err != nil { + t.Fatalf("failed to get mapped port: %v", err) + } + + connStr, err := mongoC.ConnectionString(ctx) + if err != nil { + t.Fatalf("failed to get connection string: %v", err) + } + + return mongoC, fmt.Sprintf("%s:%s", host, port.Port()), connStr +} + +func TestValidator_ValidCredentials(t *testing.T) { + _, hostPort, _ := startMongoContainer(t) + + validator := mongodburi.NewValidator() + validator.ConnectTimeout = 10 * time.Second + + url := fmt.Sprintf("mongodb://%s:%s@%s/?authSource=admin", testMongoUser, testMongoPass, hostPort) + secret := mongodburi.MongoDBConnectionURL{URL: url} + + got, err := validator.Validate(t.Context(), secret) + if err != nil { + t.Fatalf("Validate() unexpected error: %v", err) + } + if got != veles.ValidationValid { + t.Errorf("Validate() = %v, want %v", got, veles.ValidationValid) + } +} + +func TestValidator_InvalidCredentials(t *testing.T) { + _, hostPort, _ := startMongoContainer(t) + + validator := mongodburi.NewValidator() + validator.ConnectTimeout = 10 * time.Second + + url := fmt.Sprintf("mongodb://wronguser:wrongpass@%s/?authSource=admin", hostPort) + secret := mongodburi.MongoDBConnectionURL{URL: url} + + got, err := validator.Validate(t.Context(), secret) + // Auth failure should return ValidationInvalid with no error. + if err != nil { + t.Fatalf("Validate() unexpected error: %v", err) + } + if got != veles.ValidationInvalid { + t.Errorf("Validate() = %v, want %v", got, veles.ValidationInvalid) + } +} + +func TestValidator_UnreachableServer(t *testing.T) { + validator := mongodburi.NewValidator() + validator.ConnectTimeout = 2 * time.Second + + // Use a non-routable address to simulate an unreachable server. + secret := mongodburi.MongoDBConnectionURL{URL: "mongodb://user:pass@192.0.2.1:27017"} + + got, err := validator.Validate(t.Context(), secret) + if err == nil { + t.Error("Validate() expected error for unreachable server, got nil") + } + if got != veles.ValidationFailed { + t.Errorf("Validate() = %v, want %v", got, veles.ValidationFailed) + } +} + +func TestValidator_InvalidURI(t *testing.T) { + validator := mongodburi.NewValidator() + validator.ConnectTimeout = 2 * time.Second + + secret := mongodburi.MongoDBConnectionURL{URL: "not-a-valid-uri"} + + got, err := validator.Validate(t.Context(), secret) + if err == nil { + t.Error("Validate() expected error for invalid URI, got nil") + } + if got != veles.ValidationInvalid { + t.Errorf("Validate() = %v, want %v", got, veles.ValidationInvalid) + } +} + +func TestValidator_ContextCancellation(t *testing.T) { + _, hostPort, _ := startMongoContainer(t) + + validator := mongodburi.NewValidator() + validator.ConnectTimeout = 10 * time.Second + + url := fmt.Sprintf("mongodb://%s:%s@%s/?authSource=admin", testMongoUser, testMongoPass, hostPort) + secret := mongodburi.MongoDBConnectionURL{URL: url} + + ctx, cancel := context.WithCancel(t.Context()) + cancel() // Cancel immediately + + got, err := validator.Validate(ctx, secret) + if err == nil { + t.Error("Validate() expected error due to context cancellation, got nil") + } + if got != veles.ValidationFailed { + t.Errorf("Validate() = %v, want %v", got, veles.ValidationFailed) + } +} + +func TestValidator_ConnectionStringFromContainer(t *testing.T) { + _, _, connStr := startMongoContainer(t) + + validator := mongodburi.NewValidator() + validator.ConnectTimeout = 10 * time.Second + + // The connection string from testcontainers doesn't include credentials, + // so we need to construct one with credentials. + secret := mongodburi.MongoDBConnectionURL{URL: connStr} + + got, err := validator.Validate(t.Context(), secret) + if err != nil { + t.Fatalf("Validate() unexpected error: %v", err) + } + // The container's connection string includes credentials, so it should be valid. + if got != veles.ValidationValid { + t.Errorf("Validate() = %v, want %v", got, veles.ValidationValid) + } +} From 166f020e273ae0ec8afafff8398e91c1efad2e77 Mon Sep 17 00:00:00 2001 From: VickyTheViking Date: Sat, 21 Feb 2026 05:18:14 +0400 Subject: [PATCH 2/3] update lists, and docs --- binary/proto/secret.go | 2 +- docs/supported_inventory_types.md | 1 + enricher/enricherlist/list.go | 2 ++ extractor/filesystem/list/list.go | 2 ++ .../secrets/{mongodburi => mongodburl}/detector.go | 0 .../{mongodburi => mongodburl}/detector_test.go | 2 +- .../{mongodburi => mongodburl}/mongodburi.go | 0 .../{mongodburi => mongodburl}/validator.go | 6 +++--- .../{mongodburi => mongodburl}/validator_test.go | 14 +++++++------- 9 files changed, 17 insertions(+), 12 deletions(-) rename veles/secrets/{mongodburi => mongodburl}/detector.go (100%) rename veles/secrets/{mongodburi => mongodburl}/detector_test.go (99%) rename veles/secrets/{mongodburi => mongodburl}/mongodburi.go (100%) rename veles/secrets/{mongodburi => mongodburl}/validator.go (97%) rename veles/secrets/{mongodburi => mongodburl}/validator_test.go (94%) diff --git a/binary/proto/secret.go b/binary/proto/secret.go index 94bb3948a..7d25529f6 100644 --- a/binary/proto/secret.go +++ b/binary/proto/secret.go @@ -54,7 +54,7 @@ import ( "github.com/google/osv-scalibr/veles/secrets/huggingfaceapikey" "github.com/google/osv-scalibr/veles/secrets/jwt" velesmistralapikey "github.com/google/osv-scalibr/veles/secrets/mistralapikey" - mongodbconnectionurl "github.com/google/osv-scalibr/veles/secrets/mongodburi" + mongodbconnectionurl "github.com/google/osv-scalibr/veles/secrets/mongodburl" "github.com/google/osv-scalibr/veles/secrets/npmjsaccesstoken" velesonepasswordkeys "github.com/google/osv-scalibr/veles/secrets/onepasswordkeys" velesopenai "github.com/google/osv-scalibr/veles/secrets/openai" diff --git a/docs/supported_inventory_types.md b/docs/supported_inventory_types.md index 3d4c66052..f48e74307 100644 --- a/docs/supported_inventory_types.md +++ b/docs/supported_inventory_types.md @@ -179,6 +179,7 @@ See the docs on [how to add a new Extractor](/docs/new_extractor.md). | Vapid keys | `secrets/vapidkey` | | reCAPTCHA secret keys | `secrets/recaptchakey` | | Generic JWT tokens | `secrets/jwttoken` | +| MongoDB Connection URL | `secrets/mongodbconnectionurl` | | pyx user key v1 | `secrets/pyxkeyv1` | | pyx user key v2 | `secrets/pyxkeyv2` | | Telegram Bot API Token | `secrets/telegrambottoken` | diff --git a/enricher/enricherlist/list.go b/enricher/enricherlist/list.go index acab8ad28..b6bd521ca 100644 --- a/enricher/enricherlist/list.go +++ b/enricher/enricherlist/list.go @@ -62,6 +62,7 @@ import ( "github.com/google/osv-scalibr/veles/secrets/herokuplatformkey" "github.com/google/osv-scalibr/veles/secrets/huggingfaceapikey" "github.com/google/osv-scalibr/veles/secrets/mistralapikey" + mongodbconnectionurl "github.com/google/osv-scalibr/veles/secrets/mongodburl" "github.com/google/osv-scalibr/veles/secrets/npmjsaccesstoken" "github.com/google/osv-scalibr/veles/secrets/openai" "github.com/google/osv-scalibr/veles/secrets/openrouter" @@ -127,6 +128,7 @@ var ( fromVeles(slacktoken.NewAppConfigAccessTokenValidator(), "secrets/slackconfigaccesstokenvalidate", 0), fromVeles(dockerhubpat.NewValidator(), "secrets/dockerhubpatvalidate", 0), fromVeles(cloudflareapitoken.NewValidator(), "secrets/cloudflareapitokenvalidate", 0), + fromVeles(mongodbconnectionurl.NewValidator(), "secrets/mongodbconnectionurlvalidate", 0), fromVeles(denopat.NewUserTokenValidator(), "secrets/denopatuservalidate", 0), fromVeles(denopat.NewOrgTokenValidator(), "secrets/denopatorgvalidate", 0), fromVeles(gcpsak.NewValidator(), "secrets/gcpsakvalidate", 0), diff --git a/extractor/filesystem/list/list.go b/extractor/filesystem/list/list.go index e77adaedf..a0624e182 100644 --- a/extractor/filesystem/list/list.go +++ b/extractor/filesystem/list/list.go @@ -141,6 +141,7 @@ import ( "github.com/google/osv-scalibr/veles/secrets/huggingfaceapikey" "github.com/google/osv-scalibr/veles/secrets/jwt" "github.com/google/osv-scalibr/veles/secrets/mistralapikey" + mongodbconnectionurl "github.com/google/osv-scalibr/veles/secrets/mongodburl" "github.com/google/osv-scalibr/veles/secrets/npmjsaccesstoken" "github.com/google/osv-scalibr/veles/secrets/onepasswordkeys" "github.com/google/osv-scalibr/veles/secrets/openai" @@ -410,6 +411,7 @@ var ( {herokuplatformkey.NewSecretKeyDetector(), "secrets/herokuplatformkey", 0}, {salesforceoauth2jwt.NewDetector(), "secrets/salesforceoauth2jwt", 0}, {salesforceoauth2refresh.NewDetector(), "secrets/salesforceoauth2refresh", 0}, + {mongodbconnectionurl.NewDetector(), "secrets/mongodbconnectionurl", 0}, }) // Secrets contains both secret extractors and detectors. diff --git a/veles/secrets/mongodburi/detector.go b/veles/secrets/mongodburl/detector.go similarity index 100% rename from veles/secrets/mongodburi/detector.go rename to veles/secrets/mongodburl/detector.go diff --git a/veles/secrets/mongodburi/detector_test.go b/veles/secrets/mongodburl/detector_test.go similarity index 99% rename from veles/secrets/mongodburi/detector_test.go rename to veles/secrets/mongodburl/detector_test.go index 4973a8a7b..e3a39e8fd 100644 --- a/veles/secrets/mongodburi/detector_test.go +++ b/veles/secrets/mongodburl/detector_test.go @@ -22,7 +22,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/osv-scalibr/veles" - mongodburi "github.com/google/osv-scalibr/veles/secrets/mongodburi" + mongodburi "github.com/google/osv-scalibr/veles/secrets/mongodburl" "github.com/google/osv-scalibr/veles/velestest" ) diff --git a/veles/secrets/mongodburi/mongodburi.go b/veles/secrets/mongodburl/mongodburi.go similarity index 100% rename from veles/secrets/mongodburi/mongodburi.go rename to veles/secrets/mongodburl/mongodburi.go diff --git a/veles/secrets/mongodburi/validator.go b/veles/secrets/mongodburl/validator.go similarity index 97% rename from veles/secrets/mongodburi/validator.go rename to veles/secrets/mongodburl/validator.go index 9709baea8..81fe9b94a 100644 --- a/veles/secrets/mongodburi/validator.go +++ b/veles/secrets/mongodburl/validator.go @@ -63,9 +63,9 @@ func (v *Validator) Validate(ctx context.Context, secret MongoDBConnectionURL) ( // URI parse errors or config errors mean the URL is malformed/invalid. return veles.ValidationInvalid, fmt.Errorf("mongo.Connect: %w", err) } - defer func() { - _ = client.Disconnect(context.Background()) - }() + defer func(ctx context.Context) { + _ = client.Disconnect(ctx) + }(ctx) err = client.Ping(ctx, nil) if err != nil { diff --git a/veles/secrets/mongodburi/validator_test.go b/veles/secrets/mongodburl/validator_test.go similarity index 94% rename from veles/secrets/mongodburi/validator_test.go rename to veles/secrets/mongodburl/validator_test.go index bc5f26c2b..ef48d3419 100644 --- a/veles/secrets/mongodburi/validator_test.go +++ b/veles/secrets/mongodburl/validator_test.go @@ -21,7 +21,7 @@ import ( "time" "github.com/google/osv-scalibr/veles" - mongodburi "github.com/google/osv-scalibr/veles/secrets/mongodburi" + mongodburi "github.com/google/osv-scalibr/veles/secrets/mongodburl" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/modules/mongodb" "github.com/testcontainers/testcontainers-go/wait" @@ -34,7 +34,7 @@ const ( // startMongoContainer starts a MongoDB container with authentication enabled. // It returns the container and the connection string (without credentials). -func startMongoContainer(t *testing.T) (*mongodb.MongoDBContainer, string, string) { +func startMongoContainer(t *testing.T) (string, string) { t.Helper() ctx := t.Context() @@ -72,11 +72,11 @@ func startMongoContainer(t *testing.T) (*mongodb.MongoDBContainer, string, strin t.Fatalf("failed to get connection string: %v", err) } - return mongoC, fmt.Sprintf("%s:%s", host, port.Port()), connStr + return fmt.Sprintf("%s:%s", host, port.Port()), connStr } func TestValidator_ValidCredentials(t *testing.T) { - _, hostPort, _ := startMongoContainer(t) + hostPort, _ := startMongoContainer(t) validator := mongodburi.NewValidator() validator.ConnectTimeout = 10 * time.Second @@ -94,7 +94,7 @@ func TestValidator_ValidCredentials(t *testing.T) { } func TestValidator_InvalidCredentials(t *testing.T) { - _, hostPort, _ := startMongoContainer(t) + hostPort, _ := startMongoContainer(t) validator := mongodburi.NewValidator() validator.ConnectTimeout = 10 * time.Second @@ -144,7 +144,7 @@ func TestValidator_InvalidURI(t *testing.T) { } func TestValidator_ContextCancellation(t *testing.T) { - _, hostPort, _ := startMongoContainer(t) + hostPort, _ := startMongoContainer(t) validator := mongodburi.NewValidator() validator.ConnectTimeout = 10 * time.Second @@ -165,7 +165,7 @@ func TestValidator_ContextCancellation(t *testing.T) { } func TestValidator_ConnectionStringFromContainer(t *testing.T) { - _, _, connStr := startMongoContainer(t) + _, connStr := startMongoContainer(t) validator := mongodburi.NewValidator() validator.ConnectTimeout = 10 * time.Second From b2120bfdb56e96daf4eb619cbe0389e45c38b80a Mon Sep 17 00:00:00 2001 From: VickyTheViking Date: Sun, 22 Mar 2026 12:51:11 +0400 Subject: [PATCH 3/3] move mongodburl detector to urlcreds --- extractor/filesystem/list/list.go | 2 - veles/secrets/mongodburl/detector.go | 57 ------ veles/secrets/mongodburl/detector_test.go | 175 ------------------ veles/secrets/mongodburl/mongodburi.go | 2 + veles/secrets/urlcreds/detector.go | 28 +-- veles/secrets/urlcreds/detector_test.go | 36 ++-- veles/secrets/urlcreds/urlcreds.go | 14 -- veles/secrets/urlcreds/validator.go | 14 -- veles/secrets/urlcreds/validator_test.go | 14 -- veles/secrets/urlcreds/validators/ftp.go | 14 -- veles/secrets/urlcreds/validators/http.go | 14 -- veles/secrets/urlcreds/validators/sftp.go | 14 -- .../secrets/urlcreds/validators/validators.go | 14 -- 13 files changed, 38 insertions(+), 360 deletions(-) delete mode 100644 veles/secrets/mongodburl/detector.go delete mode 100644 veles/secrets/mongodburl/detector_test.go diff --git a/extractor/filesystem/list/list.go b/extractor/filesystem/list/list.go index a0624e182..e77adaedf 100644 --- a/extractor/filesystem/list/list.go +++ b/extractor/filesystem/list/list.go @@ -141,7 +141,6 @@ import ( "github.com/google/osv-scalibr/veles/secrets/huggingfaceapikey" "github.com/google/osv-scalibr/veles/secrets/jwt" "github.com/google/osv-scalibr/veles/secrets/mistralapikey" - mongodbconnectionurl "github.com/google/osv-scalibr/veles/secrets/mongodburl" "github.com/google/osv-scalibr/veles/secrets/npmjsaccesstoken" "github.com/google/osv-scalibr/veles/secrets/onepasswordkeys" "github.com/google/osv-scalibr/veles/secrets/openai" @@ -411,7 +410,6 @@ var ( {herokuplatformkey.NewSecretKeyDetector(), "secrets/herokuplatformkey", 0}, {salesforceoauth2jwt.NewDetector(), "secrets/salesforceoauth2jwt", 0}, {salesforceoauth2refresh.NewDetector(), "secrets/salesforceoauth2refresh", 0}, - {mongodbconnectionurl.NewDetector(), "secrets/mongodbconnectionurl", 0}, }) // Secrets contains both secret extractors and detectors. diff --git a/veles/secrets/mongodburl/detector.go b/veles/secrets/mongodburl/detector.go deleted file mode 100644 index 4bc84312d..000000000 --- a/veles/secrets/mongodburl/detector.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package mongodbconnectionurl contains a Veles Secret type and a Detector for -// MongoDB connection URLs with embedded credentials. -package mongodbconnectionurl - -import ( - "regexp" - - "github.com/google/osv-scalibr/veles" - "github.com/google/osv-scalibr/veles/secrets/common/simpletoken" -) - -// maxURLLength is the maximum size of a MongoDB connection URL we expect to find. -// MongoDB URIs can be long due to options, replica set hosts, etc. -const maxURLLength = 4096 - -// mongoURIRe matches MongoDB connection URLs that contain credentials (user:password@host). -// It supports both mongodb:// and mongodb+srv:// schemes. -// The regex requires a username and password separated by a colon before the @ sign. -// -// Per the MongoDB connection string spec, the following characters in the -// username or password must be percent-encoded: $ : / ? # [ ] @ -// For example, '@' becomes '%40', ':' becomes '%3A', etc. -// The regex handles percent-encoded characters naturally since '%' and hex -// digits are allowed by the character classes. -// -// Matched examples: -// -// mongodb://myUser:myPass@localhost -// mongodb://myUser:D1fficultP%40ssw0rd@mongodb0.example.com:27017/?authSource=admin -// mongodb+srv://myUser:myPass@cluster0.example.net/myDB?retryWrites=true -var mongoURIRe = regexp.MustCompile(`mongodb(?:\+srv)?://[^\s:@/]+:[^\s@/]+@[^\s]+`) - -// NewDetector returns a new simpletoken.Detector that matches -// MongoDB connection URLs with embedded credentials. -func NewDetector() veles.Detector { - return simpletoken.Detector{ - MaxLen: maxURLLength, - Re: mongoURIRe, - FromMatch: func(b []byte) (veles.Secret, bool) { - return MongoDBConnectionURL{URL: string(b)}, true - }, - } -} diff --git a/veles/secrets/mongodburl/detector_test.go b/veles/secrets/mongodburl/detector_test.go deleted file mode 100644 index e3a39e8fd..000000000 --- a/veles/secrets/mongodburl/detector_test.go +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package mongodbconnectionurl_test - -import ( - "fmt" - "strings" - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/google/go-cmp/cmp/cmpopts" - "github.com/google/osv-scalibr/veles" - mongodburi "github.com/google/osv-scalibr/veles/secrets/mongodburl" - "github.com/google/osv-scalibr/veles/velestest" -) - -const testURL = `mongodb://myDatabaseUser:D1fficultP%40ssw0rd@localhost` - -func TestDetectorAcceptance(t *testing.T) { - velestest.AcceptDetector( - t, - mongodburi.NewDetector(), - testURL, - mongodburi.MongoDBConnectionURL{URL: testURL}, - velestest.WithPad(' '), - ) -} - -// TestDetector_truePositives tests for cases where we know the Detector -// will find a MongoDB connection URL/s. -func TestDetector_truePositives(t *testing.T) { - engine, err := veles.NewDetectionEngine([]veles.Detector{mongodburi.NewDetector()}) - if err != nil { - t.Fatal(err) - } - - testURLWithPort := "mongodb://myDatabaseUser:D1fficultP%40ssw0rd@mongodb0.example.com:27017/?authSource=admin" - testURLSRV := "mongodb+srv://myUser:myPass@cluster0.example.net/myDB?retryWrites=true" - - cases := []struct { - name string - input string - want []veles.Secret - }{{ - name: "simple matching URL", - input: testURL, - want: []veles.Secret{ - mongodburi.MongoDBConnectionURL{URL: testURL}, - }, - }, { - name: "URL with port and options", - input: testURLWithPort, - want: []veles.Secret{ - mongodburi.MongoDBConnectionURL{URL: testURLWithPort}, - }, - }, { - name: "mongodb+srv scheme", - input: testURLSRV, - want: []veles.Secret{ - mongodburi.MongoDBConnectionURL{URL: testURLSRV}, - }, - }, { - name: "match at end of string", - input: `MONGO_URI=` + testURL, - want: []veles.Secret{ - mongodburi.MongoDBConnectionURL{URL: testURL}, - }, - }, { - name: "match in middle of string", - input: `MONGO_URI="` + testURL + `"`, - want: []veles.Secret{ - // The trailing quote is consumed by [^\s]+ but that's fine; - // the URL is still detected. - mongodburi.MongoDBConnectionURL{URL: testURL + `"`}, - }, - }, { - name: "multiple matches on separate lines", - input: testURL + "\n" + testURLWithPort, - want: []veles.Secret{ - mongodburi.MongoDBConnectionURL{URL: testURL}, - mongodburi.MongoDBConnectionURL{URL: testURLWithPort}, - }, - }, { - name: "larger input containing URL", - input: fmt.Sprintf(` -# Database config -MONGO_URI=%s -DB_NAME=mydb - `, testURL), - want: []veles.Secret{ - mongodburi.MongoDBConnectionURL{URL: testURL}, - }, - }, { - name: "URL with numeric password", - input: "mongodb://admin:123456@db.example.com:27017", - want: []veles.Secret{ - mongodburi.MongoDBConnectionURL{URL: "mongodb://admin:123456@db.example.com:27017"}, - }, - }, { - name: "URL with special chars in password (percent-encoded)", - input: "mongodb://user:p%40ss%3Aw0rd@host.example.com:27017/testdb", - want: []veles.Secret{ - mongodburi.MongoDBConnectionURL{URL: "mongodb://user:p%40ss%3Aw0rd@host.example.com:27017/testdb"}, - }, - }} - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - got, err := engine.Detect(t.Context(), strings.NewReader(tc.input)) - if err != nil { - t.Errorf("Detect() error: %v, want nil", err) - } - if diff := cmp.Diff(tc.want, got, cmpopts.EquateEmpty()); diff != "" { - t.Errorf("Detect() diff (-want +got):\n%s", diff) - } - }) - } -} - -// TestDetector_trueNegatives tests for cases where we know the Detector -// will not find a MongoDB connection URL. -func TestDetector_trueNegatives(t *testing.T) { - engine, err := veles.NewDetectionEngine([]veles.Detector{mongodburi.NewDetector()}) - if err != nil { - t.Fatal(err) - } - cases := []struct { - name string - input string - want []veles.Secret - }{{ - name: "empty input", - input: "", - }, { - name: "mongodb URL without credentials", - input: "mongodb://localhost:27017/mydb", - }, { - name: "mongodb URL with only username (no password)", - input: "mongodb://user@localhost:27017", - }, { - name: "random text", - input: "this is just some random text without any mongodb urls", - }, { - name: "http URL should not match", - input: "http://user:pass@example.com", - }, { - name: "incomplete scheme", - input: "mongo://user:pass@localhost", - }, { - name: "missing host after @", - input: "mongodb://user:pass@", - }} - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - got, err := engine.Detect(t.Context(), strings.NewReader(tc.input)) - if err != nil { - t.Errorf("Detect() error: %v, want nil", err) - } - if diff := cmp.Diff(tc.want, got, cmpopts.EquateEmpty()); diff != "" { - t.Errorf("Detect() diff (-want +got):\n%s", diff) - } - }) - } -} diff --git a/veles/secrets/mongodburl/mongodburi.go b/veles/secrets/mongodburl/mongodburi.go index 311fb4b9d..c385de2f0 100644 --- a/veles/secrets/mongodburl/mongodburi.go +++ b/veles/secrets/mongodburl/mongodburi.go @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Package mongodbconnectionurl contains a Veles Secret type and a Validator for +// MongoDB connection URLs with embedded credentials. package mongodbconnectionurl // MongoDBConnectionURL is a Veles Secret that holds a MongoDB connection URL diff --git a/veles/secrets/urlcreds/detector.go b/veles/secrets/urlcreds/detector.go index 298caaf91..ebbcc2260 100644 --- a/veles/secrets/urlcreds/detector.go +++ b/veles/secrets/urlcreds/detector.go @@ -12,28 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package urlcreds import ( "net/url" "regexp" + "strings" "github.com/google/osv-scalibr/veles" "github.com/google/osv-scalibr/veles/secrets/common/simpletoken" + mongodbconnectionurl "github.com/google/osv-scalibr/veles/secrets/mongodburl" ) const ( @@ -49,7 +37,16 @@ var ( urlPattern = regexp.MustCompile(`\b[a-zA-Z0-9+.-]+:\/\/[^\s\?@#\/]+@[^\s]+\b`) ) +// isMongoDBScheme returns true if the URL scheme is mongodb or mongodb+srv. +func isMongoDBScheme(scheme string) bool { + s := strings.ToLower(scheme) + return s == "mongodb" || s == "mongodb+srv" +} + // NewDetector creates and returns a new instance of the URL with credentials detector. +// For MongoDB connection URLs (mongodb:// or mongodb+srv://), it returns a +// MongoDBConnectionURL secret instead of a generic Credentials secret, so that +// the MongoDB-specific validator can be used. func NewDetector() veles.Detector { return simpletoken.Detector{ MaxLen: maxURLLength, @@ -62,6 +59,9 @@ func NewDetector() veles.Detector { if !hasValidCredentials(u) { return nil, false } + if isMongoDBScheme(u.Scheme) { + return mongodbconnectionurl.MongoDBConnectionURL{URL: string(b)}, true + } return Credentials{FullURL: u.String()}, true }, } diff --git a/veles/secrets/urlcreds/detector_test.go b/veles/secrets/urlcreds/detector_test.go index 2fca56966..8eed26775 100644 --- a/veles/secrets/urlcreds/detector_test.go +++ b/veles/secrets/urlcreds/detector_test.go @@ -12,20 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package urlcreds_test import ( @@ -35,6 +21,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/osv-scalibr/veles" + mongodburi "github.com/google/osv-scalibr/veles/secrets/mongodburl" "github.com/google/osv-scalibr/veles/secrets/urlcreds" ) @@ -91,6 +78,27 @@ func TestDetector_truePositives(t *testing.T) { urlcreds.Credentials{FullURL: "http://:pass%3Aword@example.com"}, }, }, + { + name: "mongodb_url_returns_MongoDBConnectionURL", + input: "mongodb://myUser:myPass@localhost", + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: "mongodb://myUser:myPass@localhost"}, + }, + }, + { + name: "mongodb_url_with_port_and_options", + input: "mongodb://myUser:D1fficultP%40ssw0rd@mongodb0.example.com:27017/?authSource=admin", + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: "mongodb://myUser:D1fficultP%40ssw0rd@mongodb0.example.com:27017/?authSource=admin"}, + }, + }, + { + name: "mongodb_srv_url_returns_MongoDBConnectionURL", + input: "mongodb+srv://myUser:myPass@cluster0.example.net/myDB?retryWrites=true", + want: []veles.Secret{ + mongodburi.MongoDBConnectionURL{URL: "mongodb+srv://myUser:myPass@cluster0.example.net/myDB?retryWrites=true"}, + }, + }, } for _, tc := range cases { diff --git a/veles/secrets/urlcreds/urlcreds.go b/veles/secrets/urlcreds/urlcreds.go index 5cad87b8d..cec84ff2a 100644 --- a/veles/secrets/urlcreds/urlcreds.go +++ b/veles/secrets/urlcreds/urlcreds.go @@ -12,20 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - // Package urlcreds contains the logic to extract URLs with credentials. package urlcreds diff --git a/veles/secrets/urlcreds/validator.go b/veles/secrets/urlcreds/validator.go index df5c63687..9f993e413 100644 --- a/veles/secrets/urlcreds/validator.go +++ b/veles/secrets/urlcreds/validator.go @@ -12,20 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package urlcreds import ( diff --git a/veles/secrets/urlcreds/validator_test.go b/veles/secrets/urlcreds/validator_test.go index b90eb1a39..01b67153c 100644 --- a/veles/secrets/urlcreds/validator_test.go +++ b/veles/secrets/urlcreds/validator_test.go @@ -12,20 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package urlcreds_test import ( diff --git a/veles/secrets/urlcreds/validators/ftp.go b/veles/secrets/urlcreds/validators/ftp.go index 55ef9fb06..61f5cae93 100644 --- a/veles/secrets/urlcreds/validators/ftp.go +++ b/veles/secrets/urlcreds/validators/ftp.go @@ -12,20 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package validators import ( diff --git a/veles/secrets/urlcreds/validators/http.go b/veles/secrets/urlcreds/validators/http.go index c0986a24b..66cb3bfa0 100644 --- a/veles/secrets/urlcreds/validators/http.go +++ b/veles/secrets/urlcreds/validators/http.go @@ -12,20 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package validators import ( diff --git a/veles/secrets/urlcreds/validators/sftp.go b/veles/secrets/urlcreds/validators/sftp.go index b008928ad..bff5af7de 100644 --- a/veles/secrets/urlcreds/validators/sftp.go +++ b/veles/secrets/urlcreds/validators/sftp.go @@ -12,20 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package validators import ( diff --git a/veles/secrets/urlcreds/validators/validators.go b/veles/secrets/urlcreds/validators/validators.go index 710ef57b9..c06c67330 100644 --- a/veles/secrets/urlcreds/validators/validators.go +++ b/veles/secrets/urlcreds/validators/validators.go @@ -12,19 +12,5 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - // Package validators implements schema-specific validation logic for credentials contained in URLs. package validators