From 374087e115ab51b7ecfc74c561047800effdd597 Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" <ctfang.cs12@nycu.edu.tw> Date: Thu, 9 Nov 2023 06:50:50 +0000 Subject: [PATCH] Refactor: refactor after openapi refactor --- internal/sbi/consumer/nf_accesstoken.go | 10 +- internal/sbi/producer/generate_auth_data.go | 23 ++- internal/sbi/producer/parameter_provision.go | 9 +- .../producer/subscriber_data_management.go | 144 +++++++++++++----- .../sbi/producer/ue_context_management.go | 61 +++++--- internal/util/nf_authorization.go | 12 +- pkg/factory/config.go | 25 --- 7 files changed, 178 insertions(+), 106 deletions(-) diff --git a/internal/sbi/consumer/nf_accesstoken.go b/internal/sbi/consumer/nf_accesstoken.go index 3e85f30..9e0b225 100644 --- a/internal/sbi/consumer/nf_accesstoken.go +++ b/internal/sbi/consumer/nf_accesstoken.go @@ -3,19 +3,17 @@ package consumer import ( "context" - udm_context "github.com/free5gc/udm/internal/context" - - "github.com/free5gc/udm/pkg/factory" - "github.com/free5gc/openapi" - "github.com/free5gc/openapi/Send_util" "github.com/free5gc/openapi/models" + "github.com/free5gc/openapi/oauth" + udm_context "github.com/free5gc/udm/internal/context" + "github.com/free5gc/udm/pkg/factory" ) func GetTokenCtx(scope, targetNF string) (context.Context, *models.ProblemDetails, error) { if factory.UdmConfig.GetOAuth() { udmSelf := udm_context.Getself() - tok, pd, err := Send_util.SendAccTokenReq(udmSelf.NfId, models.NfType_UDM, scope, targetNF, udmSelf.NrfUri) + tok, pd, err := oauth.SendAccTokenReq(udmSelf.NfId, models.NfType_UDM, scope, targetNF, udmSelf.NrfUri) if err != nil { return nil, pd, err } diff --git a/internal/sbi/producer/generate_auth_data.go b/internal/sbi/producer/generate_auth_data.go index c8a38fd..fe20f75 100644 --- a/internal/sbi/producer/generate_auth_data.go +++ b/internal/sbi/producer/generate_auth_data.go @@ -1,7 +1,6 @@ package producer import ( - "context" cryptoRand "crypto/rand" "encoding/hex" "fmt" @@ -20,6 +19,7 @@ import ( "github.com/free5gc/openapi/models" udm_context "github.com/free5gc/udm/internal/context" "github.com/free5gc/udm/internal/logger" + udm_consumer "github.com/free5gc/udm/internal/sbi/consumer" "github.com/free5gc/udm/pkg/suci" "github.com/free5gc/util/httpwrapper" "github.com/free5gc/util/milenage" @@ -127,9 +127,12 @@ func ConfirmAuthDataProcedure(authEvent models.AuthEvent, supi string) (problemD if err != nil { return openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return pd + } resp, err := client.AuthenticationStatusDocumentApi.CreateAuthenticationStatus( - context.Background(), supi, &createAuthParam) + ctx, supi, &createAuthParam) if err != nil { problemDetails = &models.ProblemDetails{ Status: int32(resp.StatusCode), @@ -174,8 +177,11 @@ func GenerateAuthDataProcedure(authInfoRequest models.AuthenticationInfoRequest, if err != nil { return nil, openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") - authSubs, res, err := client.AuthenticationDataDocumentApi.QueryAuthSubsData(context.Background(), supi, nil) + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } + authSubs, res, err := client.AuthenticationDataDocumentApi.QueryAuthSubsData(ctx, supi, nil) if err != nil { problemDetails = &models.ProblemDetails{ Status: http.StatusForbidden, @@ -463,9 +469,12 @@ func GenerateAuthDataProcedure(authInfoRequest models.AuthenticationInfoRequest, } var rsp *http.Response - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err = udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } rsp, err = client.AuthenticationDataDocumentApi.ModifyAuthentication( - context.Background(), supi, patchItemArray) + ctx, supi, patchItemArray) if err != nil { problemDetails = &models.ProblemDetails{ Status: http.StatusForbidden, diff --git a/internal/sbi/producer/parameter_provision.go b/internal/sbi/producer/parameter_provision.go index 2fc906e..dbdac65 100644 --- a/internal/sbi/producer/parameter_provision.go +++ b/internal/sbi/producer/parameter_provision.go @@ -1,12 +1,12 @@ package producer import ( - "context" "net/http" "github.com/free5gc/openapi" "github.com/free5gc/openapi/models" "github.com/free5gc/udm/internal/logger" + udm_consumer "github.com/free5gc/udm/internal/sbi/consumer" "github.com/free5gc/util/httpwrapper" ) @@ -34,8 +34,11 @@ func UpdateProcedure(updateRequest models.PpData, gpsi string) (problemDetails * if err != nil { return openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") - res, err := clientAPI.ProvisionedParameterDataDocumentApi.ModifyPpData(context.Background(), gpsi, nil) + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return pd + } + res, err := clientAPI.ProvisionedParameterDataDocumentApi.ModifyPpData(ctx, gpsi, nil) if err != nil { problemDetails = &models.ProblemDetails{ Status: int32(res.StatusCode), diff --git a/internal/sbi/producer/subscriber_data_management.go b/internal/sbi/producer/subscriber_data_management.go index 82fe075..5967ae5 100644 --- a/internal/sbi/producer/subscriber_data_management.go +++ b/internal/sbi/producer/subscriber_data_management.go @@ -1,7 +1,6 @@ package producer import ( - "context" "encoding/json" "net/http" "net/url" @@ -16,6 +15,7 @@ import ( "github.com/free5gc/openapi/models" udm_context "github.com/free5gc/udm/internal/context" "github.com/free5gc/udm/internal/logger" + udm_consumer "github.com/free5gc/udm/internal/sbi/consumer" "github.com/free5gc/util/httpwrapper" ) @@ -62,9 +62,12 @@ func getAmDataProcedure(supi string, plmnID string, supportedFeatures string) ( return nil, openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } accessAndMobilitySubscriptionDataResp, res, err := clientAPI.AccessAndMobilitySubscriptionDataDocumentApi. - QueryAmData(context.Background(), supi, plmnID, &queryAmDataParamOpts) + QueryAmData(ctx, supi, plmnID, &queryAmDataParamOpts) if err != nil { if res == nil { logger.SdmLog.Errorf(err.Error()) @@ -138,9 +141,12 @@ func getIdTranslationResultProcedure(gpsi string) (response *models.IdTranslatio return nil, openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } idTranslationResultResp, res, err := clientAPI.QueryIdentityDataBySUPIOrGPSIDocumentApi.GetIdentityData( - context.Background(), gpsi, &getIdentityDataParamOpts) + ctx, gpsi, &getIdentityDataParamOpts) if err != nil { if res == nil { logger.SdmLog.Errorf(err.Error()) @@ -255,9 +261,13 @@ func getSupiProcedure(supi string, plmnID string, dataSetNames []string, support if containDataSetName(dataSetNames, string(models.DataSetName_AM)) { var body models.AccessAndMobilitySubscriptionData udm_context.Getself().CreateAccessMobilitySubsDataForUe(supi, body) - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } amData, res, err := clientAPI.AccessAndMobilitySubscriptionDataDocumentApi.QueryAmData( - context.Background(), supi, plmnID, &queryAmDataParamOpts) + ctx, supi, plmnID, &queryAmDataParamOpts) if err != nil { if res == nil { logger.SdmLog.Errorf(err.Error()) @@ -298,8 +308,12 @@ func getSupiProcedure(supi string, plmnID string, dataSetNames []string, support if containDataSetName(dataSetNames, string(models.DataSetName_SMF_SEL)) { var smfSelSubsbody models.SmfSelectionSubscriptionData udm_context.Getself().CreateSmfSelectionSubsDataforUe(supi, smfSelSubsbody) - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") - smfSelData, res, err := clientAPI.SMFSelectionSubscriptionDataDocumentApi.QuerySmfSelectData(context.Background(), + + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } + smfSelData, res, err := clientAPI.SMFSelectionSubscriptionDataDocumentApi.QuerySmfSelectData(ctx, supi, plmnID, &querySmfSelectDataParamOpts) if err != nil { if res == nil { @@ -343,9 +357,13 @@ func getSupiProcedure(supi string, plmnID string, dataSetNames []string, support var querySmfRegListParamOpts Nudr.QuerySmfRegListParamOpts querySmfRegListParamOpts.SupportedFeatures = optional.NewString(supportedFeatures) udm_context.Getself().CreateUeContextInSmfDataforUe(supi, UeContextInSmfbody) - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } pdusess, res, err := clientAPI.SMFRegistrationsCollectionApi.QuerySmfRegList( - context.Background(), supi, &querySmfRegListParamOpts) + ctx, supi, &querySmfRegListParamOpts) if err != nil { if res == nil { logger.SdmLog.Errorf(err.Error()) @@ -408,9 +426,13 @@ func getSupiProcedure(supi string, plmnID string, dataSetNames []string, support // } if containDataSetName(dataSetNames, string(models.DataSetName_SM)) { - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } + sessionManagementSubscriptionData, res, err := clientAPI.SessionManagementSubscriptionDataApi. - QuerySmData(context.Background(), supi, plmnID, &querySmDataParamOpts) + QuerySmData(ctx, supi, plmnID, &querySmDataParamOpts) if err != nil { if res == nil { logger.SdmLog.Errorf(err.Error()) @@ -452,9 +474,13 @@ func getSupiProcedure(supi string, plmnID string, dataSetNames []string, support if containDataSetName(dataSetNames, string(models.DataSetName_TRACE)) { var TraceDatabody models.TraceData udm_context.Getself().CreateTraceDataforUe(supi, TraceDatabody) - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } traceData, res, err := clientAPI.TraceDataDocumentApi.QueryTraceData( - context.Background(), supi, plmnID, &queryTraceDataParamOpts) + ctx, supi, plmnID, &queryTraceDataParamOpts) if err != nil { if res == nil { logger.SdmLog.Errorf(err.Error()) @@ -536,8 +562,11 @@ func getSharedDataProcedure(sharedDataIds []string, supportedFeatures string) ( var getSharedDataParamOpts Nudr.GetSharedDataParamOpts getSharedDataParamOpts.SupportedFeatures = optional.NewString(supportedFeatures) - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") - sharedDataResp, res, err := clientAPI.RetrievalOfSharedDataApi.GetSharedData(context.Background(), sharedDataIds, + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } + sharedDataResp, res, err := clientAPI.RetrievalOfSharedDataApi.GetSharedData(ctx, sharedDataIds, &getSharedDataParamOpts) if err != nil { if res == nil { @@ -621,9 +650,12 @@ func getSmDataProcedure(supi string, plmnID string, Dnn string, Snssai string, s var querySmDataParamOpts Nudr.QuerySmDataParamOpts querySmDataParamOpts.SingleNssai = optional.NewInterface(Snssai) - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } sessionManagementSubscriptionDataResp, res, err := clientAPI.SessionManagementSubscriptionDataApi. - QuerySmData(context.Background(), supi, plmnID, &querySmDataParamOpts) + QuerySmData(ctx, supi, plmnID, &querySmDataParamOpts) if err != nil { if res == nil { logger.SdmLog.Warnln(err) @@ -732,9 +764,12 @@ func getNssaiProcedure(supi string, plmnID string, supportedFeatures string) ( return nil, openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } accessAndMobilitySubscriptionDataResp, res, err := clientAPI.AccessAndMobilitySubscriptionDataDocumentApi. - QueryAmData(context.Background(), supi, plmnID, &queryAmDataParamOpts) + QueryAmData(ctx, supi, plmnID, &queryAmDataParamOpts) if err != nil { if res == nil { logger.SdmLog.Warnln(err) @@ -821,9 +856,12 @@ func getSmfSelectDataProcedure(supi string, plmnID string, supportedFeatures str udm_context.Getself().CreateSmfSelectionSubsDataforUe(supi, body) - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } smfSelectionSubscriptionDataResp, res, err := clientAPI.SMFSelectionSubscriptionDataDocumentApi. - QuerySmfSelectData(context.Background(), supi, plmnID, &querySmfSelectDataParamOpts) + QuerySmfSelectData(ctx, supi, plmnID, &querySmfSelectDataParamOpts) if err != nil { if res == nil { logger.SdmLog.Warnln(err) @@ -838,7 +876,7 @@ func getSmfSelectDataProcedure(supi string, plmnID string, supportedFeatures str } return nil, problemDetails } - return + return nil, nil } defer func() { if rspCloseErr := res.Body.Close(); rspCloseErr != nil { @@ -891,9 +929,12 @@ func subscribeToSharedDataProcedure(sdmSubscription *models.SdmSubscription) ( cfg := Nudm_SubscriberDataManagement.NewConfiguration() udmClientAPI := Nudm_SubscriberDataManagement.NewAPIClient(cfg) - // TODO: [OAUTH2] should call GetTokenCtx("nudm-sdm", "UDM") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, nil, pd + } sdmSubscriptionResp, res, err := udmClientAPI.SubscriptionCreationForSharedDataApi.SubscribeToSharedData( - context.Background(), *sdmSubscription) + ctx, *sdmSubscription) if err != nil { if res == nil { logger.SdmLog.Warnln(err) @@ -968,9 +1009,13 @@ func subscribeProcedure(sdmSubscription *models.SdmSubscription, supi string) ( if err != nil { return nil, nil, openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, nil, pd + } sdmSubscriptionResp, res, err := clientAPI.SDMSubscriptionsCollectionApi.CreateSdmSubscriptions( - context.Background(), supi, *sdmSubscription) + ctx, supi, *sdmSubscription) if err != nil { if res == nil { logger.SdmLog.Warnln(err) @@ -1038,9 +1083,12 @@ func unsubscribeForSharedDataProcedure(subscriptionID string) *models.ProblemDet cfg := Nudm_SubscriberDataManagement.NewConfiguration() udmClientAPI := Nudm_SubscriberDataManagement.NewAPIClient(cfg) - // TODO: [OAUTH2] should call GetTokenCtx("nudm-sdm", "UDM") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return pd + } res, err := udmClientAPI.SubscriptionDeletionForSharedDataApi.UnsubscribeForSharedData( - context.Background(), subscriptionID) + ctx, subscriptionID) if err != nil { if res == nil { logger.SdmLog.Warnln(err) @@ -1099,8 +1147,11 @@ func unsubscribeProcedure(supi string, subscriptionID string) *models.ProblemDet return openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") - res, err := clientAPI.SDMSubscriptionDocumentApi.RemovesdmSubscriptions(context.Background(), supi, subscriptionID) + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return pd + } + res, err := clientAPI.SDMSubscriptionDocumentApi.RemovesdmSubscriptions(ctx, supi, subscriptionID) if err != nil { if res == nil { logger.SdmLog.Warnln(err) @@ -1173,9 +1224,13 @@ func modifyProcedure(sdmSubsModification *models.SdmSubsModification, supi strin body := Nudr.UpdatesdmsubscriptionsParamOpts{ SdmSubscription: optional.NewInterface(sdmSubscription), } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } res, err := clientAPI.SDMSubscriptionDocumentApi.Updatesdmsubscriptions( - context.Background(), supi, subscriptionID, &body) + ctx, supi, subscriptionID, &body) if err != nil { if res == nil { logger.SdmLog.Warnln(err) @@ -1250,9 +1305,12 @@ func modifyForSharedDataProcedure(sdmSubsModification *models.SdmSubsModificatio SdmSubscription: optional.NewInterface(sdmSubs), } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } res, err := clientAPI.SDMSubscriptionDocumentApi.Updatesdmsubscriptions( - context.Background(), supi, subscriptionID, &body) + ctx, supi, subscriptionID, &body) if err != nil { if res == nil { logger.SdmLog.Warnln(err) @@ -1323,9 +1381,12 @@ func getTraceDataProcedure(supi string, plmnID string) ( udm_context.Getself().CreateTraceDataforUe(supi, body) - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } traceDataRes, res, err := clientAPI.TraceDataDocumentApi.QueryTraceData( - context.Background(), supi, plmnID, &queryTraceDataParamOpts) + ctx, supi, plmnID, &queryTraceDataParamOpts) if err != nil { if res == nil { logger.SdmLog.Warnln(err) @@ -1408,9 +1469,12 @@ func getUeContextInSmfDataProcedure(supi string, supportedFeatures string) ( pduSessionMap := make(map[string]models.PduSession) udm_context.Getself().CreateUeContextInSmfDataforUe(supi, body) - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } pdusess, res, err := clientAPI.SMFRegistrationsCollectionApi.QuerySmfRegList( - context.Background(), supi, &querySmfRegListParamOpts) + ctx, supi, &querySmfRegListParamOpts) if err != nil { if res == nil { logger.SdmLog.Infoln(err) diff --git a/internal/sbi/producer/ue_context_management.go b/internal/sbi/producer/ue_context_management.go index 540120d..54a4907 100644 --- a/internal/sbi/producer/ue_context_management.go +++ b/internal/sbi/producer/ue_context_management.go @@ -1,7 +1,6 @@ package producer import ( - "context" "fmt" "net/http" "strconv" @@ -15,6 +14,7 @@ import ( udm_context "github.com/free5gc/udm/internal/context" "github.com/free5gc/udm/internal/logger" "github.com/free5gc/udm/internal/sbi/consumer" + udm_consumer "github.com/free5gc/udm/internal/sbi/consumer" "github.com/free5gc/udm/internal/sbi/producer/callback" "github.com/free5gc/util/httpwrapper" ) @@ -110,9 +110,12 @@ func GetAmf3gppAccessProcedure(ueID string, supportedFeatures string) ( return nil, openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } amf3GppAccessRegistration, resp, err := clientAPI.AMF3GPPAccessRegistrationDocumentApi. - QueryAmfContext3gpp(context.Background(), ueID, &queryAmfContext3gppParamOpts) + QueryAmfContext3gpp(ctx, ueID, &queryAmfContext3gppParamOpts) if err != nil { problemDetails = &models.ProblemDetails{ Status: int32(resp.StatusCode), @@ -166,9 +169,12 @@ func GetAmfNon3gppAccessProcedure(queryAmfContextNon3gppParamOpts Nudr_DataRepos return nil, openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, pd + } amfNon3GppAccessRegistration, resp, err := clientAPI.AMFNon3GPPAccessRegistrationDocumentApi. - QueryAmfContextNon3gpp(context.Background(), ueID, &queryAmfContextNon3gppParamOpts) + QueryAmfContextNon3gpp(ctx, ueID, &queryAmfContextNon3gppParamOpts) if err != nil { problemDetails = &models.ProblemDetails{ Status: int32(resp.StatusCode), @@ -235,8 +241,12 @@ func RegistrationAmf3gppAccessProcedure(registerRequest models.Amf3GppAccessRegi var createAmfContext3gppParamOpts Nudr_DataRepository.CreateAmfContext3gppParamOpts optInterface := optional.NewInterface(registerRequest) createAmfContext3gppParamOpts.Amf3GppAccessRegistration = optInterface - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") - resp, err := clientAPI.AMF3GPPAccessRegistrationDocumentApi.CreateAmfContext3gpp(context.Background(), + + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, nil, pd + } + resp, err := clientAPI.AMF3GPPAccessRegistrationDocumentApi.CreateAmfContext3gpp(ctx, ueID, &createAmfContext3gppParamOpts) if err != nil { logger.UecmLog.Errorln("CreateAmfContext3gpp error : ", err) @@ -330,9 +340,13 @@ func RegisterAmfNon3gppAccessProcedure(registerRequest models.AmfNon3GppAccessRe var createAmfContextNon3gppParamOpts Nudr_DataRepository.CreateAmfContextNon3gppParamOpts optInterface := optional.NewInterface(registerRequest) createAmfContextNon3gppParamOpts.AmfNon3GppAccessRegistration = optInterface - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") + + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, nil, pd + } resp, err := clientAPI.AMFNon3GPPAccessRegistrationDocumentApi.CreateAmfContextNon3gpp( - context.Background(), ueID, &createAmfContextNon3gppParamOpts) + ctx, ueID, &createAmfContextNon3gppParamOpts) if err != nil { problemDetails = &models.ProblemDetails{ Status: int32(resp.StatusCode), @@ -458,8 +472,11 @@ func UpdateAmf3gppAccessProcedure(request models.Amf3GppAccessRegistrationModifi return openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") - resp, err := clientAPI.AMF3GPPAccessRegistrationDocumentApi.AmfContext3gpp(context.Background(), ueID, + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return pd + } + resp, err := clientAPI.AMF3GPPAccessRegistrationDocumentApi.AmfContext3gpp(ctx, ueID, patchItemReqArray) if err != nil { problemDetails = &models.ProblemDetails{ @@ -530,6 +547,7 @@ func UpdateAmfNon3gppAccessProcedure(request models.AmfNon3GppAccessRegistration Status: http.StatusForbidden, Cause: "INVALID_GUAMI", } + return problemDetails } var patchItemTmp models.PatchItem @@ -576,8 +594,11 @@ func UpdateAmfNon3gppAccessProcedure(request models.AmfNon3GppAccessRegistration return openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") - resp, err := clientAPI.AMFNon3GPPAccessRegistrationDocumentApi.AmfContextNon3gpp(context.Background(), + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return pd + } + resp, err := clientAPI.AMFNon3GPPAccessRegistrationDocumentApi.AmfContextNon3gpp(ctx, ueID, patchItemReqArray) if err != nil { problemDetails = &models.ProblemDetails{ @@ -621,8 +642,11 @@ func DeregistrationSmfRegistrationsProcedure(ueID string, pduSessionID string) ( return openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") - resp, err := clientAPI.SMFRegistrationDocumentApi.DeleteSmfContext(context.Background(), ueID, pduSessionID) + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return pd + } + resp, err := clientAPI.SMFRegistrationDocumentApi.DeleteSmfContext(ctx, ueID, pduSessionID) if err != nil { problemDetails = &models.ProblemDetails{ Status: int32(resp.StatusCode), @@ -690,8 +714,11 @@ func RegistrationSmfRegistrationsProcedure(request *models.SmfRegistration, ueID return nil, nil, openapi.ProblemDetailsSystemFailure(err.Error()) } - // TODO: [OAUTH2] should call GetTokenCtx("nudr-dr", "UDR") - resp, err := clientAPI.SMFRegistrationDocumentApi.CreateSmfContextNon3gpp(context.Background(), ueID, + ctx, pd, err := udm_consumer.GetTokenCtx("nudr-dr", "UDR") + if err != nil { + return nil, nil, pd + } + resp, err := clientAPI.SMFRegistrationDocumentApi.CreateSmfContextNon3gpp(ctx, ueID, pduID32, &createSmfContextNon3gppParamOpts) if err != nil { problemDetails.Cause = err.(openapi.GenericOpenAPIError).Model().(models.ProblemDetails).Cause diff --git a/internal/util/nf_authorization.go b/internal/util/nf_authorization.go index 496e1ea..2b2460e 100644 --- a/internal/util/nf_authorization.go +++ b/internal/util/nf_authorization.go @@ -3,25 +3,21 @@ package util import ( "net/http" - "github.com/free5gc/openapi" - "github.com/free5gc/udm/pkg/factory" "github.com/gin-gonic/gin" + + "github.com/free5gc/openapi/oauth" + "github.com/free5gc/udm/pkg/factory" ) // This function would check the OAuth2 token, and the requestNF is in ServiceAllowNfType func AuthorizationCheck(c *gin.Context, serviceName string) error { if factory.UdmConfig.GetOAuth() { - oauth_err := openapi.VerifyOAuth(c.Request.Header.Get("Authorization"), serviceName, + oauth_err := oauth.VerifyOAuth(c.Request.Header.Get("Authorization"), serviceName, factory.UdmConfig.GetNrfCertPemPath()) if oauth_err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": oauth_err.Error()}) return oauth_err } } - allowNf_err := factory.UdmConfig.VerifyServiceAllowType(c.Request.Header.Get("requestNF"), serviceName) - if allowNf_err != nil { - c.JSON(http.StatusUnauthorized, gin.H{"error": allowNf_err.Error()}) - return allowNf_err - } return nil } diff --git a/pkg/factory/config.go b/pkg/factory/config.go index e7ab25c..56dc270 100644 --- a/pkg/factory/config.go +++ b/pkg/factory/config.go @@ -129,31 +129,6 @@ func (c *Configuration) validate() (bool, error) { return result, err } -func (c *Config) VerifyServiceAllowType(nfTypeName string, serviceName string) error { - c.RLock() - defer c.RUnlock() - - serviceFound := false - for _, service := range c.Configuration.ServiceList { - if service.ServiceName == serviceName { - serviceFound = true - for _, allowNf := range service.AllowedNfTypes { - if nfTypeName == "All" { - return nil - } - if nfTypeName == allowNf { - return nil - } - } - break - } - } - if serviceFound { - return fmt.Errorf("Not allow NF Type: %+v", nfTypeName) - } - return fmt.Errorf("ServiceName not found: %+v", serviceName) -} - func (c *Config) GetNrfCertPemPath() string { c.RLock() defer c.RUnlock()