1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.client.console;
20
21 import com.giffing.wicket.spring.boot.starter.web.config.WicketWebInitializerAutoConfig.WebSocketWicketWebInitializerAutoConfiguration;
22 import java.time.OffsetDateTime;
23 import java.util.List;
24 import java.util.Map;
25 import javax.cache.Cache;
26 import org.apache.syncope.client.console.commons.AccessPolicyConfProvider;
27 import org.apache.syncope.client.console.commons.AnyDirectoryPanelAdditionalActionLinksProvider;
28 import org.apache.syncope.client.console.commons.AnyDirectoryPanelAdditionalActionsProvider;
29 import org.apache.syncope.client.console.commons.AnyWizardBuilderAdditionalSteps;
30 import org.apache.syncope.client.console.commons.ExternalResourceProvider;
31 import org.apache.syncope.client.console.commons.ImplementationInfoProvider;
32 import org.apache.syncope.client.console.commons.PolicyTabProvider;
33 import org.apache.syncope.client.console.commons.StatusProvider;
34 import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
35 import org.apache.syncope.client.console.wizards.any.UserFormFinalizer;
36 import org.apache.syncope.client.ui.commons.DynamicMenuStringResourceLoader;
37 import org.apache.syncope.client.ui.commons.actuate.SyncopeCoreHealthIndicator;
38 import org.apache.syncope.common.keymaster.client.api.ServiceOps;
39 import org.apache.syncope.common.keymaster.client.api.model.NetworkService;
40 import org.apache.syncope.common.keymaster.client.api.startstop.KeymasterStart;
41 import org.apache.syncope.common.keymaster.client.api.startstop.KeymasterStop;
42 import org.apache.wicket.request.resource.IResource;
43 import org.springframework.beans.factory.annotation.Qualifier;
44 import org.springframework.boot.autoconfigure.SpringBootApplication;
45 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
46 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
47 import org.springframework.boot.builder.SpringApplicationBuilder;
48 import org.springframework.boot.context.properties.EnableConfigurationProperties;
49 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
50 import org.springframework.cache.annotation.EnableCaching;
51 import org.springframework.context.annotation.Bean;
52
53 @SpringBootApplication(proxyBeanMethods = false)
54 @EnableConfigurationProperties(ConsoleProperties.class)
55 @EnableCaching
56 public class SyncopeConsoleApplication extends SpringBootServletInitializer {
57
58 public static void main(final String[] args) {
59 new SpringApplicationBuilder(SyncopeConsoleApplication.class).
60 properties("spring.config.name:console").
61 build().run(args);
62 }
63
64 @Override
65 protected SpringApplicationBuilder configure(final SpringApplicationBuilder builder) {
66 return builder.properties(Map.of(
67 WebSocketWicketWebInitializerAutoConfiguration.REGISTER_SERVER_ENDPOINT_ENABLED, false,
68 "spring.config.name", "console")).
69 sources(SyncopeConsoleApplication.class);
70 }
71
72 @ConditionalOnMissingBean
73 @Bean
74 public SyncopeWebApplication syncopeWebApplication(
75 final ConsoleProperties props,
76 final ClassPathScanImplementationLookup lookup,
77 final ServiceOps serviceOps,
78 final ExternalResourceProvider resourceProvider,
79 final AnyDirectoryPanelAdditionalActionsProvider anyDirectoryPanelAdditionalActionsProvider,
80 final AnyDirectoryPanelAdditionalActionLinksProvider anyDirectoryPanelAdditionalActionLinksProvider,
81 final AnyWizardBuilderAdditionalSteps anyWizardBuilderAdditionalSteps,
82 final StatusProvider statusProvider,
83 final ImplementationInfoProvider implementationInfoProvider,
84 final AccessPolicyConfProvider accessPolicyConfProvider,
85 final List<PolicyTabProvider> policyTabProviders,
86 final List<UserFormFinalizer> userFormFinalizers,
87 final List<IResource> resources,
88 @Qualifier(SyncopeWebApplication.LOGGEDOUT_SESSIONID_CACHE)
89 final Cache<String, OffsetDateTime> loggedoutSessionIdCache,
90 @Qualifier(SyncopeWebApplication.DESTROYED_SESSIONID_CACHE)
91 final Cache<String, OffsetDateTime> destroyedSessionIdCache,
92 final DynamicMenuStringResourceLoader dynamicMenuStringResourceLoader) {
93
94 return new SyncopeWebApplication(
95 props,
96 lookup,
97 serviceOps,
98 resourceProvider,
99 anyDirectoryPanelAdditionalActionsProvider,
100 anyDirectoryPanelAdditionalActionLinksProvider,
101 anyWizardBuilderAdditionalSteps, statusProvider,
102 implementationInfoProvider,
103 accessPolicyConfProvider,
104 policyTabProviders,
105 userFormFinalizers,
106 resources,
107 loggedoutSessionIdCache,
108 destroyedSessionIdCache,
109 dynamicMenuStringResourceLoader);
110 }
111
112 @ConditionalOnMissingBean
113 @Bean
114 public SyncopeCoreHealthIndicator syncopeCoreHealthIndicator(
115 final ServiceOps serviceOps, final ConsoleProperties props) {
116
117 return new SyncopeCoreHealthIndicator(
118 serviceOps,
119 props.getAnonymousUser(),
120 props.getAnonymousKey(),
121 props.isUseGZIPCompression());
122 }
123
124 @ConditionalOnProperty(
125 prefix = "keymaster", name = "enableAutoRegistration", havingValue = "true", matchIfMissing = true)
126 @Bean
127 public KeymasterStart keymasterStart() {
128 return new KeymasterStart(NetworkService.Type.CONSOLE);
129 }
130
131 @ConditionalOnProperty(
132 prefix = "keymaster", name = "enableAutoRegistration", havingValue = "true", matchIfMissing = true)
133 @Bean
134 public KeymasterStop keymasterStop() {
135 return new KeymasterStop(NetworkService.Type.CONSOLE);
136 }
137 }