diff --git a/pkg/inputunifi/input.go b/pkg/inputunifi/input.go index d24e7fa0..79dc7ce5 100644 --- a/pkg/inputunifi/input.go +++ b/pkg/inputunifi/input.go @@ -193,7 +193,8 @@ func (u *InputUnifi) checkSites(c *Controller) error { FIRST: for _, s := range c.Sites { for _, site := range sites { - if s == site.Name { + // Case-insensitive comparison for site names + if strings.EqualFold(s, site.Name) { keep = append(keep, s) continue FIRST diff --git a/pkg/inputunifi/interface.go b/pkg/inputunifi/interface.go index 48c683ec..4738b6d6 100644 --- a/pkg/inputunifi/interface.go +++ b/pkg/inputunifi/interface.go @@ -30,16 +30,7 @@ func (u *InputUnifi) Initialize(l poller.Logger) error { return nil } - if u.setDefaults(&u.Default); len(u.Controllers) == 0 && !u.Dynamic { - // If remote mode is enabled at config level, set it on default controller - if u.Remote && u.RemoteAPIKey != "" { - u.Default.Remote = true - u.Default.APIKey = u.RemoteAPIKey - } - u.Controllers = []*Controller{&u.Default} - } - - // Discover remote controllers if remote mode is enabled + // Discover remote controllers if remote mode is enabled at config level if u.Remote && u.RemoteAPIKey != "" { u.Logf("Remote API mode enabled, discovering controllers...") @@ -47,32 +38,37 @@ func (u *InputUnifi) Initialize(l poller.Logger) error { if err != nil { u.LogErrorf("Failed to discover remote controllers: %v", err) } else if len(discovered) > 0 { - // Merge discovered controllers with configured ones - u.Controllers = append(u.Controllers, discovered...) + // Replace controllers with discovered ones when using config-level remote mode + u.Controllers = discovered u.Logf("Discovered %d remote controller(s)", len(discovered)) } - } + } else { + // Only set default controller if not using config-level remote mode + if u.setDefaults(&u.Default); len(u.Controllers) == 0 && !u.Dynamic { + u.Controllers = []*Controller{&u.Default} + } - // Also check individual controllers for remote flag - for _, c := range u.Controllers { - if c.Remote && c.APIKey != "" && c.ConsoleID == "" { - // This controller has remote flag but no console ID, try to discover - discovered, err := u.discoverRemoteControllers(c.APIKey) - if err != nil { - u.LogErrorf("Failed to discover remote controllers for controller: %v", err) - continue - } - if len(discovered) > 0 { - // Replace this controller with discovered ones - // Remove the current one and add discovered - newControllers := []*Controller{} - for _, existing := range u.Controllers { - if existing != c { - newControllers = append(newControllers, existing) + // Check individual controllers for remote flag (per-controller remote mode) + for _, c := range u.Controllers { + if c.Remote && c.APIKey != "" && c.ConsoleID == "" { + // This controller has remote flag but no console ID, try to discover + discovered, err := u.discoverRemoteControllers(c.APIKey) + if err != nil { + u.LogErrorf("Failed to discover remote controllers for controller: %v", err) + continue + } + if len(discovered) > 0 { + // Replace this controller with discovered ones + // Remove the current one and add discovered + newControllers := []*Controller{} + for _, existing := range u.Controllers { + if existing != c { + newControllers = append(newControllers, existing) + } } + newControllers = append(newControllers, discovered...) + u.Controllers = newControllers } - newControllers = append(newControllers, discovered...) - u.Controllers = newControllers } } } diff --git a/pkg/inputunifi/remote.go b/pkg/inputunifi/remote.go index 96d33d1e..6b616f91 100644 --- a/pkg/inputunifi/remote.go +++ b/pkg/inputunifi/remote.go @@ -271,14 +271,58 @@ func (u *InputUnifi) discoverRemoteControllers(apiKey string) ([]*Controller, er URL: fmt.Sprintf("%s/v1/connector/consoles/%s", remoteAPIBaseURL, console.ID), } + // Ensure defaults are set before calling setControllerDefaults + u.setDefaults(&u.Default) + // Copy defaults controller = u.setControllerDefaults(controller) - // Set remote-specific defaults + // Set remote-specific defaults and ensure all boolean pointers are initialized t := true + f := false if controller.VerifySSL == nil { controller.VerifySSL = &t // Remote API should verify SSL } + // Ensure all boolean pointers are set (safety check) + if controller.HashPII == nil { + controller.HashPII = &f + } + if controller.DropPII == nil { + controller.DropPII = &f + } + if controller.SaveSites == nil { + controller.SaveSites = &t + } + if controller.SaveDPI == nil { + controller.SaveDPI = &f + } + if controller.SaveEvents == nil { + controller.SaveEvents = &f + } + if controller.SaveAlarms == nil { + controller.SaveAlarms = &f + } + if controller.SaveAnomal == nil { + controller.SaveAnomal = &f + } + if controller.SaveIDs == nil { + controller.SaveIDs = &f + } + if controller.SaveTraffic == nil { + controller.SaveTraffic = &f + } + if controller.SaveRogue == nil { + controller.SaveRogue = &f + } + if controller.SaveSyslog == nil { + controller.SaveSyslog = &f + } + if controller.SaveProtectLogs == nil { + controller.SaveProtectLogs = &f + } + if controller.ProtectThumbnails == nil { + controller.ProtectThumbnails = &f + } // Extract site names siteNames := make([]string, 0, len(sites)) @@ -292,13 +336,13 @@ func (u *InputUnifi) discoverRemoteControllers(apiKey string) ([]*Controller, er // as the default site name override. The console name is in reportedState.name // (consoleName was already set above in the loop) - // If we only have one site and it's "default", use the console name as override - if len(siteNames) == 1 && (siteNames[0] == "default" || siteNames[0] == "") && consoleName != "" { + // If we only have one site and it's "default" (case-insensitive), use the console name as override + if len(siteNames) == 1 && strings.EqualFold(siteNames[0], "default") && consoleName != "" { controller.DefaultSiteNameOverride = consoleName + // Set sites to "all" since we're overriding the default site name + controller.Sites = []string{"all"} u.LogDebugf("Using console name '%s' as default site name override for Cloud Gateway", consoleName) - } - - if len(siteNames) > 0 { + } else if len(siteNames) > 0 { controller.Sites = siteNames } else { controller.Sites = []string{"all"}