You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PlatformLevel4.java 27KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2024 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.server.platform.platformlevel;
  21. import java.util.List;
  22. import org.sonar.alm.client.RatioBasedRateLimitChecker;
  23. import org.sonar.alm.client.TimeoutConfigurationImpl;
  24. import org.sonar.alm.client.azure.AzureDevOpsHttpClient;
  25. import org.sonar.alm.client.azure.AzureDevOpsValidator;
  26. import org.sonar.alm.client.bitbucket.bitbucketcloud.BitbucketCloudRestClientConfiguration;
  27. import org.sonar.alm.client.bitbucket.bitbucketcloud.BitbucketCloudValidator;
  28. import org.sonar.alm.client.bitbucketserver.BitbucketServerRestClient;
  29. import org.sonar.alm.client.bitbucketserver.BitbucketServerSettingsValidator;
  30. import org.sonar.alm.client.github.GithubApplicationClientImpl;
  31. import org.sonar.alm.client.github.GithubApplicationHttpClient;
  32. import org.sonar.alm.client.github.GithubGlobalSettingsValidator;
  33. import org.sonar.alm.client.github.GithubHeaders;
  34. import org.sonar.alm.client.github.GithubPaginatedHttpClient;
  35. import org.sonar.alm.client.github.GithubPermissionConverter;
  36. import org.sonar.alm.client.github.config.GithubProvisioningConfigValidator;
  37. import org.sonar.alm.client.github.security.GithubAppSecurityImpl;
  38. import org.sonar.alm.client.gitlab.GitlabApplicationClient;
  39. import org.sonar.alm.client.gitlab.GitlabApplicationHttpClient;
  40. import org.sonar.alm.client.gitlab.GitlabGlobalSettingsValidator;
  41. import org.sonar.alm.client.gitlab.GitlabHeaders;
  42. import org.sonar.alm.client.gitlab.GitlabPaginatedHttpClient;
  43. import org.sonar.api.resources.ResourceTypes;
  44. import org.sonar.api.server.rule.RulesDefinitionXmlLoader;
  45. import org.sonar.auth.bitbucket.BitbucketModule;
  46. import org.sonar.auth.github.GitHubModule;
  47. import org.sonar.auth.github.GitHubSettings;
  48. import org.sonar.auth.gitlab.GitLabModule;
  49. import org.sonar.auth.ldap.LdapModule;
  50. import org.sonar.auth.saml.SamlModule;
  51. import org.sonar.ce.task.projectanalysis.notification.ReportAnalysisFailureNotificationModule;
  52. import org.sonar.ce.task.projectanalysis.taskprocessor.AuditPurgeTaskProcessor;
  53. import org.sonar.ce.task.projectanalysis.taskprocessor.IssueSyncTaskProcessor;
  54. import org.sonar.ce.task.projectanalysis.taskprocessor.ReportTaskProcessor;
  55. import org.sonar.ce.task.projectexport.taskprocessor.ProjectExportTaskProcessor;
  56. import org.sonar.core.component.DefaultResourceTypes;
  57. import org.sonar.core.documentation.DefaultDocumentationLinkGenerator;
  58. import org.sonar.core.extension.CoreExtensionsInstaller;
  59. import org.sonar.core.language.LanguagesProvider;
  60. import org.sonar.core.platform.PlatformEditionProvider;
  61. import org.sonar.core.platform.SpringComponentContainer;
  62. import org.sonar.server.almintegration.ws.AlmIntegrationsWSModule;
  63. import org.sonar.server.almintegration.ws.CredentialsEncoderHelper;
  64. import org.sonar.server.almintegration.ws.ImportHelper;
  65. import org.sonar.server.almintegration.ws.ProjectKeyGenerator;
  66. import org.sonar.server.almintegration.ws.github.GithubProvisioningWs;
  67. import org.sonar.server.almsettings.MultipleAlmFeature;
  68. import org.sonar.server.almsettings.ws.AlmSettingsWsModule;
  69. import org.sonar.server.almsettings.ws.DelegatingDevOpsProjectCreatorFactory;
  70. import org.sonar.server.almsettings.ws.GithubProjectCreatorFactory;
  71. import org.sonar.server.almsettings.ws.gitlab.GitlabProjectCreatorFactory;
  72. import org.sonar.server.authentication.AuthenticationModule;
  73. import org.sonar.server.authentication.DefaultAdminCredentialsVerifierImpl;
  74. import org.sonar.server.authentication.DefaultAdminCredentialsVerifierNotificationHandler;
  75. import org.sonar.server.authentication.DefaultAdminCredentialsVerifierNotificationTemplate;
  76. import org.sonar.server.authentication.LogOAuthWarning;
  77. import org.sonar.server.authentication.ws.AuthenticationWsModule;
  78. import org.sonar.server.badge.ws.ProjectBadgesWsModule;
  79. import org.sonar.server.batch.BatchWsModule;
  80. import org.sonar.server.branch.BranchFeatureProxyImpl;
  81. import org.sonar.server.branch.ws.BranchWsModule;
  82. import org.sonar.server.ce.CeModule;
  83. import org.sonar.server.ce.projectdump.ProjectExportWsModule;
  84. import org.sonar.server.ce.ws.CeWsModule;
  85. import org.sonar.server.common.gitlab.config.GitlabConfigurationService;
  86. import org.sonar.server.common.group.service.GroupMembershipService;
  87. import org.sonar.server.common.group.service.GroupService;
  88. import org.sonar.server.common.rule.RuleCreator;
  89. import org.sonar.server.common.rule.service.RuleService;
  90. import org.sonar.server.common.text.MacroInterpreter;
  91. import org.sonar.server.component.ComponentCleanerService;
  92. import org.sonar.server.component.ComponentFinder;
  93. import org.sonar.server.component.ComponentService;
  94. import org.sonar.server.component.ComponentUpdater;
  95. import org.sonar.server.component.index.ComponentIndex;
  96. import org.sonar.server.component.index.ComponentIndexDefinition;
  97. import org.sonar.server.component.index.EntityDefinitionIndexer;
  98. import org.sonar.server.component.ws.ComponentViewerJsonWriter;
  99. import org.sonar.server.component.ws.ComponentsWsModule;
  100. import org.sonar.server.developers.ws.DevelopersWsModule;
  101. import org.sonar.server.dismissmessage.ws.DismissMessageWsModule;
  102. import org.sonar.server.duplication.ws.DuplicationsParser;
  103. import org.sonar.server.duplication.ws.DuplicationsWs;
  104. import org.sonar.server.duplication.ws.ShowResponseBuilder;
  105. import org.sonar.server.email.ws.EmailsWsModule;
  106. import org.sonar.server.es.IndexCreator;
  107. import org.sonar.server.es.IndexDefinitions;
  108. import org.sonar.server.es.IndexersImpl;
  109. import org.sonar.server.es.RecoveryIndexer;
  110. import org.sonar.server.es.metadata.EsDbCompatibilityImpl;
  111. import org.sonar.server.es.metadata.MetadataIndexDefinition;
  112. import org.sonar.server.es.metadata.MetadataIndexImpl;
  113. import org.sonar.server.extension.CoreExtensionBootstraper;
  114. import org.sonar.server.extension.CoreExtensionStopper;
  115. import org.sonar.server.favorite.FavoriteModule;
  116. import org.sonar.server.favorite.ws.FavoriteWsModule;
  117. import org.sonar.server.feature.ws.FeatureWsModule;
  118. import org.sonar.server.health.NodeHealthModule;
  119. import org.sonar.server.hotspot.ws.HotspotsWsModule;
  120. import org.sonar.server.issue.AddTagsAction;
  121. import org.sonar.server.issue.AssignAction;
  122. import org.sonar.server.issue.CommentAction;
  123. import org.sonar.server.issue.IssueChangePostProcessorImpl;
  124. import org.sonar.server.issue.RemoveTagsAction;
  125. import org.sonar.server.issue.SetSeverityAction;
  126. import org.sonar.server.issue.SetTypeAction;
  127. import org.sonar.server.issue.TransitionAction;
  128. import org.sonar.server.issue.index.AsyncIssueIndexingImpl;
  129. import org.sonar.server.issue.index.IssueIndexDefinition;
  130. import org.sonar.server.issue.index.IssueIndexer;
  131. import org.sonar.server.issue.index.IssueIteratorFactory;
  132. import org.sonar.server.issue.notification.IssuesChangesNotificationModule;
  133. import org.sonar.server.issue.notification.MyNewIssuesEmailTemplate;
  134. import org.sonar.server.issue.notification.MyNewIssuesNotificationHandler;
  135. import org.sonar.server.issue.notification.NewIssuesEmailTemplate;
  136. import org.sonar.server.issue.notification.NewIssuesNotificationHandler;
  137. import org.sonar.server.issue.ws.IssueWsModule;
  138. import org.sonar.server.language.LanguageValidation;
  139. import org.sonar.server.language.ws.LanguageWs;
  140. import org.sonar.server.log.ServerLogging;
  141. import org.sonar.server.loginmessage.LoginMessageFeature;
  142. import org.sonar.server.management.DelegatingManagedServices;
  143. import org.sonar.server.measure.index.ProjectsEsModule;
  144. import org.sonar.server.measure.live.LiveMeasureModule;
  145. import org.sonar.server.measure.ws.MeasuresWsModule;
  146. import org.sonar.server.metric.UnanalyzedLanguageMetrics;
  147. import org.sonar.server.metric.ws.MetricsWsModule;
  148. import org.sonar.server.monitoring.ComputeEngineMetricStatusTask;
  149. import org.sonar.server.monitoring.ElasticSearchMetricTask;
  150. import org.sonar.server.monitoring.MainCollector;
  151. import org.sonar.server.monitoring.MonitoringWsModule;
  152. import org.sonar.server.monitoring.ServerMonitoringMetrics;
  153. import org.sonar.server.monitoring.SonarLintConnectedClientsTask;
  154. import org.sonar.server.monitoring.WebUptimeTask;
  155. import org.sonar.server.monitoring.ce.NumberOfTasksInQueueTask;
  156. import org.sonar.server.monitoring.ce.RecentTasksDurationTask;
  157. import org.sonar.server.monitoring.devops.AzureMetricsTask;
  158. import org.sonar.server.monitoring.devops.BitbucketMetricsTask;
  159. import org.sonar.server.monitoring.devops.GithubMetricsTask;
  160. import org.sonar.server.monitoring.devops.GitlabMetricsTask;
  161. import org.sonar.server.newcodeperiod.NewCodeDefinitionResolver;
  162. import org.sonar.server.newcodeperiod.ws.NewCodePeriodsWsModule;
  163. import org.sonar.server.notification.NotificationModule;
  164. import org.sonar.server.notification.ws.NotificationWsModule;
  165. import org.sonar.server.permission.DefaultTemplatesResolverImpl;
  166. import org.sonar.server.permission.GroupPermissionChanger;
  167. import org.sonar.server.permission.PermissionTemplateService;
  168. import org.sonar.server.permission.PermissionUpdater;
  169. import org.sonar.server.permission.UserPermissionChanger;
  170. import org.sonar.server.permission.index.PermissionIndexer;
  171. import org.sonar.server.permission.ws.PermissionsWsModule;
  172. import org.sonar.server.platform.ClusterVerification;
  173. import org.sonar.server.platform.PersistentSettings;
  174. import org.sonar.server.platform.SystemInfoWriterModule;
  175. import org.sonar.server.platform.WebCoreExtensionsInstaller;
  176. import org.sonar.server.platform.db.CheckAnyonePermissionsAtStartup;
  177. import org.sonar.server.platform.db.CheckLanguageSpecificParamsAtStartup;
  178. import org.sonar.server.platform.web.ActionDeprecationLoggerInterceptor;
  179. import org.sonar.server.platform.web.SonarLintConnectionFilter;
  180. import org.sonar.server.platform.web.WebServiceFilter;
  181. import org.sonar.server.platform.web.WebServiceReroutingFilter;
  182. import org.sonar.server.platform.web.requestid.HttpRequestIdModule;
  183. import org.sonar.server.platform.ws.ChangeLogLevelServiceModule;
  184. import org.sonar.server.platform.ws.HealthCheckerModule;
  185. import org.sonar.server.platform.ws.L10nWs;
  186. import org.sonar.server.platform.ws.ServerWs;
  187. import org.sonar.server.platform.ws.SystemWsModule;
  188. import org.sonar.server.plugins.PluginDownloader;
  189. import org.sonar.server.plugins.PluginUninstaller;
  190. import org.sonar.server.plugins.PluginsRiskConsentFilter;
  191. import org.sonar.server.plugins.ServerExtensionInstaller;
  192. import org.sonar.server.plugins.ws.AvailableAction;
  193. import org.sonar.server.plugins.ws.CancelAllAction;
  194. import org.sonar.server.plugins.ws.DownloadAction;
  195. import org.sonar.server.plugins.ws.InstallAction;
  196. import org.sonar.server.plugins.ws.InstalledAction;
  197. import org.sonar.server.plugins.ws.PendingAction;
  198. import org.sonar.server.plugins.ws.PluginUpdateAggregator;
  199. import org.sonar.server.plugins.ws.PluginsWs;
  200. import org.sonar.server.plugins.ws.UninstallAction;
  201. import org.sonar.server.plugins.ws.UpdatesAction;
  202. import org.sonar.server.project.DefaultBranchNameResolver;
  203. import org.sonar.server.project.ProjectQGChangeEventListener;
  204. import org.sonar.server.project.VisibilityService;
  205. import org.sonar.server.project.ws.ProjectsWsModule;
  206. import org.sonar.server.projectanalysis.ws.ProjectAnalysisWsModule;
  207. import org.sonar.server.projectlink.ws.ProjectLinksModule;
  208. import org.sonar.server.projecttag.ws.ProjectTagsWsModule;
  209. import org.sonar.server.property.InternalPropertiesImpl;
  210. import org.sonar.server.pushapi.ServerPushModule;
  211. import org.sonar.server.pushapi.hotspots.HotspotChangeEventServiceImpl;
  212. import org.sonar.server.pushapi.issues.IssueChangeEventServiceImpl;
  213. import org.sonar.server.pushapi.qualityprofile.QualityProfileChangeEventServiceImpl;
  214. import org.sonar.server.qualitygate.QualityGateModule;
  215. import org.sonar.server.qualitygate.notification.QGChangeNotificationHandler;
  216. import org.sonar.server.qualitygate.ws.QualityGateWsModule;
  217. import org.sonar.server.qualityprofile.QProfileBackuperImpl;
  218. import org.sonar.server.qualityprofile.QProfileComparison;
  219. import org.sonar.server.qualityprofile.QProfileCopier;
  220. import org.sonar.server.qualityprofile.QProfileExporters;
  221. import org.sonar.server.qualityprofile.QProfileFactoryImpl;
  222. import org.sonar.server.qualityprofile.QProfileParser;
  223. import org.sonar.server.qualityprofile.QProfileResetImpl;
  224. import org.sonar.server.qualityprofile.QProfileRulesImpl;
  225. import org.sonar.server.qualityprofile.QProfileTreeImpl;
  226. import org.sonar.server.qualityprofile.builtin.BuiltInQPChangeNotificationHandler;
  227. import org.sonar.server.qualityprofile.builtin.BuiltInQPChangeNotificationTemplate;
  228. import org.sonar.server.qualityprofile.builtin.BuiltInQProfileRepositoryImpl;
  229. import org.sonar.server.qualityprofile.builtin.RuleActivator;
  230. import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
  231. import org.sonar.server.qualityprofile.ws.QProfilesWsModule;
  232. import org.sonar.server.rule.RuleDefinitionsLoader;
  233. import org.sonar.server.rule.RuleDescriptionFormatter;
  234. import org.sonar.server.rule.RuleUpdater;
  235. import org.sonar.server.rule.WebServerRuleFinderImpl;
  236. import org.sonar.server.rule.index.RuleIndexDefinition;
  237. import org.sonar.server.rule.index.RuleIndexer;
  238. import org.sonar.server.rule.ws.RepositoriesAction;
  239. import org.sonar.server.rule.ws.RuleMapper;
  240. import org.sonar.server.rule.ws.RuleQueryFactory;
  241. import org.sonar.server.rule.ws.RuleWsSupport;
  242. import org.sonar.server.rule.ws.RulesResponseFormatter;
  243. import org.sonar.server.rule.ws.RulesWs;
  244. import org.sonar.server.rule.ws.TagsAction;
  245. import org.sonar.server.saml.ws.SamlValidationModule;
  246. import org.sonar.server.scannercache.ScannerCache;
  247. import org.sonar.server.scannercache.ws.AnalysisCacheWsModule;
  248. import org.sonar.server.setting.ProjectConfigurationLoaderImpl;
  249. import org.sonar.server.setting.SettingsChangeNotifier;
  250. import org.sonar.server.setting.ws.SettingsWsModule;
  251. import org.sonar.server.source.ws.SourceWsModule;
  252. import org.sonar.server.startup.LogServerId;
  253. import org.sonar.server.telemetry.CloudUsageDataProvider;
  254. import org.sonar.server.telemetry.QualityProfileDataProvider;
  255. import org.sonar.server.telemetry.TelemetryClient;
  256. import org.sonar.server.telemetry.TelemetryDaemon;
  257. import org.sonar.server.telemetry.TelemetryDataJsonWriter;
  258. import org.sonar.server.telemetry.TelemetryDataLoaderImpl;
  259. import org.sonar.server.ui.PageRepository;
  260. import org.sonar.server.ui.WebAnalyticsLoaderImpl;
  261. import org.sonar.server.ui.ws.NavigationWsModule;
  262. import org.sonar.server.updatecenter.UpdateCenterModule;
  263. import org.sonar.server.user.NewUserNotifier;
  264. import org.sonar.server.user.SecurityRealmFactory;
  265. import org.sonar.server.user.UserSessionFactoryImpl;
  266. import org.sonar.server.user.UserUpdater;
  267. import org.sonar.server.user.ws.UsersWsModule;
  268. import org.sonar.server.usergroups.DefaultGroupFinder;
  269. import org.sonar.server.usergroups.ws.UserGroupsModule;
  270. import org.sonar.server.usertoken.UserTokenModule;
  271. import org.sonar.server.usertoken.ws.UserTokenWsModule;
  272. import org.sonar.server.util.TypeValidationModule;
  273. import org.sonar.server.view.index.ViewIndex;
  274. import org.sonar.server.view.index.ViewIndexDefinition;
  275. import org.sonar.server.view.index.ViewIndexer;
  276. import org.sonar.server.webhook.WebhookModule;
  277. import org.sonar.server.webhook.WebhookQGChangeEventListener;
  278. import org.sonar.server.webhook.ws.WebhooksWsModule;
  279. import org.sonar.server.ws.WebServiceEngine;
  280. import org.sonar.server.ws.ws.WebServicesWsModule;
  281. import static org.sonar.core.extension.CoreExtensionsInstaller.noAdditionalSideFilter;
  282. import static org.sonar.core.extension.PlatformLevelPredicates.hasPlatformLevel4OrNone;
  283. public class PlatformLevel4 extends PlatformLevel {
  284. private final List<Object> level4AddedComponents;
  285. public PlatformLevel4(PlatformLevel parent, List<Object> level4AddedComponents) {
  286. super("level4", parent);
  287. this.level4AddedComponents = level4AddedComponents;
  288. }
  289. @Override
  290. protected void configureLevel() {
  291. addIfStartupLeader(
  292. IndexCreator.class,
  293. MetadataIndexDefinition.class,
  294. MetadataIndexImpl.class,
  295. EsDbCompatibilityImpl.class);
  296. addIfCluster(new NodeHealthModule());
  297. add(
  298. RuleDescriptionFormatter.class,
  299. ClusterVerification.class,
  300. LogServerId.class,
  301. LogOAuthWarning.class,
  302. PluginUninstaller.class,
  303. PluginDownloader.class,
  304. PageRepository.class,
  305. ResourceTypes.class,
  306. DefaultResourceTypes.get(),
  307. SettingsChangeNotifier.class,
  308. ServerWs.class,
  309. IndexDefinitions.class,
  310. WebAnalyticsLoaderImpl.class,
  311. new MonitoringWsModule(),
  312. DefaultBranchNameResolver.class,
  313. DefaultDocumentationLinkGenerator.class,
  314. DelegatingManagedServices.class,
  315. DelegatingDevOpsProjectCreatorFactory.class,
  316. // batch
  317. new BatchWsModule(),
  318. // update center
  319. new UpdateCenterModule(),
  320. // quality profile
  321. BuiltInQProfileRepositoryImpl.class,
  322. ActiveRuleIndexer.class,
  323. QProfileComparison.class,
  324. QProfileTreeImpl.class,
  325. QProfileRulesImpl.class,
  326. RuleActivator.class,
  327. QualityProfileChangeEventServiceImpl.class,
  328. QProfileExporters.class,
  329. QProfileFactoryImpl.class,
  330. QProfileCopier.class,
  331. QProfileBackuperImpl.class,
  332. QProfileParser.class,
  333. QProfileResetImpl.class,
  334. new QProfilesWsModule(),
  335. // rule
  336. RuleIndexDefinition.class,
  337. RuleIndexer.class,
  338. WebServerRuleFinderImpl.class,
  339. RuleDefinitionsLoader.class,
  340. RulesDefinitionXmlLoader.class,
  341. RuleUpdater.class,
  342. RuleCreator.class,
  343. org.sonar.server.rule.ws.UpdateAction.class,
  344. RulesWs.class,
  345. RuleWsSupport.class,
  346. org.sonar.server.rule.ws.SearchAction.class,
  347. org.sonar.server.rule.ws.ShowAction.class,
  348. org.sonar.server.rule.ws.CreateAction.class,
  349. org.sonar.server.rule.ws.DeleteAction.class,
  350. org.sonar.server.rule.ws.ListAction.class,
  351. TagsAction.class,
  352. RuleMapper.class,
  353. RulesResponseFormatter.class,
  354. RepositoriesAction.class,
  355. RuleQueryFactory.class,
  356. org.sonar.server.rule.ws.AppAction.class,
  357. RuleService.class,
  358. // languages
  359. LanguagesProvider.class,
  360. LanguageWs.class,
  361. LanguageValidation.class,
  362. org.sonar.server.language.ws.ListAction.class,
  363. // measure
  364. new MetricsWsModule(),
  365. new MeasuresWsModule(),
  366. UnanalyzedLanguageMetrics.class,
  367. new QualityGateModule(),
  368. new QualityGateWsModule(),
  369. // web services
  370. ActionDeprecationLoggerInterceptor.class,
  371. WebServiceEngine.class,
  372. new WebServicesWsModule(),
  373. SonarLintConnectionFilter.class,
  374. WebServiceFilter.class,
  375. WebServiceReroutingFilter.class,
  376. // localization
  377. L10nWs.class,
  378. org.sonar.server.platform.ws.IndexAction.class,
  379. // authentication
  380. new AuthenticationModule(),
  381. new AuthenticationWsModule(),
  382. new BitbucketModule(),
  383. GitHubSettings.class,
  384. new GitHubModule(),
  385. new GitLabModule(),
  386. new LdapModule(),
  387. new SamlModule(),
  388. new SamlValidationModule(),
  389. GitlabConfigurationService.class,
  390. GroupService.class,
  391. GroupMembershipService.class,
  392. DefaultAdminCredentialsVerifierImpl.class,
  393. DefaultAdminCredentialsVerifierNotificationTemplate.class,
  394. DefaultAdminCredentialsVerifierNotificationHandler.class,
  395. // users
  396. UserSessionFactoryImpl.class,
  397. SecurityRealmFactory.class,
  398. NewUserNotifier.class,
  399. UserUpdater.class,
  400. new UsersWsModule(),
  401. new UserTokenModule(),
  402. new UserTokenWsModule(),
  403. // groups
  404. new UserGroupsModule(),
  405. DefaultGroupFinder.class,
  406. // permissions
  407. DefaultTemplatesResolverImpl.class,
  408. new PermissionsWsModule(),
  409. PermissionTemplateService.class,
  410. PermissionUpdater.class,
  411. UserPermissionChanger.class,
  412. GroupPermissionChanger.class,
  413. CheckAnyonePermissionsAtStartup.class,
  414. CheckLanguageSpecificParamsAtStartup.class,
  415. VisibilityService.class,
  416. // components
  417. new BranchWsModule(),
  418. new ProjectsWsModule(),
  419. new ProjectsEsModule(),
  420. new ProjectTagsWsModule(),
  421. new ComponentsWsModule(),
  422. ComponentService.class,
  423. ComponentUpdater.class,
  424. ComponentFinder.class,
  425. QGChangeNotificationHandler.class,
  426. QGChangeNotificationHandler.newMetadata(),
  427. ComponentCleanerService.class,
  428. ComponentIndexDefinition.class,
  429. ComponentIndex.class,
  430. EntityDefinitionIndexer.class,
  431. new LiveMeasureModule(),
  432. ComponentViewerJsonWriter.class,
  433. new DevelopersWsModule(),
  434. new FavoriteModule(),
  435. new FavoriteWsModule(),
  436. // views
  437. ViewIndexDefinition.class,
  438. ViewIndexer.class,
  439. ViewIndex.class,
  440. // issues
  441. IssueIndexDefinition.class,
  442. AsyncIssueIndexingImpl.class,
  443. IssueIndexer.class,
  444. IssueIteratorFactory.class,
  445. PermissionIndexer.class,
  446. new IssueWsModule(),
  447. NewIssuesEmailTemplate.class,
  448. MyNewIssuesEmailTemplate.class,
  449. new IssuesChangesNotificationModule(),
  450. NewIssuesNotificationHandler.class,
  451. NewIssuesNotificationHandler.newMetadata(),
  452. MyNewIssuesNotificationHandler.class,
  453. MyNewIssuesNotificationHandler.newMetadata(),
  454. IssueChangeEventServiceImpl.class,
  455. HotspotChangeEventServiceImpl.class,
  456. // issues actions
  457. AssignAction.class,
  458. SetTypeAction.class,
  459. SetSeverityAction.class,
  460. CommentAction.class,
  461. TransitionAction.class,
  462. AddTagsAction.class,
  463. RemoveTagsAction.class,
  464. IssueChangePostProcessorImpl.class,
  465. // hotspots
  466. new HotspotsWsModule(),
  467. // source
  468. new SourceWsModule(),
  469. // Duplications
  470. DuplicationsParser.class,
  471. DuplicationsWs.class,
  472. ShowResponseBuilder.class,
  473. org.sonar.server.duplication.ws.ShowAction.class,
  474. // text
  475. MacroInterpreter.class,
  476. // Notifications
  477. // Those class are required in order to be able to send emails during startup
  478. // Without having two NotificationModule (one in StartupLevel and one in Level4)
  479. BuiltInQPChangeNotificationTemplate.class,
  480. BuiltInQPChangeNotificationHandler.class,
  481. new NotificationModule(),
  482. new NotificationWsModule(),
  483. new EmailsWsModule(),
  484. // Settings
  485. ProjectConfigurationLoaderImpl.class,
  486. PersistentSettings.class,
  487. new SettingsWsModule(),
  488. new TypeValidationModule(),
  489. // New Code Periods
  490. new NewCodePeriodsWsModule(),
  491. NewCodeDefinitionResolver.class,
  492. // Project Links
  493. new ProjectLinksModule(),
  494. // Project Analyses
  495. new ProjectAnalysisWsModule(),
  496. // System
  497. ServerLogging.class,
  498. new ChangeLogLevelServiceModule(getWebServer()),
  499. new HealthCheckerModule(getWebServer()),
  500. new SystemWsModule(),
  501. // Plugins WS
  502. PluginUpdateAggregator.class,
  503. InstalledAction.class,
  504. AvailableAction.class,
  505. DownloadAction.class,
  506. UpdatesAction.class,
  507. PendingAction.class,
  508. InstallAction.class,
  509. org.sonar.server.plugins.ws.UpdateAction.class,
  510. UninstallAction.class,
  511. CancelAllAction.class,
  512. PluginsWs.class,
  513. // Scanner Cache
  514. ScannerCache.class,
  515. new AnalysisCacheWsModule(),
  516. // ALM integrations
  517. TimeoutConfigurationImpl.class,
  518. CredentialsEncoderHelper.class,
  519. ImportHelper.class,
  520. ProjectKeyGenerator.class,
  521. RatioBasedRateLimitChecker.class,
  522. GithubAppSecurityImpl.class,
  523. GithubHeaders.class,
  524. GithubApplicationHttpClient.class,
  525. GithubPaginatedHttpClient.class,
  526. GithubApplicationClientImpl.class,
  527. GithubProvisioningConfigValidator.class,
  528. GithubProvisioningWs.class,
  529. GithubProjectCreatorFactory.class,
  530. GithubPermissionConverter.class,
  531. BitbucketCloudRestClientConfiguration.class,
  532. BitbucketServerRestClient.class,
  533. AzureDevOpsHttpClient.class,
  534. new AlmIntegrationsWSModule(),
  535. BitbucketCloudValidator.class,
  536. BitbucketServerSettingsValidator.class,
  537. GithubGlobalSettingsValidator.class,
  538. GitlabHeaders.class,
  539. GitlabApplicationHttpClient.class,
  540. GitlabPaginatedHttpClient.class,
  541. GitlabApplicationClient.class,
  542. GitlabGlobalSettingsValidator.class,
  543. GitlabProjectCreatorFactory.class,
  544. AzureDevOpsValidator.class,
  545. // ALM settings
  546. new AlmSettingsWsModule(),
  547. // Project export
  548. new ProjectExportWsModule(),
  549. // Branch
  550. BranchFeatureProxyImpl.class,
  551. // Project badges
  552. new ProjectBadgesWsModule(),
  553. // Core Extensions
  554. CoreExtensionBootstraper.class,
  555. CoreExtensionStopper.class,
  556. MultipleAlmFeature.class,
  557. LoginMessageFeature.class,
  558. // ServerPush endpoints
  559. new ServerPushModule(),
  560. // Compute engine (must be after Views and Developer Cockpit)
  561. new ReportAnalysisFailureNotificationModule(),
  562. new CeModule(),
  563. new CeWsModule(),
  564. ReportTaskProcessor.class,
  565. IssueSyncTaskProcessor.class,
  566. AuditPurgeTaskProcessor.class,
  567. ProjectExportTaskProcessor.class,
  568. // SonarSource editions
  569. PlatformEditionProvider.class,
  570. InternalPropertiesImpl.class,
  571. // UI
  572. new NavigationWsModule(),
  573. // SonarQube features
  574. new FeatureWsModule(),
  575. // webhooks
  576. WebhookQGChangeEventListener.class,
  577. new WebhookModule(),
  578. new WebhooksWsModule(),
  579. ProjectQGChangeEventListener.class,
  580. // Http Request ID
  581. new HttpRequestIdModule(),
  582. RecoveryIndexer.class,
  583. IndexersImpl.class,
  584. // telemetry
  585. TelemetryDataLoaderImpl.class,
  586. TelemetryDataJsonWriter.class,
  587. TelemetryDaemon.class,
  588. TelemetryClient.class,
  589. CloudUsageDataProvider.class,
  590. QualityProfileDataProvider.class,
  591. // monitoring
  592. ServerMonitoringMetrics.class,
  593. // dismiss message
  594. new DismissMessageWsModule(),
  595. AzureMetricsTask.class,
  596. BitbucketMetricsTask.class,
  597. GithubMetricsTask.class,
  598. GitlabMetricsTask.class,
  599. NumberOfTasksInQueueTask.class,
  600. RecentTasksDurationTask.class,
  601. ComputeEngineMetricStatusTask.class,
  602. ElasticSearchMetricTask.class,
  603. WebUptimeTask.class,
  604. SonarLintConnectedClientsTask.class,
  605. MainCollector.class,
  606. PluginsRiskConsentFilter.class);
  607. // system info
  608. add(new SystemInfoWriterModule(getWebServer()));
  609. addAll(level4AddedComponents);
  610. }
  611. @Override
  612. public PlatformLevel start() {
  613. SpringComponentContainer container = getContainer();
  614. CoreExtensionsInstaller coreExtensionsInstaller = parent.get(WebCoreExtensionsInstaller.class);
  615. coreExtensionsInstaller.install(container, hasPlatformLevel4OrNone(), noAdditionalSideFilter());
  616. ServerExtensionInstaller extensionInstaller = parent.get(ServerExtensionInstaller.class);
  617. extensionInstaller.installExtensions(container);
  618. super.start();
  619. return this;
  620. }
  621. }