From 61c552d609b3eb90eb0504522288640c43283241 Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" Date: Wed, 8 Nov 2023 05:29:04 +0000 Subject: [PATCH] Remove redundant code --- internal/context/context.go | 2 - internal/sbi/consumer/nf_accesstoken.go | 72 ++----------------- .../api_event_exposure_data_document.go | 5 -- ...nt_exposure_group_subscription_document.go | 10 --- ...exposure_group_subscriptions_collection.go | 10 --- ...pi_event_exposure_subscription_document.go | 10 --- ...event_exposure_subscriptions_collection.go | 10 --- .../api_individual_influence_data_document.go | 10 --- ...influence_data_subscriptions_collection.go | 10 --- ...erator_specific_data_container_document.go | 10 --- .../api_parameter_provision_document.go | 5 -- ...api_provisioned_parameter_data_document.go | 5 -- ..._identity_data_by_supi_or_gpsi_document.go | 5 -- ...query_odb_data_by_supi_or_gpsi_document.go | 5 -- .../api_retrieval_of_shared_data.go | 5 -- .../api_subs_to_notify_collection.go | 5 -- .../api_subs_to_notify_document.go | 5 -- internal/sbi/datarepository/routers.go | 64 ++++++++++++----- pkg/factory/config.go | 5 +- 19 files changed, 53 insertions(+), 200 deletions(-) diff --git a/internal/context/context.go b/internal/context/context.go index 22e9f64..5436cff 100644 --- a/internal/context/context.go +++ b/internal/context/context.go @@ -56,8 +56,6 @@ type UDRContext struct { InfluenceDataSubscriptions sync.Map appDataInfluDataSubscriptionIdGenerator uint64 mtx sync.RWMutex - ClientMap sync.Map - TokenMap sync.Map } type UESubsData struct { diff --git a/internal/sbi/consumer/nf_accesstoken.go b/internal/sbi/consumer/nf_accesstoken.go index e990e80..a769cfc 100644 --- a/internal/sbi/consumer/nf_accesstoken.go +++ b/internal/sbi/consumer/nf_accesstoken.go @@ -2,13 +2,9 @@ package consumer import ( "context" - "time" - - "github.com/antihax/optional" - "golang.org/x/oauth2" "github.com/free5gc/openapi" - "github.com/free5gc/openapi/Nnrf_AccessToken" + "github.com/free5gc/openapi/Send_util" "github.com/free5gc/openapi/models" udr_context "github.com/free5gc/udr/internal/context" "github.com/free5gc/udr/internal/logger" @@ -17,10 +13,9 @@ import ( func GetTokenCtx(scope, targetNF string) (context.Context, *models.ProblemDetails, error) { if factory.UdrConfig.GetOAuth() { - tok, pd, err := sendAccTokenReq(scope, targetNF) - // udrSelf := udr_context.GetSelf() - // tok, pd, err := util.SendAccTokenReq - // (udrSelf.NfId, models.NfType_UDR, &udrSelf.TokenMap, &udrSelf.ClientMap, scope, targetNF, udrSelf.NrfUri) + logger.ConsumerLog.Infof("GetToekenCtx") + udrSelf := udr_context.GetSelf() + tok, pd, err := Send_util.SendAccTokenReq(udrSelf.NfId, models.NfType_UDR, scope, targetNF, udrSelf.NrfUri) if err != nil { return nil, pd, err } @@ -29,62 +24,3 @@ func GetTokenCtx(scope, targetNF string) (context.Context, *models.ProblemDetail } return context.TODO(), nil, nil } - -func sendAccTokenReq(scope, targetNF string) (oauth2.TokenSource, *models.ProblemDetails, error) { - logger.ConsumerLog.Infof("Send Access Token Request") - var client *Nnrf_AccessToken.APIClient - udrSelf := udr_context.GetSelf() - // Set client and set url - configuration := Nnrf_AccessToken.NewConfiguration() - configuration.SetBasePath(udrSelf.NrfUri) - if val, ok := udrSelf.ClientMap.Load(configuration); ok { - client = val.(*Nnrf_AccessToken.APIClient) - } else { - client = Nnrf_AccessToken.NewAPIClient(configuration) - udrSelf.ClientMap.Store(configuration, client) - } - - var tok models.AccessTokenRsp - - if val, ok := udrSelf.TokenMap.Load(scope); ok { - tok = val.(models.AccessTokenRsp) - if int32(time.Now().Unix()) < tok.ExpiresIn { - logger.ConsumerLog.Infof("Token is not expired") - token := &oauth2.Token{ - AccessToken: tok.AccessToken, - TokenType: tok.TokenType, - Expiry: time.Unix(int64(tok.ExpiresIn), 0), - } - return oauth2.StaticTokenSource(token), nil, nil - } - } - - tok, res, err := client.AccessTokenRequestApi.AccessTokenRequest(context.Background(), "client_credentials", - udrSelf.NfId, scope, &Nnrf_AccessToken.AccessTokenRequestParamOpts{ - NfType: optional.NewInterface(models.NfType_UDR), - TargetNfType: optional.NewInterface(targetNF), - }) - if err == nil { - udrSelf.TokenMap.Store(scope, tok) - token := &oauth2.Token{ - AccessToken: tok.AccessToken, - TokenType: tok.TokenType, - Expiry: time.Unix(int64(tok.ExpiresIn), 0), - } - return oauth2.StaticTokenSource(token), nil, err - } else if res != nil { - defer func() { - if resCloseErr := res.Body.Close(); resCloseErr != nil { - logger.ConsumerLog.Errorf("AccessTokenRequestApi response body cannot close: %+v", resCloseErr) - } - }() - if res.Status != err.Error() { - return nil, nil, err - } - problem := err.(openapi.GenericOpenAPIError).Model().(models.ProblemDetails) - // problem := err.(openapi.GenericOpenAPIError).Model().(models.AccessTokenErr) - return nil, &problem, err - } else { - return nil, nil, openapi.ReportError("server no response") - } -} diff --git a/internal/sbi/datarepository/api_event_exposure_data_document.go b/internal/sbi/datarepository/api_event_exposure_data_document.go index 90276d9..8d1b9ae 100644 --- a/internal/sbi/datarepository/api_event_exposure_data_document.go +++ b/internal/sbi/datarepository/api_event_exposure_data_document.go @@ -23,11 +23,6 @@ import ( // HTTPQueryEEData - Retrieves the ee profile data of a UE func HTTPQueryEEData(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - req := httpwrapper.NewRequest(c.Request, nil) req.Params["ueId"] = c.Params.ByName("ueId") diff --git a/internal/sbi/datarepository/api_event_exposure_group_subscription_document.go b/internal/sbi/datarepository/api_event_exposure_group_subscription_document.go index a3cd14d..3981839 100644 --- a/internal/sbi/datarepository/api_event_exposure_group_subscription_document.go +++ b/internal/sbi/datarepository/api_event_exposure_group_subscription_document.go @@ -23,11 +23,6 @@ import ( // HTTPRemoveEeGroupSubscriptions - Deletes a eeSubscription for a group of UEs or any UE func HTTPRemoveEeGroupSubscriptions(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - req := httpwrapper.NewRequest(c.Request, nil) req.Params["ueGroupId"] = c.Params.ByName("ueGroupId") req.Params["subsId"] = c.Params.ByName("subsId") @@ -50,11 +45,6 @@ func HTTPRemoveEeGroupSubscriptions(c *gin.Context) { // HTTPUpdateEeGroupSubscriptions - Stores an individual ee subscription of a group of UEs or any UE func HTTPUpdateEeGroupSubscriptions(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - var eeSubscription models.EeSubscription requestBody, err := c.GetRawData() diff --git a/internal/sbi/datarepository/api_event_exposure_group_subscriptions_collection.go b/internal/sbi/datarepository/api_event_exposure_group_subscriptions_collection.go index fbda27d..9b00961 100644 --- a/internal/sbi/datarepository/api_event_exposure_group_subscriptions_collection.go +++ b/internal/sbi/datarepository/api_event_exposure_group_subscriptions_collection.go @@ -23,11 +23,6 @@ import ( // HTTPCreateEeGroupSubscriptions - Create individual EE subscription for a group of UEs or any UE func HTTPCreateEeGroupSubscriptions(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - var eeSubscription models.EeSubscription requestBody, err := c.GetRawData() if err != nil { @@ -76,11 +71,6 @@ func HTTPCreateEeGroupSubscriptions(c *gin.Context) { // HTTPQueryEeGroupSubscriptions - Retrieves the ee subscriptions of a group of UEs or any UE func HTTPQueryEeGroupSubscriptions(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - req := httpwrapper.NewRequest(c.Request, nil) req.Params["ueGroupId"] = c.Params.ByName("ueGroupId") diff --git a/internal/sbi/datarepository/api_event_exposure_subscription_document.go b/internal/sbi/datarepository/api_event_exposure_subscription_document.go index 0eb4e4a..cefe7e2 100644 --- a/internal/sbi/datarepository/api_event_exposure_subscription_document.go +++ b/internal/sbi/datarepository/api_event_exposure_subscription_document.go @@ -23,11 +23,6 @@ import ( // HTTPRemoveeeSubscriptions - Deletes a eeSubscription func HTTPRemoveeeSubscriptions(c *gin.Context) { - auth_arr := authorizationCheck(c) - if auth_arr != nil { - return - } - req := httpwrapper.NewRequest(c.Request, nil) req.Params["ueId"] = c.Params.ByName("ueId") req.Params["subsId"] = c.Params.ByName("subsId") @@ -50,11 +45,6 @@ func HTTPRemoveeeSubscriptions(c *gin.Context) { // HTTPUpdateEesubscriptions - Stores an individual ee subscriptions of a UE func HTTPUpdateEesubscriptions(c *gin.Context) { - auth_arr := authorizationCheck(c) - if auth_arr != nil { - return - } - var eeSubscription models.EeSubscription requestBody, err := c.GetRawData() diff --git a/internal/sbi/datarepository/api_event_exposure_subscriptions_collection.go b/internal/sbi/datarepository/api_event_exposure_subscriptions_collection.go index 1f81532..0ac1de3 100644 --- a/internal/sbi/datarepository/api_event_exposure_subscriptions_collection.go +++ b/internal/sbi/datarepository/api_event_exposure_subscriptions_collection.go @@ -23,11 +23,6 @@ import ( // HTTPCreateEeSubscriptions - Create individual EE subscription func HTTPCreateEeSubscriptions(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - var eeSubscription models.EeSubscription requestBody, err := c.GetRawData() @@ -77,11 +72,6 @@ func HTTPCreateEeSubscriptions(c *gin.Context) { // HTTPQueryeesubscriptions - Retrieves the ee subscriptions of a UE func HTTPQueryeesubscriptions(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - req := httpwrapper.NewRequest(c.Request, nil) req.Params["ueGroupId"] = c.Params.ByName("ueGroupId") diff --git a/internal/sbi/datarepository/api_individual_influence_data_document.go b/internal/sbi/datarepository/api_individual_influence_data_document.go index 0e9a5d8..06fc18a 100644 --- a/internal/sbi/datarepository/api_individual_influence_data_document.go +++ b/internal/sbi/datarepository/api_individual_influence_data_document.go @@ -23,11 +23,6 @@ import ( // HTTPApplicationDataInfluenceDataInfluenceIdDelete - Delete an individual Influence Data resource func HTTPApplicationDataInfluenceDataInfluenceIdDelete(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - // New HTTP request req := httpwrapper.NewRequest(c.Request, nil) req.Params["influenceId"] = c.Params.ByName("influenceId") @@ -62,11 +57,6 @@ func HTTPApplicationDataInfluenceDataInfluenceIdPatch(c *gin.Context) { // HTTPApplicationDataInfluenceDataInfluenceIdPut - Create or update an individual Influence Data resource func HTTPApplicationDataInfluenceDataInfluenceIdPut(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - // Get HTTP request body requestBody, err := c.GetRawData() if err != nil { diff --git a/internal/sbi/datarepository/api_influence_data_subscriptions_collection.go b/internal/sbi/datarepository/api_influence_data_subscriptions_collection.go index 9902b7e..4e513f5 100644 --- a/internal/sbi/datarepository/api_influence_data_subscriptions_collection.go +++ b/internal/sbi/datarepository/api_influence_data_subscriptions_collection.go @@ -23,11 +23,6 @@ import ( // HTTPApplicationDataInfluenceDataSubsToNotifyGet - func HTTPApplicationDataInfluenceDataSubsToNotifyGet(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - // New HTTP request req := httpwrapper.NewRequest(c.Request, nil) req.Query["dnn"] = c.QueryArray("dnn") @@ -55,11 +50,6 @@ func HTTPApplicationDataInfluenceDataSubsToNotifyGet(c *gin.Context) { // HTTPApplicationDataInfluenceDataSubsToNotifyPost - func HTTPApplicationDataInfluenceDataSubsToNotifyPost(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - // Get HTTP request body requestBody, err := c.GetRawData() if err != nil { diff --git a/internal/sbi/datarepository/api_operator_specific_data_container_document.go b/internal/sbi/datarepository/api_operator_specific_data_container_document.go index bcfdb46..5af79db 100644 --- a/internal/sbi/datarepository/api_operator_specific_data_container_document.go +++ b/internal/sbi/datarepository/api_operator_specific_data_container_document.go @@ -23,11 +23,6 @@ import ( // HTTPAmfContext3gpp - To modify operator specific data of a UE func HTTPPatchOperSpecData(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - var patchItemArray []models.PatchItem requestBody, err := c.GetRawData() @@ -77,11 +72,6 @@ func HTTPPatchOperSpecData(c *gin.Context) { // HTTPQueryOperSpecData - Retrieves the operator specific data of a UE func HTTPQueryOperSpecData(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - req := httpwrapper.NewRequest(c.Request, nil) req.Params["ueId"] = c.Params.ByName("ueId") diff --git a/internal/sbi/datarepository/api_parameter_provision_document.go b/internal/sbi/datarepository/api_parameter_provision_document.go index 308cff6..e69887b 100644 --- a/internal/sbi/datarepository/api_parameter_provision_document.go +++ b/internal/sbi/datarepository/api_parameter_provision_document.go @@ -23,11 +23,6 @@ import ( // HTTPGetppData - Read the profile of a given UE func HTTPGetppData(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - req := httpwrapper.NewRequest(c.Request, nil) req.Params["ueId"] = c.Params.ByName("ueId") diff --git a/internal/sbi/datarepository/api_provisioned_parameter_data_document.go b/internal/sbi/datarepository/api_provisioned_parameter_data_document.go index 0baab70..0f670b0 100644 --- a/internal/sbi/datarepository/api_provisioned_parameter_data_document.go +++ b/internal/sbi/datarepository/api_provisioned_parameter_data_document.go @@ -23,11 +23,6 @@ import ( // HTTPModifyPpData - modify the provisioned parameter data func HTTPModifyPpData(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - var patchItemArray []models.PatchItem requestBody, err := c.GetRawData() diff --git a/internal/sbi/datarepository/api_query_identity_data_by_supi_or_gpsi_document.go b/internal/sbi/datarepository/api_query_identity_data_by_supi_or_gpsi_document.go index 1026200..287da38 100644 --- a/internal/sbi/datarepository/api_query_identity_data_by_supi_or_gpsi_document.go +++ b/internal/sbi/datarepository/api_query_identity_data_by_supi_or_gpsi_document.go @@ -23,11 +23,6 @@ import ( // HTTPGetIdentityData - Retrieve identity data by SUPI or GPSI func HTTPGetIdentityData(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - req := httpwrapper.NewRequest(c.Request, nil) req.Params["ueId"] = c.Params.ByName("ueId") diff --git a/internal/sbi/datarepository/api_query_odb_data_by_supi_or_gpsi_document.go b/internal/sbi/datarepository/api_query_odb_data_by_supi_or_gpsi_document.go index c43e154..d743ddc 100644 --- a/internal/sbi/datarepository/api_query_odb_data_by_supi_or_gpsi_document.go +++ b/internal/sbi/datarepository/api_query_odb_data_by_supi_or_gpsi_document.go @@ -23,11 +23,6 @@ import ( // HTTPGetOdbData - Retrieve ODB Data data by SUPI or GPSI func HTTPGetOdbData(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - req := httpwrapper.NewRequest(c.Request, nil) req.Params["ueId"] = c.Params.ByName("ueId") diff --git a/internal/sbi/datarepository/api_retrieval_of_shared_data.go b/internal/sbi/datarepository/api_retrieval_of_shared_data.go index af95604..2c67766 100644 --- a/internal/sbi/datarepository/api_retrieval_of_shared_data.go +++ b/internal/sbi/datarepository/api_retrieval_of_shared_data.go @@ -23,11 +23,6 @@ import ( // HTTPGetSharedData - retrieve shared data func HTTPGetSharedData(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - sharedDataIdArray := c.QueryArray("shared-data-ids") req := httpwrapper.NewRequest(c.Request, nil) req.Query["sharedDataIds"] = sharedDataIdArray diff --git a/internal/sbi/datarepository/api_subs_to_notify_collection.go b/internal/sbi/datarepository/api_subs_to_notify_collection.go index ccd7b6b..bf1fb8f 100644 --- a/internal/sbi/datarepository/api_subs_to_notify_collection.go +++ b/internal/sbi/datarepository/api_subs_to_notify_collection.go @@ -23,11 +23,6 @@ import ( // HTTPPostSubscriptionDataSubscriptions - Subscription data subscriptions func HTTPPostSubscriptionDataSubscriptions(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - var subscriptionDataSubscriptions models.SubscriptionDataSubscriptions requestBody, err := c.GetRawData() diff --git a/internal/sbi/datarepository/api_subs_to_notify_document.go b/internal/sbi/datarepository/api_subs_to_notify_document.go index 62e7252..9af75e9 100644 --- a/internal/sbi/datarepository/api_subs_to_notify_document.go +++ b/internal/sbi/datarepository/api_subs_to_notify_document.go @@ -23,11 +23,6 @@ import ( // HTTPRemovesubscriptionDataSubscriptions - Deletes a subscriptionDataSubscriptions func HTTPRemovesubscriptionDataSubscriptions(c *gin.Context) { - auth_err := authorizationCheck(c) - if auth_err != nil { - return - } - req := httpwrapper.NewRequest(c.Request, nil) req.Params["ueId"] = c.Params.ByName("ueId") diff --git a/internal/sbi/datarepository/routers.go b/internal/sbi/datarepository/routers.go index 6261d3d..5719193 100644 --- a/internal/sbi/datarepository/routers.go +++ b/internal/sbi/datarepository/routers.go @@ -33,23 +33,6 @@ type Route struct { HandlerFunc gin.HandlerFunc } -func authorizationCheck(c *gin.Context) error { - if factory.UdrConfig.GetOAuth() { - oauth_err := openapi.VerifyOAuth(c.Request.Header.Get("Authorization"), "nudr-dr", - factory.UdrConfig.GetNrfCertPemPath()) - if oauth_err != nil { - c.JSON(http.StatusUnauthorized, gin.H{"error": oauth_err.Error()}) - return oauth_err - } - } - allowNf_err := factory.UdrConfig.VerifyServiceAllowType(c.Request.Header.Get("requestNF"), "nudr-dr") - if allowNf_err != nil { - c.JSON(http.StatusUnauthorized, gin.H{"error": allowNf_err.Error()}) - return allowNf_err - } - return nil -} - // Routes is the list of the generated Route. type Routes []Route @@ -61,6 +44,11 @@ func NewRouter() *gin.Engine { } func subMsgShortDispatchHandlerFunc(c *gin.Context) { + auth_err := authorizationCheck(c) + if auth_err != nil { + return + } + op := c.Param("ueId") for _, route := range subShortRoutes { if strings.Contains(route.Pattern, op) && route.Method == c.Request.Method { @@ -72,6 +60,11 @@ func subMsgShortDispatchHandlerFunc(c *gin.Context) { } func subMsgDispatchHandlerFunc(c *gin.Context) { + auth_err := authorizationCheck(c) + if auth_err != nil { + return + } + op := c.Param("servingPlmnId") subsToNotify := c.Param("ueId") for _, route := range subRoutes { @@ -92,6 +85,11 @@ func subMsgDispatchHandlerFunc(c *gin.Context) { } func eeMsgShortDispatchHandlerFunc(c *gin.Context) { + auth_err := authorizationCheck(c) + if auth_err != nil { + return + } + groupData := c.Param("ueId") contextData := c.Param("servingPlmnId") for _, route := range eeShortRoutes { @@ -109,6 +107,11 @@ func eeMsgShortDispatchHandlerFunc(c *gin.Context) { } func eeMsgDispatchHandlerFunc(c *gin.Context) { + auth_err := authorizationCheck(c) + if auth_err != nil { + return + } + groupData := c.Param("ueId") contextData := c.Param("servingPlmnId") for _, route := range eeRoutes { @@ -126,6 +129,11 @@ func eeMsgDispatchHandlerFunc(c *gin.Context) { } func appMsgDispatchHandlerFunc(c *gin.Context) { + auth_err := authorizationCheck(c) + if auth_err != nil { + return + } + subsToNotify := c.Param("influenceId") for _, route := range appRoutes { if subsToNotify == "subs-to-notify" && @@ -145,6 +153,11 @@ func appMsgDispatchHandlerFunc(c *gin.Context) { } func expoMsgDispatchHandlerFunc(c *gin.Context) { + auth_err := authorizationCheck(c) + if auth_err != nil { + return + } + subsToNotify := c.Param("ueId") op := c.Param("subId") for _, route := range expoRoutes { @@ -260,6 +273,23 @@ func HandleAppDataInfluDataSubsToNotifyConflictPut(c *gin.Context) { c.String(http.StatusNotFound, "404 page not found") } +func authorizationCheck(c *gin.Context) error { + if factory.UdrConfig.GetOAuth() { + oauth_err := openapi.VerifyOAuth(c.Request.Header.Get("Authorization"), "nudr-dr", + factory.UdrConfig.GetNrfCertPemPath()) + if oauth_err != nil { + c.JSON(http.StatusUnauthorized, gin.H{"error": oauth_err.Error()}) + return oauth_err + } + } + allowNf_err := factory.UdrConfig.VerifyServiceAllowType(c.Request.Header.Get("requestNF"), "nudr-dr") + if allowNf_err != nil { + c.JSON(http.StatusUnauthorized, gin.H{"error": allowNf_err.Error()}) + return allowNf_err + } + return nil +} + var routes = Routes{ { "Index", diff --git a/pkg/factory/config.go b/pkg/factory/config.go index 513a9bc..134c98c 100644 --- a/pkg/factory/config.go +++ b/pkg/factory/config.go @@ -9,7 +9,6 @@ import ( "sync" "github.com/asaskevich/govalidator" - "github.com/pkg/errors" "github.com/free5gc/udr/internal/logger" ) @@ -112,9 +111,9 @@ func (c *Config) VerifyServiceAllowType(nfTypeName string, serviceName string) e } } if serviceFound { - return errors.Errorf("Not allow NF Type: %+v", nfTypeName) + return fmt.Errorf("Not allow NF Type: %+v", nfTypeName) } - return errors.Errorf("ServiceName not found: %+v", serviceName) + return fmt.Errorf("ServiceName not found: %+v", serviceName) } func (c *Config) GetNrfCertPemPath() string {