From 84ca06d51671f9f4c6e97c9ceff057d1faa31bcf Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" Date: Tue, 14 Nov 2023 12:43:45 +0000 Subject: [PATCH 1/8] Feature: NRF consumer support oauth2 --- go.mod | 4 ++-- go.sum | 7 +++---- internal/context/context.go | 1 + internal/sbi/consumer/nf_accesstoken.go | 25 +++++++++++++++++++++++++ internal/sbi/consumer/nf_discovery.go | 12 ++++++++---- internal/sbi/consumer/nf_managemant.go | 10 ++++++++-- 6 files changed, 47 insertions(+), 12 deletions(-) create mode 100644 internal/sbi/consumer/nf_accesstoken.go diff --git a/go.mod b/go.mod index 0e514a7..3eccc5f 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.17 require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d github.com/evanphx/json-patch v0.5.2 - github.com/free5gc/openapi v1.0.7-0.20230802173229-2b3ded4db293 + github.com/free5gc/openapi v1.0.7-0.20231112094355-a96c3450377e github.com/free5gc/util v1.0.5-0.20231001095115-433858e5be94 github.com/gin-gonic/gin v1.9.1 github.com/google/uuid v1.3.0 @@ -57,7 +57,7 @@ require ( golang.org/x/crypto v0.14.0 // indirect golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect - golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect + golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect google.golang.org/appengine v1.6.7 // indirect diff --git a/go.sum b/go.sum index 29d5750..898ca09 100644 --- a/go.sum +++ b/go.sum @@ -61,8 +61,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2 h1:xVCHIVMUu1wtM/VkR9jVZ45N3FhZfYMMYGorLCR8P3k= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/free5gc/openapi v1.0.7-0.20230802173229-2b3ded4db293 h1:BSIvKCYu7646sE8J9R1L8v2R435otUik3wOFN33csfs= -github.com/free5gc/openapi v1.0.7-0.20230802173229-2b3ded4db293/go.mod h1:iw/N0E+FlX44EEx24IBi2EdZW8v+bkj3ETWPGnlK9DI= +github.com/free5gc/openapi v1.0.7-0.20231112094355-a96c3450377e h1:mXnoioq+fxpChliDl5Uy+m6+Hm7iWrJPZo9mi6BijHE= +github.com/free5gc/openapi v1.0.7-0.20231112094355-a96c3450377e/go.mod h1:qv9KqEucoZSeENPRFGxfTe+33ZWYyiYFx1Rj+H0DoWA= github.com/free5gc/util v1.0.5-0.20231001095115-433858e5be94 h1:tNylIqH/m5Kq+3KuC+jjXGl06Y6EmM8yq61ZUgNrPBY= github.com/free5gc/util v1.0.5-0.20231001095115-433858e5be94/go.mod h1:aMszJZbCkcg5xaGgzya+55jz+OPMsJqPLq5Z3fWDFPE= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= @@ -318,7 +318,6 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R 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.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= @@ -339,7 +338,6 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -540,6 +538,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/context/context.go b/internal/context/context.go index 5436cff..d65912f 100644 --- a/internal/context/context.go +++ b/internal/context/context.go @@ -56,6 +56,7 @@ type UDRContext struct { InfluenceDataSubscriptions sync.Map appDataInfluDataSubscriptionIdGenerator uint64 mtx sync.RWMutex + OAuth2Required bool } type UESubsData struct { diff --git a/internal/sbi/consumer/nf_accesstoken.go b/internal/sbi/consumer/nf_accesstoken.go new file mode 100644 index 0000000..449494b --- /dev/null +++ b/internal/sbi/consumer/nf_accesstoken.go @@ -0,0 +1,25 @@ +package consumer + +import ( + "context" + + "github.com/free5gc/openapi" + "github.com/free5gc/openapi/models" + "github.com/free5gc/openapi/oauth" + udr_context "github.com/free5gc/udr/internal/context" + "github.com/free5gc/udr/internal/logger" +) + +func GetTokenCtx(scope, targetNF string) (context.Context, *models.ProblemDetails, error) { + if udr_context.GetSelf().OAuth2Required { + logger.ConsumerLog.Infof("GetToekenCtx") + udrSelf := udr_context.GetSelf() + tok, pd, err := oauth.SendAccTokenReq(udrSelf.NfId, models.NfType_UDR, scope, targetNF, udrSelf.NrfUri) + if err != nil { + return nil, pd, err + } + return context.WithValue(context.Background(), + openapi.ContextOAuth2, tok), pd, nil + } + return context.TODO(), nil, nil +} diff --git a/internal/sbi/consumer/nf_discovery.go b/internal/sbi/consumer/nf_discovery.go index 19455fd..62bc39b 100644 --- a/internal/sbi/consumer/nf_discovery.go +++ b/internal/sbi/consumer/nf_discovery.go @@ -1,7 +1,6 @@ package consumer import ( - "context" "fmt" "net/http" @@ -12,14 +11,19 @@ import ( func SendSearchNFInstances(nrfUri string, targetNfType, requestNfType models.NfType, param Nnrf_NFDiscovery.SearchNFInstancesParamOpts, -) (models.SearchResult, error) { +) (*models.SearchResult, error) { // Set client and set url configuration := Nnrf_NFDiscovery.NewConfiguration() configuration.SetBasePath(nrfUri) client := Nnrf_NFDiscovery.NewAPIClient(configuration) + ctx, _, err := GetTokenCtx("nnrf-disc", "NRF") + if err != nil { + return nil, err + } + var res *http.Response - result, res, err := client.NFInstancesStoreApi.SearchNFInstances(context.TODO(), targetNfType, requestNfType, ¶m) + result, res, err := client.NFInstancesStoreApi.SearchNFInstances(ctx, targetNfType, requestNfType, ¶m) if res != nil && res.StatusCode == http.StatusTemporaryRedirect { err = fmt.Errorf("Temporary Redirect For Non NRF Consumer") } @@ -29,5 +33,5 @@ func SendSearchNFInstances(nrfUri string, targetNfType, requestNfType models.NfT } }() - return result, err + return &result, err } diff --git a/internal/sbi/consumer/nf_managemant.go b/internal/sbi/consumer/nf_managemant.go index 953695e..7438e34 100644 --- a/internal/sbi/consumer/nf_managemant.go +++ b/internal/sbi/consumer/nf_managemant.go @@ -73,7 +73,7 @@ func SendRegisterNFInstance(nrfUri, nfInstanceId string, profile models.NfProfil var retrieveNfInstanceId string for { - _, res, err := client.NFInstanceIDDocumentApi.RegisterNFInstance(context.TODO(), nfInstanceId, profile) + nf, res, err := client.NFInstanceIDDocumentApi.RegisterNFInstance(context.TODO(), nfInstanceId, profile) if err != nil || res == nil { // TODO : add log fmt.Println(fmt.Errorf("UDR register to NRF Error[%s]", err.Error())) @@ -95,6 +95,7 @@ func SendRegisterNFInstance(nrfUri, nfInstanceId string, profile models.NfProfil resourceUri := res.Header.Get("Location") resouceNrfUri = resourceUri[:strings.Index(resourceUri, "/nnrf-nfm/")] retrieveNfInstanceId = resourceUri[strings.LastIndex(resourceUri, "/")+1:] + udr_context.GetSelf().OAuth2Required = nf.CustomInfo["oauth2"].(bool) return resouceNrfUri, retrieveNfInstanceId, err } else { fmt.Println("handler returned wrong status code", status) @@ -106,6 +107,11 @@ func SendRegisterNFInstance(nrfUri, nfInstanceId string, profile models.NfProfil func SendDeregisterNFInstance() (problemDetails *models.ProblemDetails, err error) { logger.ConsumerLog.Infof("Send Deregister NFInstance") + ctx, pd, err := GetTokenCtx("nnrf-nfm", "NRF") + if err != nil { + return pd, err + } + udrSelf := udr_context.GetSelf() // Set client and set url configuration := Nnrf_NFManagement.NewConfiguration() @@ -114,7 +120,7 @@ func SendDeregisterNFInstance() (problemDetails *models.ProblemDetails, err erro var res *http.Response - res, err = client.NFInstanceIDDocumentApi.DeregisterNFInstance(context.Background(), udrSelf.NfId) + res, err = client.NFInstanceIDDocumentApi.DeregisterNFInstance(ctx, udrSelf.NfId) if err == nil { return } else if res != nil { From 1ec2b2b96d1fa0cd3fd7925b280ce66d29b1f71a Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" Date: Thu, 16 Nov 2023 02:25:28 +0000 Subject: [PATCH 2/8] Add nrfCerPem config setting --- internal/context/context.go | 4 ++++ internal/sbi/consumer/nf_managemant.go | 13 +++++++++---- pkg/factory/config.go | 7 ++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/internal/context/context.go b/internal/context/context.go index d65912f..d6c0921 100644 --- a/internal/context/context.go +++ b/internal/context/context.go @@ -44,6 +44,7 @@ type UDRContext struct { HttpIPv6Address string NfId string NrfUri string + NrfCerPem string EeSubscriptionIDGenerator int SdmSubscriptionIDGenerator int SubscriptionDataSubscriptionIDGenerator int @@ -135,6 +136,9 @@ func InitUdrContext(context *UDRContext) { logger.UtilLog.Warn("NRF Uri is empty! Using localhost as NRF IPv4 address.") context.NrfUri = fmt.Sprintf("%s://%s:%d", context.UriScheme, "127.0.0.1", 29510) } + if configuration.NrfCerPem != "" { + context.NrfCerPem = configuration.NrfCerPem + } } func (context *UDRContext) GetIPv4Uri() string { diff --git a/internal/sbi/consumer/nf_managemant.go b/internal/sbi/consumer/nf_managemant.go index 7438e34..2acc819 100644 --- a/internal/sbi/consumer/nf_managemant.go +++ b/internal/sbi/consumer/nf_managemant.go @@ -95,7 +95,12 @@ func SendRegisterNFInstance(nrfUri, nfInstanceId string, profile models.NfProfil resourceUri := res.Header.Get("Location") resouceNrfUri = resourceUri[:strings.Index(resourceUri, "/nnrf-nfm/")] retrieveNfInstanceId = resourceUri[strings.LastIndex(resourceUri, "/")+1:] - udr_context.GetSelf().OAuth2Required = nf.CustomInfo["oauth2"].(bool) + oauth2 := nf.CustomInfo["oauth2"].(bool) + udr_context.GetSelf().OAuth2Required = oauth2 + logger.MainLog.Infoln("OAuth2 setting receive from NRF:", oauth2) + if oauth2 && udr_context.GetSelf().NrfCerPem == "" { + logger.CfgLog.Error("OAuth2 enable but no nrfCerPem provided in config.") + } return resouceNrfUri, retrieveNfInstanceId, err } else { fmt.Println("handler returned wrong status code", status) @@ -122,7 +127,7 @@ func SendDeregisterNFInstance() (problemDetails *models.ProblemDetails, err erro res, err = client.NFInstanceIDDocumentApi.DeregisterNFInstance(ctx, udrSelf.NfId) if err == nil { - return + return nil, err } else if res != nil { defer func() { if rspCloseErr := res.Body.Close(); rspCloseErr != nil { @@ -131,12 +136,12 @@ func SendDeregisterNFInstance() (problemDetails *models.ProblemDetails, err erro }() if res.Status != err.Error() { - return + return nil, err } problem := err.(openapi.GenericOpenAPIError).Model().(models.ProblemDetails) problemDetails = &problem } else { err = openapi.ReportError("server no response") } - return + return problemDetails, err } diff --git a/pkg/factory/config.go b/pkg/factory/config.go index 64e7138..4be71d5 100644 --- a/pkg/factory/config.go +++ b/pkg/factory/config.go @@ -55,9 +55,10 @@ const ( ) type Configuration struct { - Sbi *Sbi `yaml:"sbi" valid:"required"` - Mongodb *Mongodb `yaml:"mongodb" valid:"required"` - NrfUri string `yaml:"nrfUri" valid:"url,required"` + Sbi *Sbi `yaml:"sbi" valid:"required"` + Mongodb *Mongodb `yaml:"mongodb" valid:"required"` + NrfUri string `yaml:"nrfUri" valid:"url,required"` + NrfCerPem string `yaml:"nrfCerPem,omitempty" valid:"type(string),minstringlength(1),optional"` } type Logger struct { From 6e51b602a87d69a80f311cf60950c8e55119dc0c Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" Date: Thu, 16 Nov 2023 03:08:40 +0000 Subject: [PATCH 3/8] modify log level --- internal/sbi/consumer/nf_accesstoken.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/sbi/consumer/nf_accesstoken.go b/internal/sbi/consumer/nf_accesstoken.go index 449494b..9c54612 100644 --- a/internal/sbi/consumer/nf_accesstoken.go +++ b/internal/sbi/consumer/nf_accesstoken.go @@ -12,7 +12,7 @@ import ( func GetTokenCtx(scope, targetNF string) (context.Context, *models.ProblemDetails, error) { if udr_context.GetSelf().OAuth2Required { - logger.ConsumerLog.Infof("GetToekenCtx") + logger.ConsumerLog.Debugln("GetToekenCtx") udrSelf := udr_context.GetSelf() tok, pd, err := oauth.SendAccTokenReq(udrSelf.NfId, models.NfType_UDR, scope, targetNF, udrSelf.NrfUri) if err != nil { From 5a48134ff7c423662aaf78c42be5db0a401535d5 Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" Date: Mon, 11 Dec 2023 04:36:12 +0000 Subject: [PATCH 4/8] Fix: fix bugs and minor changes --- go.mod | 2 +- go.sum | 4 ++-- internal/context/context.go | 6 +++--- internal/sbi/consumer/nf_managemant.go | 9 ++++++--- internal/sbi/producer/data_repository.go | 8 ++++---- pkg/factory/config.go | 8 ++++---- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index 3eccc5f..1239f64 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d github.com/evanphx/json-patch v0.5.2 github.com/free5gc/openapi v1.0.7-0.20231112094355-a96c3450377e - github.com/free5gc/util v1.0.5-0.20231001095115-433858e5be94 + github.com/free5gc/util v1.0.5-0.20231205080047-308f623d6808 github.com/gin-gonic/gin v1.9.1 github.com/google/uuid v1.3.0 github.com/mitchellh/mapstructure v1.4.3 diff --git a/go.sum b/go.sum index 898ca09..c25fcfe 100644 --- a/go.sum +++ b/go.sum @@ -63,8 +63,8 @@ github.com/evanphx/json-patch v0.5.2 h1:xVCHIVMUu1wtM/VkR9jVZ45N3FhZfYMMYGorLCR8 github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/free5gc/openapi v1.0.7-0.20231112094355-a96c3450377e h1:mXnoioq+fxpChliDl5Uy+m6+Hm7iWrJPZo9mi6BijHE= github.com/free5gc/openapi v1.0.7-0.20231112094355-a96c3450377e/go.mod h1:qv9KqEucoZSeENPRFGxfTe+33ZWYyiYFx1Rj+H0DoWA= -github.com/free5gc/util v1.0.5-0.20231001095115-433858e5be94 h1:tNylIqH/m5Kq+3KuC+jjXGl06Y6EmM8yq61ZUgNrPBY= -github.com/free5gc/util v1.0.5-0.20231001095115-433858e5be94/go.mod h1:aMszJZbCkcg5xaGgzya+55jz+OPMsJqPLq5Z3fWDFPE= +github.com/free5gc/util v1.0.5-0.20231205080047-308f623d6808 h1:8/IoWEgcO2DLlLCqbsxwduD7CzXdKe/BFJU2tcAqnxo= +github.com/free5gc/util v1.0.5-0.20231205080047-308f623d6808/go.mod h1:d+79g84a3YHhzvjJ2IhurrBOavOA8xWIQ/GCywPXqQk= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= diff --git a/internal/context/context.go b/internal/context/context.go index d6c0921..7d4d45e 100644 --- a/internal/context/context.go +++ b/internal/context/context.go @@ -44,7 +44,7 @@ type UDRContext struct { HttpIPv6Address string NfId string NrfUri string - NrfCerPem string + NrfCertPem string EeSubscriptionIDGenerator int SdmSubscriptionIDGenerator int SubscriptionDataSubscriptionIDGenerator int @@ -136,8 +136,8 @@ func InitUdrContext(context *UDRContext) { logger.UtilLog.Warn("NRF Uri is empty! Using localhost as NRF IPv4 address.") context.NrfUri = fmt.Sprintf("%s://%s:%d", context.UriScheme, "127.0.0.1", 29510) } - if configuration.NrfCerPem != "" { - context.NrfCerPem = configuration.NrfCerPem + if configuration.NrfCertPem != "" { + context.NrfCertPem = configuration.NrfCertPem } } diff --git a/internal/sbi/consumer/nf_managemant.go b/internal/sbi/consumer/nf_managemant.go index 2acc819..4a5bf6c 100644 --- a/internal/sbi/consumer/nf_managemant.go +++ b/internal/sbi/consumer/nf_managemant.go @@ -95,11 +95,14 @@ func SendRegisterNFInstance(nrfUri, nfInstanceId string, profile models.NfProfil resourceUri := res.Header.Get("Location") resouceNrfUri = resourceUri[:strings.Index(resourceUri, "/nnrf-nfm/")] retrieveNfInstanceId = resourceUri[strings.LastIndex(resourceUri, "/")+1:] - oauth2 := nf.CustomInfo["oauth2"].(bool) + oauth2 := false + if nf.CustomInfo != nil { + oauth2 = nf.CustomInfo["oauth2"].(bool) + } udr_context.GetSelf().OAuth2Required = oauth2 logger.MainLog.Infoln("OAuth2 setting receive from NRF:", oauth2) - if oauth2 && udr_context.GetSelf().NrfCerPem == "" { - logger.CfgLog.Error("OAuth2 enable but no nrfCerPem provided in config.") + if oauth2 && udr_context.GetSelf().NrfCertPem == "" { + logger.CfgLog.Error("OAuth2 enable but no nrfCertPem provided in config.") } return resouceNrfUri, retrieveNfInstanceId, err } else { diff --git a/internal/sbi/producer/data_repository.go b/internal/sbi/producer/data_repository.go index 06e31f7..38a28cf 100644 --- a/internal/sbi/producer/data_repository.go +++ b/internal/sbi/producer/data_repository.go @@ -44,7 +44,7 @@ func getDataFromDB(collName string, filter bson.M) (map[string]interface{}, *mod func getDataFromDBWithArg(collName string, filter bson.M, strength int) ( map[string]interface{}, *models.ProblemDetails, ) { - data, err := mongoapi.RestfulAPIGetOneWithArg(collName, filter, strength) + data, err := mongoapi.RestfulAPIGetOne(collName, filter, strength) if err != nil { return nil, openapi.ProblemDetailsSystemFailure(err.Error()) } @@ -2445,7 +2445,7 @@ func QueryProvisionedDataProcedure(ueId string, servingPlmnId string, collName = "subscriptionData.provisionedData.smData" filter = bson.M{"ueId": ueId, "servingPlmnId": servingPlmnId} sessionManagementSubscriptionDatas, err := mongoapi. - RestfulAPIGetManyWithArg(collName, filter, mongoapi.COLLATION_STRENGTH_IGNORE_CASE) + RestfulAPIGetMany(collName, filter, mongoapi.COLLATION_STRENGTH_IGNORE_CASE) if err != nil { logger.DataRepoLog.Errorf("QueryProvisionedDataProcedure get sessionManagementSubscriptionDatas err: %+v", err) return nil, openapi.ProblemDetailsSystemFailure(err.Error()) @@ -2820,7 +2820,7 @@ func QuerySmDataProcedure(collName string, ueId string, servingPlmnId string, } sessionManagementSubscriptionDatas, err := mongoapi. - RestfulAPIGetManyWithArg(collName, filter, mongoapi.COLLATION_STRENGTH_IGNORE_CASE) + RestfulAPIGetMany(collName, filter, mongoapi.COLLATION_STRENGTH_IGNORE_CASE) if err != nil { logger.DataRepoLog.Errorf("QuerySmDataProcedure err: %+v", err) return nil @@ -2957,7 +2957,7 @@ func HandleQuerySmfRegList(request *httpwrapper.Request) *httpwrapper.Response { func QuerySmfRegListProcedure(collName string, ueId string) *[]map[string]interface{} { filter := bson.M{"ueId": ueId} - smfRegList, err := mongoapi.RestfulAPIGetManyWithArg(collName, filter, mongoapi.COLLATION_STRENGTH_IGNORE_CASE) + smfRegList, err := mongoapi.RestfulAPIGetMany(collName, filter, mongoapi.COLLATION_STRENGTH_IGNORE_CASE) if err != nil { logger.DataRepoLog.Errorf("QuerySmfRegListProcedure err: %+v", err) return nil diff --git a/pkg/factory/config.go b/pkg/factory/config.go index 4be71d5..50e13fb 100644 --- a/pkg/factory/config.go +++ b/pkg/factory/config.go @@ -55,10 +55,10 @@ const ( ) type Configuration struct { - Sbi *Sbi `yaml:"sbi" valid:"required"` - Mongodb *Mongodb `yaml:"mongodb" valid:"required"` - NrfUri string `yaml:"nrfUri" valid:"url,required"` - NrfCerPem string `yaml:"nrfCerPem,omitempty" valid:"type(string),minstringlength(1),optional"` + Sbi *Sbi `yaml:"sbi" valid:"required"` + Mongodb *Mongodb `yaml:"mongodb" valid:"required"` + NrfUri string `yaml:"nrfUri" valid:"url,required"` + NrfCertPem string `yaml:"nrfCertPem,omitempty" valid:"type(string),minstringlength(1),optional"` } type Logger struct { From 4500b0eb326877dde259418dcaa6650e25e2c8ce Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" Date: Wed, 13 Dec 2023 03:08:27 +0000 Subject: [PATCH 5/8] Fix: prevent assertion and modify config setting --- internal/sbi/consumer/nf_managemant.go | 8 ++++++-- pkg/factory/config.go | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/internal/sbi/consumer/nf_managemant.go b/internal/sbi/consumer/nf_managemant.go index 4a5bf6c..f4816d4 100644 --- a/internal/sbi/consumer/nf_managemant.go +++ b/internal/sbi/consumer/nf_managemant.go @@ -95,12 +95,16 @@ func SendRegisterNFInstance(nrfUri, nfInstanceId string, profile models.NfProfil resourceUri := res.Header.Get("Location") resouceNrfUri = resourceUri[:strings.Index(resourceUri, "/nnrf-nfm/")] retrieveNfInstanceId = resourceUri[strings.LastIndex(resourceUri, "/")+1:] + oauth2 := false if nf.CustomInfo != nil { - oauth2 = nf.CustomInfo["oauth2"].(bool) + v, ok := nf.CustomInfo["oauth2"].(bool) + if ok { + oauth2 = v + logger.MainLog.Infoln("OAuth2 setting receive from NRF:", oauth2) + } } udr_context.GetSelf().OAuth2Required = oauth2 - logger.MainLog.Infoln("OAuth2 setting receive from NRF:", oauth2) if oauth2 && udr_context.GetSelf().NrfCertPem == "" { logger.CfgLog.Error("OAuth2 enable but no nrfCertPem provided in config.") } diff --git a/pkg/factory/config.go b/pkg/factory/config.go index 50e13fb..d48d09f 100644 --- a/pkg/factory/config.go +++ b/pkg/factory/config.go @@ -58,7 +58,7 @@ type Configuration struct { Sbi *Sbi `yaml:"sbi" valid:"required"` Mongodb *Mongodb `yaml:"mongodb" valid:"required"` NrfUri string `yaml:"nrfUri" valid:"url,required"` - NrfCertPem string `yaml:"nrfCertPem,omitempty" valid:"type(string),minstringlength(1),optional"` + NrfCertPem string `yaml:"nrfCertPem,omitempty" valid:"optional"` } type Logger struct { From c9c0c91309fd402d73b89c8daf0478c67c1c284e Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" Date: Sat, 16 Dec 2023 11:41:39 +0000 Subject: [PATCH 6/8] Refactor: Move GetTokenCtx() --- go.mod | 2 +- go.sum | 4 ++-- internal/context/context.go | 12 ++++++++++++ internal/sbi/consumer/nf_accesstoken.go | 25 ------------------------- internal/sbi/consumer/nf_discovery.go | 3 ++- internal/sbi/consumer/nf_managemant.go | 2 +- 6 files changed, 18 insertions(+), 30 deletions(-) delete mode 100644 internal/sbi/consumer/nf_accesstoken.go diff --git a/go.mod b/go.mod index 1239f64..6e942ad 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.17 require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d github.com/evanphx/json-patch v0.5.2 - github.com/free5gc/openapi v1.0.7-0.20231112094355-a96c3450377e + github.com/free5gc/openapi v1.0.7-0.20231216094313-e15a4ff046f6 github.com/free5gc/util v1.0.5-0.20231205080047-308f623d6808 github.com/gin-gonic/gin v1.9.1 github.com/google/uuid v1.3.0 diff --git a/go.sum b/go.sum index c25fcfe..aab7273 100644 --- a/go.sum +++ b/go.sum @@ -61,8 +61,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2 h1:xVCHIVMUu1wtM/VkR9jVZ45N3FhZfYMMYGorLCR8P3k= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/free5gc/openapi v1.0.7-0.20231112094355-a96c3450377e h1:mXnoioq+fxpChliDl5Uy+m6+Hm7iWrJPZo9mi6BijHE= -github.com/free5gc/openapi v1.0.7-0.20231112094355-a96c3450377e/go.mod h1:qv9KqEucoZSeENPRFGxfTe+33ZWYyiYFx1Rj+H0DoWA= +github.com/free5gc/openapi v1.0.7-0.20231216094313-e15a4ff046f6 h1:8P/wOkTAQMgZJe9pUUNSTE5PWeAdlMrsU9kLsI+VAVE= +github.com/free5gc/openapi v1.0.7-0.20231216094313-e15a4ff046f6/go.mod h1:qv9KqEucoZSeENPRFGxfTe+33ZWYyiYFx1Rj+H0DoWA= github.com/free5gc/util v1.0.5-0.20231205080047-308f623d6808 h1:8/IoWEgcO2DLlLCqbsxwduD7CzXdKe/BFJU2tcAqnxo= github.com/free5gc/util v1.0.5-0.20231205080047-308f623d6808/go.mod h1:d+79g84a3YHhzvjJ2IhurrBOavOA8xWIQ/GCywPXqQk= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= diff --git a/internal/context/context.go b/internal/context/context.go index 7d4d45e..60cc32d 100644 --- a/internal/context/context.go +++ b/internal/context/context.go @@ -1,6 +1,7 @@ package context import ( + "context" "fmt" "math/rand" "os" @@ -10,6 +11,7 @@ import ( "github.com/google/uuid" "github.com/free5gc/openapi/models" + "github.com/free5gc/openapi/oauth" "github.com/free5gc/udr/internal/logger" "github.com/free5gc/udr/pkg/factory" ) @@ -176,3 +178,13 @@ func NewInfluenceDataSubscriptionId() string { } return fmt.Sprintf("%08x", GetSelf().InfluenceDataSubscriptionIDGenerator.Uint32()) } + +func (c *UDRContext) GetTokenCtx(scope, targetNF string) ( + context.Context, *models.ProblemDetails, error, +) { + if !c.OAuth2Required { + return context.TODO(), nil, nil + } + return oauth.GetTokenCtx(models.NfType_UDR, + c.NfId, c.NrfUri, scope, targetNF) +} diff --git a/internal/sbi/consumer/nf_accesstoken.go b/internal/sbi/consumer/nf_accesstoken.go deleted file mode 100644 index 9c54612..0000000 --- a/internal/sbi/consumer/nf_accesstoken.go +++ /dev/null @@ -1,25 +0,0 @@ -package consumer - -import ( - "context" - - "github.com/free5gc/openapi" - "github.com/free5gc/openapi/models" - "github.com/free5gc/openapi/oauth" - udr_context "github.com/free5gc/udr/internal/context" - "github.com/free5gc/udr/internal/logger" -) - -func GetTokenCtx(scope, targetNF string) (context.Context, *models.ProblemDetails, error) { - if udr_context.GetSelf().OAuth2Required { - logger.ConsumerLog.Debugln("GetToekenCtx") - udrSelf := udr_context.GetSelf() - tok, pd, err := oauth.SendAccTokenReq(udrSelf.NfId, models.NfType_UDR, scope, targetNF, udrSelf.NrfUri) - if err != nil { - return nil, pd, err - } - return context.WithValue(context.Background(), - openapi.ContextOAuth2, tok), pd, nil - } - return context.TODO(), nil, nil -} diff --git a/internal/sbi/consumer/nf_discovery.go b/internal/sbi/consumer/nf_discovery.go index 62bc39b..6c26e88 100644 --- a/internal/sbi/consumer/nf_discovery.go +++ b/internal/sbi/consumer/nf_discovery.go @@ -6,6 +6,7 @@ import ( "github.com/free5gc/openapi/Nnrf_NFDiscovery" "github.com/free5gc/openapi/models" + udr_context "github.com/free5gc/udr/internal/context" "github.com/free5gc/udr/internal/logger" ) @@ -17,7 +18,7 @@ func SendSearchNFInstances(nrfUri string, targetNfType, requestNfType models.NfT configuration.SetBasePath(nrfUri) client := Nnrf_NFDiscovery.NewAPIClient(configuration) - ctx, _, err := GetTokenCtx("nnrf-disc", "NRF") + ctx, _, err := udr_context.GetSelf().GetTokenCtx("nnrf-disc", "NRF") if err != nil { return nil, err } diff --git a/internal/sbi/consumer/nf_managemant.go b/internal/sbi/consumer/nf_managemant.go index f4816d4..71c3352 100644 --- a/internal/sbi/consumer/nf_managemant.go +++ b/internal/sbi/consumer/nf_managemant.go @@ -119,7 +119,7 @@ func SendRegisterNFInstance(nrfUri, nfInstanceId string, profile models.NfProfil func SendDeregisterNFInstance() (problemDetails *models.ProblemDetails, err error) { logger.ConsumerLog.Infof("Send Deregister NFInstance") - ctx, pd, err := GetTokenCtx("nnrf-nfm", "NRF") + ctx, pd, err := udr_context.GetSelf().GetTokenCtx("nnrf-nfm", "NRF") if err != nil { return pd, err } From 81d2ad1152ce39596eb53e0169d24ab70fcd555b Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" Date: Mon, 18 Dec 2023 04:45:37 +0000 Subject: [PATCH 7/8] Fix: remove uncessary code --- internal/context/context.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/context/context.go b/internal/context/context.go index 60cc32d..b098043 100644 --- a/internal/context/context.go +++ b/internal/context/context.go @@ -138,9 +138,7 @@ func InitUdrContext(context *UDRContext) { logger.UtilLog.Warn("NRF Uri is empty! Using localhost as NRF IPv4 address.") context.NrfUri = fmt.Sprintf("%s://%s:%d", context.UriScheme, "127.0.0.1", 29510) } - if configuration.NrfCertPem != "" { - context.NrfCertPem = configuration.NrfCertPem - } + context.NrfCertPem = configuration.NrfCertPem } func (context *UDRContext) GetIPv4Uri() string { From 6eb67c693d411dd1ff7b365b1dd8ff4e89e79914 Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" Date: Mon, 18 Dec 2023 11:02:42 +0000 Subject: [PATCH 8/8] Fix: go mod tidy --- go.sum | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/go.sum b/go.sum index d4bae9f..aab7273 100644 --- a/go.sum +++ b/go.sum @@ -75,6 +75,7 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= @@ -144,6 +145,7 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -154,6 +156,7 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= @@ -169,6 +172,8 @@ github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -193,6 +198,8 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/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= @@ -228,6 +235,7 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7Jul github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.mongodb.org/mongo-driver v1.8.4 h1:NruvZPPL0PBcRJKmbswoWSrmHeUvzdxA3GCPfD/NEOA= go.mongodb.org/mongo-driver v1.8.4/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -244,6 +252,9 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U 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-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -276,6 +287,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -314,6 +327,7 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -325,6 +339,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -351,17 +367,34 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/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-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/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.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -373,6 +406,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -408,6 +442,8 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=