@@ -16,38 +16,21 @@ func (app *BootstrapApp) setupServices() error {
1616
1717 app .services .ldapService = ldapService
1818
19- useKubernetes := app .config .LabelProvider == "kubernetes" ||
20- (app .config .LabelProvider == "auto" && os .Getenv ("KUBERNETES_SERVICE_HOST" ) != "" )
19+ labelProvider , err := app .getLabelProvider ()
2120
22- var labelProvider service.LabelProvider
23-
24- if useKubernetes {
25- app .log .App .Debug ().Msg ("Using Kubernetes label provider" )
26-
27- kubernetesService , err := service .NewKubernetesService (app .log , app .ctx , & app .wg )
28-
29- if err != nil {
30- return fmt .Errorf ("failed to initialize kubernetes service: %w" , err )
31- }
21+ if err != nil {
22+ return fmt .Errorf ("failed to initialize label provider: %w" , err )
23+ }
3224
33- app .services .kubernetesService = kubernetesService
34- labelProvider = kubernetesService
35- } else {
36- app .log .App .Debug ().Msg ("Using Docker label provider" )
25+ accessControlsService := service .NewAccessControlsService (app .log , app .config , & labelProvider )
26+ app .services .accessControlService = accessControlsService
3727
38- dockerService , err := service . NewDockerService ( app .log , app . ctx , & app . wg )
28+ err = app .setupPolicyEngine ( )
3929
40- if err != nil {
41- return fmt .Errorf ("failed to initialize docker service: %w" , err )
42- }
43-
44- app .services .dockerService = dockerService
45- labelProvider = dockerService
30+ if err != nil {
31+ return fmt .Errorf ("failed to initialize policy engine: %w" , err )
4632 }
4733
48- accessControlsService := service .NewAccessControlsService (app .log , & labelProvider , app .config .Apps )
49- app .services .accessControlService = accessControlsService
50-
5134 oauthBrokerService := service .NewOAuthBrokerService (app .log , app .runtime .OAuthProviders , app .ctx )
5235 app .services .oauthBrokerService = oauthBrokerService
5336
@@ -64,3 +47,79 @@ func (app *BootstrapApp) setupServices() error {
6447
6548 return nil
6649}
50+
51+ func (app * BootstrapApp ) getLabelProvider () (service.LabelProvider , error ) {
52+ switch app .config .LabelProvider {
53+ case "none" , "docker" , "kubernetes" , "auto" :
54+ if app .config .LabelProvider == "none" {
55+ return nil , nil
56+ }
57+
58+ useKubernetes := app .config .LabelProvider == "kubernetes" ||
59+ (app .config .LabelProvider == "auto" && os .Getenv ("KUBERNETES_SERVICE_HOST" ) != "" )
60+
61+ if useKubernetes {
62+ app .log .App .Debug ().Msg ("Using Kubernetes label provider" )
63+
64+ kubernetesService , err := service .NewKubernetesService (app .log , app .ctx , & app .wg )
65+
66+ if err != nil {
67+ return nil , fmt .Errorf ("failed to initialize kubernetes service: %w" , err )
68+ }
69+
70+ app .services .kubernetesService = kubernetesService
71+ return kubernetesService , nil
72+ }
73+
74+ app .log .App .Debug ().Msg ("Using Docker label provider" )
75+
76+ dockerService , err := service .NewDockerService (app .log , app .ctx , & app .wg )
77+
78+ if err != nil {
79+ return nil , fmt .Errorf ("failed to initialize docker service: %w" , err )
80+ }
81+
82+ if dockerService == nil {
83+ if app .config .LabelProvider == "docker" {
84+ app .log .App .Warn ().Msg ("Docker label provider selected but Docker is not available, will continue without it" )
85+ }
86+ return nil , nil
87+ }
88+
89+ app .services .dockerService = dockerService
90+ return dockerService , nil
91+ default :
92+ return nil , fmt .Errorf ("invalid label provider: %s" , app .config .LabelProvider )
93+ }
94+ }
95+
96+ func (app * BootstrapApp ) setupPolicyEngine () error {
97+ policyEngine , err := service .NewPolicyEngine (app .config , app .log )
98+
99+ if err != nil {
100+ return fmt .Errorf ("failed to initialize policy engine: %w" , err )
101+ }
102+
103+ policyEngine .RegisterRule (service .RuleUserAllowed , & service.UserAllowedRule {
104+ Log : app .log ,
105+ })
106+ policyEngine .RegisterRule (service .RuleOAuthGroup , & service.OAuthGroupRule {
107+ Log : app .log ,
108+ })
109+ policyEngine .RegisterRule (service .RuleLDAPGroup , & service.LDAPGroupRule {
110+ Log : app .log ,
111+ })
112+ policyEngine .RegisterRule (service .RuleAuthEnabled , & service.AuthEnabledRule {
113+ Log : app .log ,
114+ })
115+ policyEngine .RegisterRule (service .RuleIPAllowed , & service.IPAllowedRule {
116+ Log : app .log ,
117+ Config : app .config ,
118+ })
119+ policyEngine .RegisterRule (service .RuleIPBypassed , & service.IPBypassedRule {
120+ Log : app .log ,
121+ })
122+
123+ app .services .policyEngine = policyEngine
124+ return nil
125+ }
0 commit comments