diff --git a/go.mod b/go.mod index dcfca1c..003e6f7 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( github.com/google/uuid v1.3.0 github.com/pkg/errors v0.9.1 github.com/sirupsen/logrus v1.9.3 + github.com/stretchr/testify v1.9.0 github.com/urfave/cli v1.22.5 go.uber.org/mock v0.4.0 gopkg.in/yaml.v2 v2.4.0 @@ -21,6 +22,7 @@ require ( github.com/bytedance/sonic v1.9.1 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gin-contrib/sse v0.1.0 // indirect @@ -41,6 +43,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/russross/blackfriday/v2 v2.0.1 // indirect github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect github.com/tim-ywliu/nested-logrus-formatter v1.3.2 // indirect diff --git a/internal/context/ausf_context_init.go b/internal/context/ausf_context_init.go index 80d7591..eaaa84c 100644 --- a/internal/context/ausf_context_init.go +++ b/internal/context/ausf_context_init.go @@ -1,9 +1,11 @@ package context import ( + "context" "fmt" + "net" + "net/netip" "os" - "strconv" "github.com/google/uuid" @@ -23,36 +25,24 @@ func InitAusfContext(context *AUSFContext) { context.GroupID = configuration.GroupId context.NrfUri = configuration.NrfUri context.NrfCertPem = configuration.NrfCertPem - context.UriScheme = models.UriScheme(configuration.Sbi.Scheme) // default uri scheme - context.RegisterIPv4 = factory.AusfSbiDefaultIPv4 // default localhost - context.SBIPort = factory.AusfSbiDefaultPort // default port - if sbi != nil { - if sbi.RegisterIPv4 != "" { - context.RegisterIPv4 = sbi.RegisterIPv4 - } - if sbi.Port != 0 { - context.SBIPort = sbi.Port - } - - if sbi.Scheme == "https" { - context.UriScheme = models.UriScheme_HTTPS - } else { - context.UriScheme = models.UriScheme_HTTP - } - - context.BindingIPv4 = os.Getenv(sbi.BindingIPv4) - if context.BindingIPv4 != "" { - logger.InitLog.Info("Parsing ServerIPv4 address from ENV Variable.") - } else { - context.BindingIPv4 = sbi.BindingIPv4 - if context.BindingIPv4 == "" { - logger.InitLog.Warn("Error parsing ServerIPv4 address as string. Using the 0.0.0.0 address as default.") - context.BindingIPv4 = "0.0.0.0" - } - } + + context.SBIPort = sbi.Port + context.UriScheme = models.UriScheme(sbi.Scheme) + + if bindingIP := os.Getenv(sbi.BindingIP); bindingIP != "" { + logger.UtilLog.Info("Parsing BindingIP address from ENV Variable.") + sbi.BindingIP = bindingIP } + if registerIP := os.Getenv(sbi.RegisterIP); registerIP != "" { + logger.UtilLog.Info("Parsing RegisterIP address from ENV Variable.") + sbi.RegisterIP = registerIP + } + context.BindingIP = resolveIP(sbi.BindingIP) + context.RegisterIP = resolveIP(sbi.RegisterIP) - context.Url = string(context.UriScheme) + "://" + context.RegisterIPv4 + ":" + strconv.Itoa(context.SBIPort) + addr := context.RegisterIP + port := uint16(context.SBIPort) + context.Url = string(context.UriScheme) + "://" + netip.AddrPortFrom(addr, port).String() context.PlmnList = append(context.PlmnList, configuration.PlmnSupportList...) // context.NfService @@ -63,6 +53,18 @@ func InitAusfContext(context *AUSFContext) { context.EapAkaSupiImsiPrefix = configuration.EapAkaSupiImsiPrefix } +func resolveIP(ip string) netip.Addr { + resolvedIPs, err := net.DefaultResolver.LookupNetIP(context.Background(), "ip", ip) + if err != nil { + logger.InitLog.Errorf("Lookup failed with %s: %+v", ip, err) + } + resolvedIP := resolvedIPs[0].Unmap() + if resolvedIP := resolvedIP.String(); resolvedIP != ip { + logger.UtilLog.Infof("Lookup revolved %s into %s", ip, resolvedIP) + } + return resolvedIP +} + func AddNfServices( serviceMap *map[models.ServiceName]models.NrfNfManagementNfService, config *factory.Config, context *AUSFContext, ) { @@ -76,7 +78,11 @@ func AddNfServices( nfService.ServiceName = models.ServiceName_NAUSF_AUTH var ipEndPoint models.IpEndPoint - ipEndPoint.Ipv4Address = context.RegisterIPv4 + if context.RegisterIP.Is6() { + ipEndPoint.Ipv4Address = context.RegisterIP.String() + } else if context.RegisterIP.Is4() { + ipEndPoint.Ipv6Address = context.RegisterIP.String() + } ipEndPoint.Port = int32(context.SBIPort) ipEndPoints = append(ipEndPoints, ipEndPoint) diff --git a/internal/context/context.go b/internal/context/context.go index ad9a08d..e82a458 100644 --- a/internal/context/context.go +++ b/internal/context/context.go @@ -2,6 +2,7 @@ package context import ( "context" + "net/netip" "regexp" "sync" @@ -16,8 +17,8 @@ type AUSFContext struct { NfId string GroupID string SBIPort int - RegisterIPv4 string - BindingIPv4 string + RegisterIP netip.Addr // IP register to NRF + BindingIP netip.Addr Url string UriScheme models.UriScheme NrfUri string diff --git a/internal/context/context_test.go b/internal/context/context_test.go new file mode 100644 index 0000000..e3d9658 --- /dev/null +++ b/internal/context/context_test.go @@ -0,0 +1,337 @@ +package context + +import ( + "errors" + "net/netip" + "os" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/free5gc/ausf/pkg/factory" + "github.com/free5gc/openapi/models" +) + +func createConfigFile(t *testing.T, postContent []byte) *os.File { + content := []byte(`info: + version: "1.0.4" + +logger: + level: debug +`) + + configFile, err := os.CreateTemp("", "") + if err != nil { + t.Errorf("can't create temp file: %+v", err) + } + + if _, err := configFile.Write(content); err != nil { + t.Errorf("can't write content of temp file: %+v", err) + } + if _, err := configFile.Write(postContent); err != nil { + t.Errorf("can't write content of temp file: %+v", err) + } + if err := configFile.Close(); err != nil { + t.Fatal(err) + } + return configFile +} + +func TestInitAusfContextWithConfigIPv6(t *testing.T) { + postContent := []byte(`configuration: + serviceNameList: + - nausf-auth + plmnSupportList: + - mcc: 208 + mnc: 93 + sbi: + scheme: http + registerIP: "2001:db8::1:0:0:13" + bindingIP: "2001:db8::1:0:0:13" + port: 8313 + nrfUri: http://127.0.0.10:8000`) + + configFile := createConfigFile(t, postContent) + + // Test the initialization with the config file + cfg, err := factory.ReadConfig(configFile.Name()) + if err != nil { + t.Errorf("invalid read config: %+v %+v", err, cfg) + } + factory.AusfConfig = cfg + + GetSelf().NfService = make(map[models.ServiceName]models.NrfNfManagementNfService) + InitAusfContext(GetSelf()) + + assert.Equal(t, ausfContext.SBIPort, 8313) + assert.Equal(t, ausfContext.RegisterIP.String(), "2001:db8::1:0:0:13") + assert.Equal(t, ausfContext.BindingIP.String(), "2001:db8::1:0:0:13") + assert.Equal(t, ausfContext.UriScheme, models.UriScheme("http")) + + // Close the config file + t.Cleanup(func() { + if err := os.RemoveAll(configFile.Name()); err != nil { + t.Fatal(err) + } + }) +} + +func TestInitAusfContextWithConfigIPv4(t *testing.T) { + postContent := []byte(`configuration: + serviceNameList: + - nausf-auth + plmnSupportList: + - mcc: 208 + mnc: 93 + sbi: + scheme: http + registerIP: "127.0.0.13" + bindingIP: "127.0.0.13" + port: 8131 + nrfUri: http://127.0.0.10:8000`) + + configFile := createConfigFile(t, postContent) + + // Test the initialization with the config file + cfg, err := factory.ReadConfig(configFile.Name()) + if err != nil { + t.Errorf("invalid read config: %+v %+v", err, cfg) + } + factory.AusfConfig = cfg + + GetSelf().NfService = make(map[models.ServiceName]models.NrfNfManagementNfService) + InitAusfContext(GetSelf()) + + assert.Equal(t, ausfContext.SBIPort, 8131) + assert.Equal(t, ausfContext.RegisterIP.String(), "127.0.0.13") + assert.Equal(t, ausfContext.BindingIP.String(), "127.0.0.13") + assert.Equal(t, ausfContext.UriScheme, models.UriScheme("http")) + + // Close the config file + t.Cleanup(func() { + if err := os.RemoveAll(configFile.Name()); err != nil { + t.Fatal(err) + } + }) +} + +func TestInitAusfContextWithConfigDeprecated(t *testing.T) { + postContent := []byte(`configuration: + serviceNameList: + - nausf-auth + plmnSupportList: + - mcc: 208 + mnc: 93 + sbi: + scheme: http + registerIPv4: "127.0.0.30" + bindingIPv4: "127.0.0.30" + port: 8003 + nrfUri: http://127.0.0.10:8000`) + + configFile := createConfigFile(t, postContent) + + // Test the initialization with the config file + cfg, err := factory.ReadConfig(configFile.Name()) + if err != nil { + t.Errorf("invalid read config: %+v %+v", err, cfg) + } + factory.AusfConfig = cfg + + GetSelf().NfService = make(map[models.ServiceName]models.NrfNfManagementNfService) + InitAusfContext(GetSelf()) + + assert.Equal(t, ausfContext.SBIPort, 8003) + assert.Equal(t, ausfContext.RegisterIP.String(), "127.0.0.30") + assert.Equal(t, ausfContext.BindingIP.String(), "127.0.0.30") + assert.Equal(t, ausfContext.UriScheme, models.UriScheme("http")) + + // Close the config file + t.Cleanup(func() { + if err := os.RemoveAll(configFile.Name()); err != nil { + t.Fatal(err) + } + }) +} + +func TestInitAusfContextWithConfigEmptySBI(t *testing.T) { + postContent := []byte(`configuration: + serviceNameList: + - nausf-auth + plmnSupportList: + - mcc: 208 + mnc: 93 + nrfUri: http://127.0.0.10:8000`) + + configFile := createConfigFile(t, postContent) + + // Test the initialization with the config file fails + _, err := factory.ReadConfig(configFile.Name()) + assert.Equal(t, err, errors.New("Config validate Error")) + + // Close the config file + t.Cleanup(func() { + if err := os.RemoveAll(configFile.Name()); err != nil { + t.Fatal(err) + } + }) +} + +func TestInitAusfContextWithConfigMissingRegisterIP(t *testing.T) { + postContent := []byte(`configuration: + serviceNameList: + - nausf-auth + plmnSupportList: + - mcc: 208 + mnc: 93 + sbi: + bindingIP: "2001:db8::1:0:0:130" + serviceNameList: + - nudm-sdm + nrfUri: http://127.0.0.10:8000`) + + configFile := createConfigFile(t, postContent) + + // Test the initialization with the config file + cfg, err := factory.ReadConfig(configFile.Name()) + if err != nil { + t.Errorf("invalid read config: %+v %+v", err, cfg) + } + factory.AusfConfig = cfg + + GetSelf().NfService = make(map[models.ServiceName]models.NrfNfManagementNfService) + InitAusfContext(GetSelf()) + + assert.Equal(t, ausfContext.SBIPort, 8000) + assert.Equal(t, ausfContext.BindingIP.String(), "2001:db8::1:0:0:130") + assert.Equal(t, ausfContext.RegisterIP.String(), "2001:db8::1:0:0:130") + assert.Equal(t, ausfContext.UriScheme, models.UriScheme("https")) + + // Close the config file + t.Cleanup(func() { + if err := os.RemoveAll(configFile.Name()); err != nil { + t.Fatal(err) + } + }) +} + +func TestInitAusfContextWithConfigMissingBindingIP(t *testing.T) { + postContent := []byte(`configuration: + serviceNameList: + - nausf-auth + plmnSupportList: + - mcc: 208 + mnc: 93 + sbi: + registerIP: "2001:db8::1:0:0:131" + serviceNameList: + - nudm-sdm + nrfUri: http://127.0.0.10:8000`) + + configFile := createConfigFile(t, postContent) + + // Test the initialization with the config file + cfg, err := factory.ReadConfig(configFile.Name()) + if err != nil { + t.Errorf("invalid read config: %+v %+v", err, cfg) + } + factory.AusfConfig = cfg + + GetSelf().NfService = make(map[models.ServiceName]models.NrfNfManagementNfService) + InitAusfContext(GetSelf()) + + assert.Equal(t, ausfContext.SBIPort, 8000) + assert.Equal(t, ausfContext.BindingIP.String(), "2001:db8::1:0:0:131") + assert.Equal(t, ausfContext.RegisterIP.String(), "2001:db8::1:0:0:131") + assert.Equal(t, ausfContext.UriScheme, models.UriScheme("https")) + + // Close the config file + t.Cleanup(func() { + if err := os.RemoveAll(configFile.Name()); err != nil { + t.Fatal(err) + } + }) +} + +func TestInitAusfContextWithConfigIPv6FromEnv(t *testing.T) { + postContent := []byte(`configuration: + serviceNameList: + - nudm-sdm + plmnSupportList: + - mcc: 208 + mnc: 93 + sbi: + scheme: http + registerIP: "MY_REGISTER_IP" + bindingIP: "MY_BINDING_IP" + port: 8313 + nrfUri: http://127.0.0.10:8000`) + + configFile := createConfigFile(t, postContent) + + if err := os.Setenv("MY_REGISTER_IP", "2001:db8::1:0:0:130"); err != nil { + t.Errorf("Can't set MY_BINDING_IP variable environnement: %+v", err) + } + if err := os.Setenv("MY_BINDING_IP", "2001:db8::1:0:0:130"); err != nil { + t.Errorf("Can't set MY_BINDING_IP variable environnement: %+v", err) + } + + // Test the initialization with the config file + cfg, err := factory.ReadConfig(configFile.Name()) + if err != nil { + t.Errorf("invalid read config: %+v %+v", err, cfg) + } + factory.AusfConfig = cfg + + GetSelf().NfService = make(map[models.ServiceName]models.NrfNfManagementNfService) + InitAusfContext(GetSelf()) + + assert.Equal(t, ausfContext.SBIPort, 8313) + assert.Equal(t, ausfContext.RegisterIP.String(), "2001:db8::1:0:0:130") + assert.Equal(t, ausfContext.BindingIP.String(), "2001:db8::1:0:0:130") + assert.Equal(t, ausfContext.UriScheme, models.UriScheme("http")) + + // Close the config file + t.Cleanup(func() { + if err := os.RemoveAll(configFile.Name()); err != nil { + t.Fatal(err) + } + }) +} + +func TestResolveIPLocalhost(t *testing.T) { + expectedAddr, err := netip.ParseAddr("::1") + if err != nil { + t.Errorf("invalid expected IP: %+v", expectedAddr) + } + + addr := resolveIP("localhost") + if addr != expectedAddr { + t.Errorf("invalid IP: %+v", addr) + } + assert.Equal(t, addr, expectedAddr) +} + +func TestResolveIPv4(t *testing.T) { + expectedAddr, err := netip.ParseAddr("127.0.0.1") + if err != nil { + t.Errorf("invalid expected IP: %+v", expectedAddr) + } + + addr := resolveIP("127.0.0.1") + if addr != expectedAddr { + t.Errorf("invalid IP: %+v", addr) + } +} + +func TestResolveIPv6(t *testing.T) { + expectedAddr, err := netip.ParseAddr("2001:db8::1:0:0:1") + if err != nil { + t.Errorf("invalid expected IP: %+v", expectedAddr) + } + + addr := resolveIP("2001:db8::1:0:0:1") + if addr != expectedAddr { + t.Errorf("invalid IP: %+v", addr) + } +} diff --git a/internal/sbi/consumer/nrf_service.go b/internal/sbi/consumer/nrf_service.go index 8382703..01f7334 100644 --- a/internal/sbi/consumer/nrf_service.go +++ b/internal/sbi/consumer/nrf_service.go @@ -2,7 +2,7 @@ package consumer import ( "context" - "strconv" + "net/netip" "strings" "sync" "time" @@ -190,7 +190,11 @@ func (s *nnrfService) buildNfProfile(ausfContext *ausf_context.AUSFContext) ( profile.NfInstanceId = ausfContext.NfId profile.NfType = models.NrfNfManagementNfType_AUSF profile.NfStatus = models.NrfNfManagementNfStatus_REGISTERED - profile.Ipv4Addresses = append(profile.Ipv4Addresses, ausfContext.RegisterIPv4) + if ausfContext.RegisterIP.Is6() { + profile.Ipv6Addresses = append(profile.Ipv4Addresses, ausfContext.RegisterIP.String()) + } else if ausfContext.RegisterIP.Is4() { + profile.Ipv4Addresses = append(profile.Ipv4Addresses, ausfContext.RegisterIP.String()) + } services := []models.NrfNfManagementNfService{} for _, nfService := range ausfContext.NfService { services = append(services, nfService) @@ -210,7 +214,7 @@ func (s *nnrfService) buildNfProfile(ausfContext *ausf_context.AUSFContext) ( // }, // }, } - return + return profile, nil } func (s *nnrfService) GetUdmUrl(nrfUri string) string { @@ -232,10 +236,16 @@ func (s *nnrfService) GetUdmUrl(nrfUri string) string { logger.ConsumerLog.Errorln("[Search UDM UEAU] ", err.Error(), "use defalt udmUrl", udmUrl) } else if len(res.NfInstances) > 0 { udmInstance := res.NfInstances[0] - if len(udmInstance.Ipv4Addresses) > 0 && udmInstance.NfServices != nil { - ueauService := udmInstance.NfServices[0] - ueauEndPoint := ueauService.IpEndPoints[0] - udmUrl = string(ueauService.Scheme) + "://" + ueauEndPoint.Ipv4Address + ":" + strconv.Itoa(int(ueauEndPoint.Port)) + ueauService := udmInstance.NfServices[0] + ueauEndPoint := ueauService.IpEndPoints[0] + if len(udmInstance.Ipv6Addresses) > 0 && udmInstance.NfServices != nil { + addr := netip.MustParseAddr(ueauEndPoint.Ipv6Address) + bindAddr := netip.AddrPortFrom(addr, uint16(ueauEndPoint.Port)) + udmUrl = string(ueauService.Scheme) + "://" + bindAddr.String() + } else if len(udmInstance.Ipv4Addresses) > 0 && udmInstance.NfServices != nil { + addr := netip.MustParseAddr(ueauEndPoint.Ipv4Address) + bindAddr := netip.AddrPortFrom(addr, uint16(ueauEndPoint.Port)) + udmUrl = string(ueauService.Scheme) + "://" + bindAddr.String() } } else { logger.ConsumerLog.Errorln("[Search UDM UEAU] len(NfInstances) = 0") diff --git a/internal/sbi/server.go b/internal/sbi/server.go index 46a5d73..600d8b7 100644 --- a/internal/sbi/server.go +++ b/internal/sbi/server.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "net/http" + "net/netip" "runtime/debug" "sync" "time" @@ -45,8 +46,10 @@ func NewServer(ausf ServerAusf, tlsKeyLogPath string) (*Server, error) { s.router = newRouter(s) - cfg := s.Config() - bindAddr := cfg.GetSbiBindingAddr() + port := ausf.Context().SBIPort + addr := ausf.Context().BindingIP + bindAddr := netip.AddrPortFrom(addr, uint16(port)).String() + logger.SBILog.Infof("Binding addr: [%s]", bindAddr) var err error if s.httpServer, err = httpwrapper.NewHttp2Server(bindAddr, tlsKeyLogPath, s.router); err != nil { diff --git a/pkg/factory/config.go b/pkg/factory/config.go index e61b852..18c7b97 100644 --- a/pkg/factory/config.go +++ b/pkg/factory/config.go @@ -7,7 +7,6 @@ package factory import ( "errors" "fmt" - "os" "strconv" "sync" @@ -22,7 +21,7 @@ const ( AusfDefaultCertPemPath = "./cert/ausf.pem" AusfDefaultPrivateKeyPath = "./cert/ausf.key" AusfDefaultConfigPath = "./config/ausfcfg.yaml" - AusfSbiDefaultIPv4 = "127.0.0.9" + AusfSbiDefaultIP = "127.0.0.9" AusfSbiDefaultPort = 8000 AusfSbiDefaultScheme = "https" AusfDefaultNrfUri = "https://127.0.0.10:8000" @@ -50,7 +49,7 @@ func (c *Config) Validate() (bool, error) { } type Info struct { - Version string `yaml:"version,omitempty" valid:"required,in(1.0.3)"` + Version string `yaml:"version,omitempty" valid:"required,in(1.0.4)"` Description string `yaml:"description,omitempty" valid:"type(string)"` } @@ -72,9 +71,7 @@ type Logger struct { func (c *Configuration) validate() (bool, error) { if sbi := c.Sbi; sbi != nil { - if result, err := sbi.validate(); err != nil { - return result, err - } + return sbi.validate() } for index, serviceName := range c.ServiceNameList { @@ -106,17 +103,46 @@ func (c *Configuration) validate() (bool, error) { } type Sbi struct { - Scheme string `yaml:"scheme" valid:"scheme"` - RegisterIPv4 string `yaml:"registerIPv4,omitempty" valid:"host,required"` // IP that is registered at NRF. - BindingIPv4 string `yaml:"bindingIPv4,omitempty" valid:"host,required"` // IP used to run the server in the node. - Port int `yaml:"port,omitempty" valid:"port,required"` + Scheme string `yaml:"scheme" valid:"in(http|https),optional"` + RegisterIPv4 string `yaml:"registerIPv4,omitempty" valid:"host,optional"` // IP that is registered at NRF. + RegisterIP string `yaml:"registerIP,omitempty" valid:"host,optional"` // IP that is registered at NRF. + BindingIPv4 string `yaml:"bindingIPv4,omitempty" valid:"host,optional"` // IP used to run the server in the node. + BindingIP string `yaml:"bindingIP,omitempty" valid:"host,optional"` // IP used to run the server in the node. + Port int `yaml:"port,omitempty" valid:"port,optional"` Tls *Tls `yaml:"tls,omitempty" valid:"optional"` } func (s *Sbi) validate() (bool, error) { - govalidator.TagMap["scheme"] = govalidator.Validator(func(str string) bool { - return str == "https" || str == "http" - }) + // Set a default Schme if the Configuration does not provides one + if s.Scheme == "" { + s.Scheme = AusfSbiDefaultScheme + } + + // Set BindingIP/RegisterIP from deprecated BindingIPv4/RegisterIPv4 + if s.BindingIP == "" && s.BindingIPv4 != "" { + s.BindingIP = s.BindingIPv4 + } + if s.RegisterIP == "" && s.RegisterIPv4 != "" { + s.RegisterIP = s.RegisterIPv4 + } + + // Set a default BindingIP/RegisterIP if the Configuration does not provides them + if s.BindingIP == "" && s.RegisterIP == "" { + s.BindingIP = AusfSbiDefaultIP + s.RegisterIP = AusfSbiDefaultIP + } else { + // Complete any missing BindingIP/RegisterIP from RegisterIP/BindingIP + if s.BindingIP == "" { + s.BindingIP = s.RegisterIP + } else if s.RegisterIP == "" { + s.RegisterIP = s.BindingIP + } + } + + // Set a default Port if the Configuration does not provides one + if s.Port == 0 { + s.Port = AusfSbiDefaultPort + } if tls := s.Tls; tls != nil { if result, err := tls.validate(); err != nil { @@ -125,7 +151,7 @@ func (s *Sbi) validate() (bool, error) { } result, err := govalidator.ValidateStruct(s) - return result, appendInvalid(err) + return result, err } type Tls struct { @@ -237,29 +263,6 @@ func (c *Config) GetLogReportCaller() bool { return c.Logger.ReportCaller } -func (c *Config) GetSbiBindingAddr() string { - c.RLock() - defer c.RUnlock() - return c.GetSbiBindingIP() + ":" + strconv.Itoa(c.GetSbiPort()) -} - -func (c *Config) GetSbiBindingIP() string { - c.RLock() - defer c.RUnlock() - bindIP := "0.0.0.0" - if c.Configuration == nil || c.Configuration.Sbi == nil { - return bindIP - } - if c.Configuration.Sbi.BindingIPv4 != "" { - if bindIP = os.Getenv(c.Configuration.Sbi.BindingIPv4); bindIP != "" { - logger.CfgLog.Infof("Parsing ServerIPv4 [%s] from ENV Variable", bindIP) - } else { - bindIP = c.Configuration.Sbi.BindingIPv4 - } - } - return bindIP -} - func (c *Config) GetSbiPort() int { c.RLock() defer c.RUnlock() diff --git a/pkg/factory/factory.go b/pkg/factory/factory.go index fcbd12d..7b60532 100644 --- a/pkg/factory/factory.go +++ b/pkg/factory/factory.go @@ -22,7 +22,6 @@ func InitConfigFactory(f string, cfg *Config) error { // Use default config path f = AusfDefaultConfigPath } - if content, err := os.ReadFile(f); err != nil { return fmt.Errorf("[Factory] %+v", err) } else {