From 91bcdad0a349622fd65207f85e13c7a24460e31a Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" Date: Tue, 7 Nov 2023 09:32:40 +0000 Subject: [PATCH] Feature: Add Config ServiceList --- internal/sbi/consumer/nf_accesstoken.go | 16 +++++---- internal/sbi/consumer/nf_managemant.go | 6 ++-- pkg/factory/config.go | 45 +++++++++++++++++++++++-- 3 files changed, 55 insertions(+), 12 deletions(-) diff --git a/internal/sbi/consumer/nf_accesstoken.go b/internal/sbi/consumer/nf_accesstoken.go index e3f153a..a6311dc 100644 --- a/internal/sbi/consumer/nf_accesstoken.go +++ b/internal/sbi/consumer/nf_accesstoken.go @@ -4,21 +4,24 @@ import ( "context" "time" - udr_context "github.com/free5gc/udr/internal/context" - "github.com/free5gc/udr/internal/logger" - "github.com/free5gc/udr/pkg/factory" + "github.com/antihax/optional" + "golang.org/x/oauth2" "github.com/free5gc/openapi" + "github.com/free5gc/openapi/Nnrf_AccessToken" "github.com/free5gc/openapi/models" - - "github.com/antihax/optional" - "golang.org/x/oauth2" + udr_context "github.com/free5gc/udr/internal/context" + "github.com/free5gc/udr/internal/logger" + "github.com/free5gc/udr/pkg/factory" ) 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) if err != nil { return nil, pd, err } @@ -80,6 +83,7 @@ func sendAccTokenReq(scope, targetNF string) (oauth2.TokenSource, *models.Proble 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/consumer/nf_managemant.go b/internal/sbi/consumer/nf_managemant.go index ae23b4e..be3a2a5 100644 --- a/internal/sbi/consumer/nf_managemant.go +++ b/internal/sbi/consumer/nf_managemant.go @@ -121,7 +121,7 @@ func SendDeregisterNFInstance() (problemDetails *models.ProblemDetails, err erro res, err = client.NFInstanceIDDocumentApi.DeregisterNFInstance(ctx, udrSelf.NfId) if err == nil { - return + return problemDetails, nil } else if res != nil { defer func() { if rspCloseErr := res.Body.Close(); rspCloseErr != nil { @@ -130,12 +130,12 @@ func SendDeregisterNFInstance() (problemDetails *models.ProblemDetails, err erro }() if res.Status != err.Error() { - return + return nil, nil } problem := err.(openapi.GenericOpenAPIError).Model().(models.ProblemDetails) problemDetails = &problem } else { err = openapi.ReportError("server no response") } - return + return problemDetails, nil } diff --git a/pkg/factory/config.go b/pkg/factory/config.go index d466671..513a9bc 100644 --- a/pkg/factory/config.go +++ b/pkg/factory/config.go @@ -9,6 +9,7 @@ import ( "sync" "github.com/asaskevich/govalidator" + "github.com/pkg/errors" "github.com/free5gc/udr/internal/logger" ) @@ -54,10 +55,17 @@ const ( UDR_DEFAULT_PORT_INT = 8000 ) +type ServiceList struct { + ServiceName string `yaml:"serviceName" valid:"required"` + AllowedNfTypes []string `yaml:"allowedNfTypes,omitempty" valid:"required"` +} + 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"` + ServiceList []ServiceList `yaml:"serviceList" valid:"required"` + Mongodb *Mongodb `yaml:"mongodb" valid:"required"` + NrfUri string `yaml:"nrfUri" valid:"url,required"` + NrfCertPemPath string `yaml:"nrfCertPemPath" valid:"required"` } type Logger struct { @@ -84,6 +92,37 @@ type Sbi struct { OAuth bool `yaml:"oauth,omitempty" valid:"optional"` } +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 errors.Errorf("Not allow NF Type: %+v", nfTypeName) + } + return errors.Errorf("ServiceName not found: %+v", serviceName) +} + +func (c *Config) GetNrfCertPemPath() string { + c.RLock() + defer c.RUnlock() + return c.Configuration.NrfCertPemPath +} + func (c *Config) GetOAuth() bool { c.RLock() defer c.RUnlock()