From e4dc3ca2e4a2baa9abeaa73166d976cf2e988389 Mon Sep 17 00:00:00 2001 From: Stavros Date: Sun, 14 Jun 2026 00:35:18 +0300 Subject: [PATCH] fix: don't use pointers in interfaces --- internal/bootstrap/service_bootstrap.go | 18 ++++++++++++++++-- internal/service/access_controls_service.go | 8 ++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/internal/bootstrap/service_bootstrap.go b/internal/bootstrap/service_bootstrap.go index 04a3210a..168a055a 100644 --- a/internal/bootstrap/service_bootstrap.go +++ b/internal/bootstrap/service_bootstrap.go @@ -15,11 +15,16 @@ func (app *BootstrapApp) setupServices() error { return fmt.Errorf("failed to setup policy engine: %w", err) } - err = app.dig.Provide(app.getLabelProvider) + labelProvider, err := app.getLabelProvider() + if err != nil { - return fmt.Errorf("failed to provide label provider: %w", err) + return fmt.Errorf("failed to get label provider: %w", err) } + err = app.dig.Provide(func() service.LabelProvider { + return labelProvider + }) + err = app.dig.Provide(service.NewLdapService) if err != nil { return fmt.Errorf("failed to provide ldap service: %w", err) @@ -107,6 +112,15 @@ func (app *BootstrapApp) getLabelProvider() (service.LabelProvider, error) { return nil, fmt.Errorf("failed to invoke kubernetes service: %w", err) } + // Kubernetes will fail to initialize with an error if it cannot connect to the cluster + // but just to be safe, we check if the service is nil and log a warning if it is + if app.services.kubernetesService == nil { + if app.config.LabelProvider == "kubernetes" { + app.log.App.Warn().Msg("Kubernetes label provider selected but Kubernetes is not available, will continue without it") + } + return nil, nil + } + return app.services.kubernetesService, nil } diff --git a/internal/service/access_controls_service.go b/internal/service/access_controls_service.go index 257a8304..3615cce1 100644 --- a/internal/service/access_controls_service.go +++ b/internal/service/access_controls_service.go @@ -15,7 +15,7 @@ type LabelProvider interface { type AccessControlsService struct { log *logger.Logger config *model.Config - labelProvider *LabelProvider + labelProvider LabelProvider } type AccessControlServiceInput struct { @@ -23,7 +23,7 @@ type AccessControlServiceInput struct { Log *logger.Logger Config *model.Config - LabelProvider *LabelProvider `optional:"true"` + LabelProvider LabelProvider `optional:"true"` } func NewAccessControlsService(i AccessControlServiceInput) *AccessControlsService { @@ -63,8 +63,8 @@ func (service *AccessControlsService) GetAccessControls(domain string) (*model.A } // If we have a label provider configured, try to get ACLs from it - if service.labelProvider != nil && *service.labelProvider != nil { - return (*service.labelProvider).GetLabels(domain) + if service.labelProvider != nil { + return service.labelProvider.GetLabels(domain) } // no labels