From 7acd9403283a3cc49c56acc1461c595b99448e3a Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Fri, 20 Jul 2018 16:22:37 +0200 Subject: [PATCH] move UserSession out of sonar-server-common and as a consequence remove any need to have UserSession in Compute Engine --- .../container/ComputeEngineContainerImpl.java | 12 - .../java/org/sonar/ce/user/CeUserSession.java | 153 ----------- .../ComputeEngineContainerImplTest.java | 4 +- .../org/sonar/ce/user/CeUserSessionTest.java | 87 ------- .../java/org/sonar/server/es/EsModule.java | 2 - .../java/org/sonar/server/es/NewIndex.java | 29 ++- .../issue/index/IssueIndexDefinition.java | 17 ++ .../index/IssueIteratorForSingleChunk.java | 20 +- .../permission/index/AuthorizationScope.java | 23 +- .../index/AuthorizationTypeSupport.java | 126 --------- .../index/IndexAuthorizationConstants.java | 36 +++ .../permission/index/IndexPermissions.java | 70 +++++ .../index/NeedAuthorizationIndexer.java | 2 +- .../org/sonar/server/es/EsModuleTest.java | 3 +- .../server/issue/index/IssueIndexerTest.java | 14 +- .../server/user/LightUserSessionRule.java | 246 ------------------ .../server/view/index/ViewIndexerTest.java | 72 ----- .../component/index/ComponentIndex.java | 6 +- .../index/ComponentIndexResults.java | 0 .../component/index/ComponentQuery.java | 0 .../server/component/index/package-info.java | 23 ++ .../sonar/server/issue/IssuesFinderSort.java | 1 + .../sonar/server/issue/index/IssueIndex.java | 17 +- .../sonar/server/issue/index}/IssueQuery.java | 7 +- .../issue/index}/IssueQueryFactory.java | 5 +- .../index}/package-info.java | 2 +- .../sonar/server/issue/ws/AuthorsAction.java | 2 +- .../server/issue/ws/ComponentTagsAction.java | 4 +- .../sonar/server/issue/ws/IssueWsModule.java | 2 +- .../sonar/server/issue/ws/SearchAction.java | 17 +- .../measure/index/ProjectMeasuresIndex.java | 8 +- .../measure/index/ProjectMeasuresQuery.java | 0 .../measure/index/ProjectsEsModule.java | 0 .../index/ProjectsTextSearchQueryFactory.java | 0 .../server/measure/index}/package-info.java | 2 +- .../permission/index/PermissionIndexer.java | 19 +- .../index/PermissionIndexerDao.java | 62 +---- .../index/WebAuthorizationTypeSupport.java | 78 ++++++ .../server/permission/index/package-info.java | 23 ++ .../platformlevel/PlatformLevel1.java | 2 + .../qualityprofile/QProfileComparison.java | 2 - .../server/securityreport/ws/ShowAction.java | 2 +- .../server/telemetry/TelemetryDataLoader.java | 2 - .../sonar/server/user/BaseUserSession.java | 0 .../org/sonar/server/user/UserSession.java | 0 .../server/branch/pr/ws/ListActionTest.java | 4 +- .../server/branch/ws/ListActionTest.java | 4 +- .../index/ComponentIndexCombinationTest.java | 0 .../index/ComponentIndexFeatureExactTest.java | 0 .../ComponentIndexFeatureFavoriteTest.java | 0 .../index/ComponentIndexFeatureKeyTest.java | 0 .../ComponentIndexFeaturePartialTest.java | 0 .../ComponentIndexFeaturePrefixTest.java | 0 ...ponentIndexFeatureRecentlyBrowsedTest.java | 0 .../index/ComponentIndexHighlightTest.java | 0 .../index/ComponentIndexLoginTest.java | 0 .../ComponentIndexMultipleWordsTest.java | 0 .../index/ComponentIndexScoreTest.java | 0 .../index/ComponentIndexSearchTest.java | 8 +- .../component/index/ComponentIndexTest.java | 8 +- .../server/component/ws/SearchActionTest.java | 4 +- .../ws/SearchProjectsActionTest.java | 4 +- .../component/ws/SuggestionsActionTest.java | 4 +- .../server/issue/IssuesFinderSortTest.java | 1 + .../issue/index/IssueIndexDebtTest.java | 15 +- .../IssueIndexProjectStatisticsTest.java | 12 +- .../server/issue/index/IssueIndexTest.java | 21 +- .../issue/index}/IssueQueryFactoryTest.java | 7 +- .../server/issue/index}/IssueQueryTest.java | 4 +- .../server/issue/ws/AuthorsActionTest.java | 4 +- .../issue/ws/ComponentTagsActionTest.java | 4 +- .../issue/ws/SearchActionComponentsTest.java | 6 +- .../server/issue/ws/SearchActionTest.java | 8 +- .../sonar/server/issue/ws/TagsActionTest.java | 8 +- .../index/ProjectMeasuresIndexTest.java | 18 +- .../ProjectMeasuresIndexTextSearchTest.java | 12 +- .../index/ProjectMeasuresQueryTest.java | 0 .../measure/index/ProjectsEsModuleTest.java | 4 +- .../server/permission/index/FooIndex.java | 4 +- .../permission/index/FooIndexDefinition.java | 0 .../server/permission/index/FooIndexer.java | 0 .../index/PermissionIndexerDaoTest.java | 69 ++--- .../index/PermissionIndexerTest.java | 13 +- .../index/PermissionIndexerTester.java | 8 +- .../WebAuthorizationTypeSupportTest.java} | 8 +- .../projecttag/ws/SearchActionTest.java | 8 +- .../securityreport/ws/ShowActionTest.java | 4 +- 87 files changed, 495 insertions(+), 981 deletions(-) delete mode 100644 server/sonar-ce/src/main/java/org/sonar/ce/user/CeUserSession.java delete mode 100644 server/sonar-ce/src/test/java/org/sonar/ce/user/CeUserSessionTest.java delete mode 100644 server/sonar-server-common/src/main/java/org/sonar/server/permission/index/AuthorizationTypeSupport.java create mode 100644 server/sonar-server-common/src/main/java/org/sonar/server/permission/index/IndexAuthorizationConstants.java create mode 100644 server/sonar-server-common/src/main/java/org/sonar/server/permission/index/IndexPermissions.java delete mode 100644 server/sonar-server-common/src/test/java/org/sonar/server/user/LightUserSessionRule.java rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/component/index/ComponentIndex.java (97%) rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/component/index/ComponentIndexResults.java (100%) rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/component/index/ComponentQuery.java (100%) create mode 100644 server/sonar-server/src/main/java/org/sonar/server/component/index/package-info.java rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/issue/index/IssueIndex.java (98%) rename server/{sonar-server-common/src/main/java/org/sonar/server/issue => sonar-server/src/main/java/org/sonar/server/issue/index}/IssueQuery.java (97%) rename server/{sonar-server-common/src/main/java/org/sonar/server/issue => sonar-server/src/main/java/org/sonar/server/issue/index}/IssueQueryFactory.java (99%) rename server/sonar-server/src/main/java/org/sonar/server/{measure => issue/index}/package-info.java (96%) rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java (98%) rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/measure/index/ProjectMeasuresQuery.java (100%) rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/measure/index/ProjectsEsModule.java (100%) rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/measure/index/ProjectsTextSearchQueryFactory.java (100%) rename server/{sonar-ce/src/main/java/org/sonar/ce/user => sonar-server/src/main/java/org/sonar/server/measure/index}/package-info.java (95%) rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java (90%) rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java (82%) create mode 100644 server/sonar-server/src/main/java/org/sonar/server/permission/index/WebAuthorizationTypeSupport.java create mode 100644 server/sonar-server/src/main/java/org/sonar/server/permission/index/package-info.java rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/user/BaseUserSession.java (100%) rename server/{sonar-server-common => sonar-server}/src/main/java/org/sonar/server/user/UserSession.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexCombinationTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureExactTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureFavoriteTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureKeyTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexFeaturePartialTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexFeaturePrefixTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureRecentlyBrowsedTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexHighlightTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexLoginTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexMultipleWordsTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexScoreTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexSearchTest.java (96%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java (95%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java (96%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/issue/index/IssueIndexProjectStatisticsTest.java (96%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java (99%) rename server/{sonar-server-common/src/test/java/org/sonar/server/issue => sonar-server/src/test/java/org/sonar/server/issue/index}/IssueQueryFactoryTest.java (99%) rename server/{sonar-server-common/src/test/java/org/sonar/server/issue => sonar-server/src/test/java/org/sonar/server/issue/index}/IssueQueryTest.java (98%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java (98%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTextSearchTest.java (96%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/measure/index/ProjectMeasuresQueryTest.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/measure/index/ProjectsEsModuleTest.java (86%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/permission/index/FooIndex.java (92%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/permission/index/FooIndexDefinition.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/permission/index/FooIndexer.java (100%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java (78%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java (96%) rename server/{sonar-server-common => sonar-server}/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java (85%) rename server/{sonar-server-common/src/test/java/org/sonar/server/permission/index/AuthorizationTypeSupportTest.java => sonar-server/src/test/java/org/sonar/server/permission/index/WebAuthorizationTypeSupportTest.java} (95%) diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java b/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java index ecdf7f84cb8..6a70c5d6b79 100644 --- a/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java +++ b/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java @@ -62,7 +62,6 @@ import org.sonar.ce.task.projectanalysis.analysis.ProjectConfigurationFactory; import org.sonar.ce.task.projectanalysis.notification.ReportAnalysisFailureNotificationModule; import org.sonar.ce.taskprocessor.CeProcessingScheduler; import org.sonar.ce.taskprocessor.CeTaskProcessorModule; -import org.sonar.ce.user.CeUserSession; import org.sonar.core.component.DefaultResourceTypes; import org.sonar.core.config.CorePropertyDefinitions; import org.sonar.core.extension.CoreExtensionRepositoryImpl; @@ -96,7 +95,6 @@ import org.sonar.server.extension.CoreExtensionStopper; import org.sonar.server.favorite.FavoriteUpdater; import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueStorage; -import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; import org.sonar.server.issue.notification.ChangesOnMyIssueNotificationDispatcher; @@ -111,7 +109,6 @@ import org.sonar.server.issue.workflow.FunctionExecutor; import org.sonar.server.issue.workflow.IssueWorkflow; import org.sonar.server.l18n.ServerI18n; import org.sonar.server.log.ServerLogging; -import org.sonar.server.measure.index.ProjectMeasuresIndex; import org.sonar.server.measure.index.ProjectMeasuresIndexer; import org.sonar.server.metric.CoreCustomMetrics; import org.sonar.server.metric.DefaultMetricFinder; @@ -122,7 +119,6 @@ import org.sonar.server.notification.email.EmailNotificationChannel; import org.sonar.server.organization.BillingValidationsProxyImpl; import org.sonar.server.organization.DefaultOrganizationProviderImpl; import org.sonar.server.organization.OrganizationFlagsImpl; -import org.sonar.server.permission.index.PermissionIndexer; import org.sonar.server.platform.DefaultServerUpgradeStatus; import org.sonar.server.platform.OfficialDistribution; import org.sonar.server.platform.ServerFileSystemImpl; @@ -292,9 +288,6 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer { System2.INSTANCE, Clock.systemDefaultZone(), - // user session - CeUserSession.class, - // DB DaoModule.class, ReadOnlyPropertiesDao.class, @@ -307,9 +300,6 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer { // rules/qprofiles RuleIndex.class, - // issues - IssueIndex.class, - new OkHttpClientProvider(), computeEngineStatus, @@ -389,7 +379,6 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer { // measure CoreCustomMetrics.class, DefaultMetricFinder.class, - ProjectMeasuresIndex.class, UserIndexer.class, UserIndex.class, @@ -410,7 +399,6 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer { IssueStorage.class, IssueIndexer.class, IssueIteratorFactory.class, - PermissionIndexer.class, IssueFieldsSetter.class, // used in Web Services and CE's DebtCalculator FunctionExecutor.class, // used by IssueWorkflow IssueWorkflow.class, // used in Web Services and CE's DebtCalculator diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/user/CeUserSession.java b/server/sonar-ce/src/main/java/org/sonar/ce/user/CeUserSession.java deleted file mode 100644 index 4dee6ad79fe..00000000000 --- a/server/sonar-ce/src/main/java/org/sonar/ce/user/CeUserSession.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2018 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.ce.user; - -import java.util.Collection; -import java.util.List; -import org.sonar.db.component.ComponentDto; -import org.sonar.db.organization.OrganizationDto; -import org.sonar.db.permission.OrganizationPermission; -import org.sonar.db.user.GroupDto; -import org.sonar.server.user.UserSession; - -/** - * Implementation of {@link UserSession} which provide not implementation of any method. - *

- * Any use of {@link UserSession} in the Compute Engine will raise an error. - *

- */ -public class CeUserSession implements UserSession { - - private static final String UOE_MESSAGE = "UserSession must not be used from within the Compute Engine"; - - @Override - public String getLogin() { - throw notImplemented(); - } - - @Override - public String getUuid() { - throw notImplemented(); - } - - @Override - public String getName() { - throw notImplemented(); - } - - @Override - public Integer getUserId() { - throw notImplemented(); - } - - @Override - public Collection getGroups() { - throw notImplemented(); - } - - @Override - public boolean isLoggedIn() { - throw notImplemented(); - } - - @Override - public boolean isRoot() { - throw notImplemented(); - } - - @Override - public UserSession checkIsRoot() { - throw notImplemented(); - } - - @Override - public UserSession checkLoggedIn() { - throw notImplemented(); - } - - @Override - public boolean hasPermission(OrganizationPermission permission, String organizationUuid) { - throw notImplemented(); - } - - @Override - public UserSession checkPermission(OrganizationPermission permission, String organizationUuid) { - throw notImplemented(); - } - - @Override - public boolean hasPermission(OrganizationPermission permission, OrganizationDto organization) { - throw notImplemented(); - } - - @Override - public UserSession checkPermission(OrganizationPermission permission, OrganizationDto organization) { - throw notImplemented(); - } - - @Override - public UserSession checkComponentPermission(String projectPermission, ComponentDto component) { - throw notImplemented(); - } - - @Override - public UserSession checkComponentUuidPermission(String permission, String componentUuid) { - throw notImplemented(); - } - - @Override - public boolean isSystemAdministrator() { - throw notImplemented(); - } - - @Override - public UserSession checkIsSystemAdministrator() { - throw notImplemented(); - } - - @Override - public boolean hasComponentPermission(String permission, ComponentDto component) { - throw notImplemented(); - } - - @Override - public boolean hasComponentUuidPermission(String permission, String componentUuid) { - throw notImplemented(); - } - - @Override - public List keepAuthorizedComponents(String permission, Collection components) { - throw notImplemented(); - } - - @Override - public boolean hasMembership(OrganizationDto organization) { - throw notImplemented(); - } - - @Override - public UserSession checkMembership(OrganizationDto organization) { - throw notImplemented(); - } - - private static RuntimeException notImplemented() { - throw new UnsupportedOperationException(UOE_MESSAGE); - } -} diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java index 9f1328486fa..ff8e310bc7f 100644 --- a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java +++ b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java @@ -97,7 +97,7 @@ public class ComputeEngineContainerImplTest { assertThat(picoContainer.getComponentAdapters()) .hasSize( CONTAINER_ITSELF - + 72 // level 4 + + 70 // level 4 + 6 // content of CeConfigurationModule + 4 // content of CeQueueModule + 3 // content of CeHttpModule @@ -120,7 +120,7 @@ public class ComputeEngineContainerImplTest { ); assertThat(picoContainer.getParent().getParent().getParent().getComponentAdapters()).hasSize( COMPONENTS_IN_LEVEL_1_AT_CONSTRUCTION - + 30 // level 1 + + 27 // level 1 + 55 // content of DaoModule + 3 // content of EsModule + 54 // content of CorePropertyDefinitions diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/user/CeUserSessionTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/user/CeUserSessionTest.java deleted file mode 100644 index 60935e4672b..00000000000 --- a/server/sonar-ce/src/test/java/org/sonar/ce/user/CeUserSessionTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2018 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.ce.user; - -import com.tngtech.java.junit.dataprovider.DataProvider; -import com.tngtech.java.junit.dataprovider.DataProviderRunner; -import com.tngtech.java.junit.dataprovider.UseDataProvider; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; - -import static org.sonar.test.ExceptionCauseMatcher.hasType; - -@RunWith(DataProviderRunner.class) -public class CeUserSessionTest { - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - private CeUserSession underTest = new CeUserSession(); - - @DataProvider - public static Object[][] ceUserSessionPublicMethods() { - List declaredMethods = Arrays.stream(CeUserSession.class.getDeclaredMethods()) - .filter(m -> Modifier.isPublic(m.getModifiers())) - .collect(Collectors.toList()); - Object[][] res = new Object[declaredMethods.size()][1]; - int i = 0; - for (Method declaredMethod : declaredMethods) { - res[i][0] = declaredMethod; - i++; - } - return res; - } - - @Test - @UseDataProvider("ceUserSessionPublicMethods") - public void all_methods_of_CeUserSession_throw_UOE(Method method) throws InvocationTargetException, IllegalAccessException { - int parametersCount = method.getParameterTypes().length; - switch (parametersCount) { - case 2: - expectUOE(); - method.invoke(underTest, null, null); - break; - case 1: - expectUOE(); - method.invoke(underTest, (Object) null); - break; - case 0: - expectUOE(); - method.invoke(underTest); - break; - default: - throw new IllegalArgumentException("Unsupported number of parameters " + parametersCount); - } - } - - private void expectUOE() { - expectedException.expect(InvocationTargetException.class); - expectedException.expectCause( - hasType(UnsupportedOperationException.class) - .andMessage("UserSession must not be used from within the Compute Engine")); - } -} diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/es/EsModule.java b/server/sonar-server-common/src/main/java/org/sonar/server/es/EsModule.java index bb306dc55fc..a742daeef4c 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/es/EsModule.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/es/EsModule.java @@ -20,12 +20,10 @@ package org.sonar.server.es; import org.sonar.core.platform.Module; -import org.sonar.server.permission.index.AuthorizationTypeSupport; public class EsModule extends Module { @Override protected void configureModule() { - add(AuthorizationTypeSupport.class); add(new EsClientProvider()); add(EsClientStopper.class); } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/es/NewIndex.java b/server/sonar-server-common/src/main/java/org/sonar/server/es/NewIndex.java index 9365bee84f0..f80b2311635 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/es/NewIndex.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/es/NewIndex.java @@ -32,7 +32,6 @@ import org.apache.commons.lang.StringUtils; import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.common.settings.Settings; import org.sonar.api.config.Configuration; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import static com.google.common.base.Preconditions.checkArgument; import static java.lang.String.format; @@ -53,6 +52,10 @@ import static org.sonar.server.es.DefaultIndexSettings.NORMS; import static org.sonar.server.es.DefaultIndexSettings.STORE; import static org.sonar.server.es.DefaultIndexSettings.TYPE; import static org.sonar.server.es.DefaultIndexSettingsElement.UUID_MODULE_ANALYZER; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.FIELD_ALLOW_ANYONE; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.FIELD_GROUP_IDS; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.FIELD_USER_IDS; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.TYPE_AUTHORIZATION; public class NewIndex { @@ -181,10 +184,32 @@ public class NewIndex { } public NewIndexType requireProjectAuthorization() { - AuthorizationTypeSupport.enableProjectAuthorization(this); + enableProjectAuthorization(this); return this; } + /** + * Creates a type that requires to verify that user has the read permission + * when searching for documents. + * + * Both types {@code typeName} and "authorization" are created. Documents + * must be created with _parent and _routing having the parent uuid as values. + * + * @see NewIndex.NewIndexType#requireProjectAuthorization() + */ + private static NewIndex.NewIndexType enableProjectAuthorization(NewIndex.NewIndexType type) { + type.setAttribute("_parent", ImmutableMap.of("type", TYPE_AUTHORIZATION)); + type.setAttribute("_routing", ImmutableMap.of("required", true)); + + NewIndex.NewIndexType authType = type.getIndex().createType(TYPE_AUTHORIZATION); + authType.setAttribute("_routing", ImmutableMap.of("required", true)); + authType.createLongField(FIELD_GROUP_IDS); + authType.createLongField(FIELD_USER_IDS); + authType.createBooleanField(FIELD_ALLOW_ANYONE); + authType.setEnableSource(false); + return type; + } + public NewIndex getIndex() { return index; } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndexDefinition.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndexDefinition.java index dd13a01395a..d6e49f49a51 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndexDefinition.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndexDefinition.java @@ -19,12 +19,17 @@ */ package org.sonar.server.issue.index; +import com.google.common.collect.ImmutableMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import org.sonar.api.config.Configuration; import org.sonar.api.config.internal.MapSettings; import org.sonar.server.es.IndexDefinition; import org.sonar.server.es.IndexType; import org.sonar.server.es.NewIndex; +import static java.util.Arrays.asList; import static org.sonar.server.es.DefaultIndexSettingsElement.SORTABLE_ANALYZER; import static org.sonar.server.es.NewIndex.SettingsConfiguration.MANUAL_REFRESH_INTERVAL; import static org.sonar.server.es.NewIndex.SettingsConfiguration.newBuilder; @@ -95,6 +100,18 @@ public class IssueIndexDefinition implements IndexDefinition { public static final String FIELD_ISSUE_OWASP_TOP_10 = "owaspTop10"; public static final String FIELD_ISSUE_SANS_TOP_25 = "sansTop25"; public static final String FIELD_ISSUE_CWE = "cwe"; + public static final String UNKNOWN_STANDARD = "unknown"; + public static final String SANS_TOP_25_INSECURE_INTERACTION = "insecure-interaction"; + public static final String SANS_TOP_25_RISKY_RESOURCE = "risky-resource"; + public static final String SANS_TOP_25_POROUS_DEFENSES = "porous-defenses"; + // See https://www.sans.org/top25-software-errors + private static final Set INSECURE_CWE = new HashSet<>(asList("89", "78", "79", "434", "352", "601")); + private static final Set RISKY_CWE = new HashSet<>(asList("120", "22", "494", "829", "676", "131", "134", "190")); + private static final Set POROUS_CWE = new HashSet<>(asList("306", "862", "798", "311", "807", "250", "863", "732", "327", "307", "759")); + static final Map> SANS_TOP_25_CWE_MAPPING = ImmutableMap.of( + SANS_TOP_25_INSECURE_INTERACTION, INSECURE_CWE, + SANS_TOP_25_RISKY_RESOURCE, RISKY_CWE, + SANS_TOP_25_POROUS_DEFENSES, POROUS_CWE); private final Configuration config; private final boolean enableSource; diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIteratorForSingleChunk.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIteratorForSingleChunk.java index 549974561f8..eafd2aed3b0 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIteratorForSingleChunk.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIteratorForSingleChunk.java @@ -21,7 +21,6 @@ package org.sonar.server.issue.index; import com.google.common.base.CharMatcher; import com.google.common.base.Splitter; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterators; import com.google.common.collect.Maps; import java.sql.PreparedStatement; @@ -29,10 +28,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; import javax.annotation.CheckForNull; @@ -46,14 +42,11 @@ import org.sonar.db.DbSession; import org.sonar.db.ResultSetIterator; import static com.google.common.base.Preconditions.checkArgument; -import static java.util.Arrays.asList; import static java.util.stream.Collectors.toList; import static org.sonar.api.utils.DateUtils.longToDate; import static org.sonar.db.DatabaseUtils.getLong; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_INSECURE_INTERACTION; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_POROUS_DEFENSES; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_RISKY_RESOURCE; -import static org.sonar.server.issue.IssueQuery.UNKNOWN_STANDARD; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_CWE_MAPPING; +import static org.sonar.server.issue.index.IssueIndexDefinition.UNKNOWN_STANDARD; /** * Scrolls over table ISSUES and reads documents to populate @@ -106,15 +99,6 @@ class IssueIteratorForSingleChunk implements IssueIterator { private static final String OWASP_TOP10_PREFIX = "owaspTop10:"; private static final String CWE_PREFIX = "cwe:"; - // See https://www.sans.org/top25-software-errors - private static final Set INSECURE_CWE = new HashSet<>(asList("89", "78", "79", "434", "352", "601")); - private static final Set RISKY_CWE = new HashSet<>(asList("120", "22", "494", "829", "676", "131", "134", "190")); - private static final Set POROUS_CWE = new HashSet<>(asList("306", "862", "798", "311", "807", "250", "863", "732", "327", "307", "759")); - private static final Map> SANS_TOP_25_CWE_MAPPING = ImmutableMap.of( - SANS_TOP_25_INSECURE_INTERACTION, INSECURE_CWE, - SANS_TOP_25_RISKY_RESOURCE, RISKY_CWE, - SANS_TOP_25_POROUS_DEFENSES, POROUS_CWE); - private final DbSession session; @CheckForNull diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/AuthorizationScope.java b/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/AuthorizationScope.java index a4f28e6a332..efec4949f82 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/AuthorizationScope.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/AuthorizationScope.java @@ -23,18 +23,30 @@ import java.util.function.Predicate; import javax.annotation.concurrent.Immutable; import org.sonar.server.es.IndexType; +import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.TYPE_AUTHORIZATION; @Immutable public final class AuthorizationScope { private final IndexType indexType; - private final Predicate projectPredicate; + private final Predicate projectPredicate; - public AuthorizationScope(IndexType indexType, Predicate projectPredicate) { - this.indexType = AuthorizationTypeSupport.getAuthorizationIndexType(indexType); + public AuthorizationScope(IndexType indexType, Predicate projectPredicate) { + this.indexType = getAuthorizationIndexType(indexType); this.projectPredicate = requireNonNull(projectPredicate); } + /** + * @return the identifier of the ElasticSearch type (including it's index name), that corresponds to a certain document type + */ + private static IndexType getAuthorizationIndexType(IndexType indexType) { + requireNonNull(indexType); + requireNonNull(indexType.getIndex()); + checkArgument(!TYPE_AUTHORIZATION.equals(indexType.getType()), "Authorization types do not have authorization on their own."); + return new IndexType(indexType.getIndex(), TYPE_AUTHORIZATION); + } + /** * Identifier of the authorization type (in the same index than the original IndexType, passed into the constructor). */ @@ -43,10 +55,9 @@ public final class AuthorizationScope { } /** - * Predicates that filters the projects to be involved in - * authorization. + * Predicates that filters the projects to be involved in authorization. */ - public Predicate getProjectPredicate() { + public Predicate getProjectPredicate() { return projectPredicate; } } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/AuthorizationTypeSupport.java b/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/AuthorizationTypeSupport.java deleted file mode 100644 index 3abdfae4cc2..00000000000 --- a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/AuthorizationTypeSupport.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2018 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.permission.index; - -import com.google.common.collect.ImmutableMap; -import java.util.Optional; -import org.elasticsearch.index.query.BoolQueryBuilder; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.join.query.JoinQueryBuilders; -import org.sonar.api.ce.ComputeEngineSide; -import org.sonar.api.server.ServerSide; -import org.sonar.db.user.GroupDto; -import org.sonar.server.es.IndexType; -import org.sonar.server.es.NewIndex; -import org.sonar.server.user.UserSession; - -import static com.google.common.base.Preconditions.checkArgument; -import static java.util.Objects.requireNonNull; -import static org.elasticsearch.index.query.QueryBuilders.boolQuery; -import static org.elasticsearch.index.query.QueryBuilders.termQuery; - -@ServerSide -@ComputeEngineSide -public class AuthorizationTypeSupport { - - public static final String TYPE_AUTHORIZATION = "authorization"; - public static final String FIELD_GROUP_IDS = "groupIds"; - public static final String FIELD_USER_IDS = "userIds"; - - /** - * When true, then anybody can access to the project. In that case - * it's useless to store granted groups and users. The related - * fields are empty. - */ - public static final String FIELD_ALLOW_ANYONE = "allowAnyone"; - - private final UserSession userSession; - - public AuthorizationTypeSupport(UserSession userSession) { - this.userSession = userSession; - } - - /** - * @return the identifier of the ElasticSearch type (including it's index name), that corresponds to a certain document type - */ - public static IndexType getAuthorizationIndexType(IndexType indexType) { - requireNonNull(indexType); - requireNonNull(indexType.getIndex()); - checkArgument(!AuthorizationTypeSupport.TYPE_AUTHORIZATION.equals(indexType.getType()), "Authorization types do not have authorization on their own."); - return new IndexType(indexType.getIndex(), AuthorizationTypeSupport.TYPE_AUTHORIZATION); - } - - /** - * Creates a type that requires to verify that user has the read permission - * when searching for documents. - * It relies on a parent type named "authorization" that is automatically - * populated by {@link org.sonar.server.permission.index.PermissionIndexer}. - * - * Both types {@code typeName} and "authorization" are created. Documents - * must be created with _parent and _routing having the parent uuid as values. - * - * @see NewIndex.NewIndexType#requireProjectAuthorization() - */ - public static NewIndex.NewIndexType enableProjectAuthorization(NewIndex.NewIndexType type) { - type.setAttribute("_parent", ImmutableMap.of("type", TYPE_AUTHORIZATION)); - type.setAttribute("_routing", ImmutableMap.of("required", true)); - - NewIndex.NewIndexType authType = type.getIndex().createType(TYPE_AUTHORIZATION); - authType.setAttribute("_routing", ImmutableMap.of("required", true)); - authType.createLongField(FIELD_GROUP_IDS); - authType.createLongField(FIELD_USER_IDS); - authType.createBooleanField(FIELD_ALLOW_ANYONE); - authType.setEnableSource(false); - return type; - } - - /** - * Build a filter to restrict query to the documents on which - * user has read access. - */ - public QueryBuilder createQueryFilter() { - if (userSession.isRoot()) { - return QueryBuilders.matchAllQuery(); - } - - Integer userId = userSession.getUserId(); - BoolQueryBuilder filter = boolQuery(); - - // anyone - filter.should(QueryBuilders.termQuery(FIELD_ALLOW_ANYONE, true)); - - // users - Optional.ofNullable(userId) - .map(Integer::longValue) - .ifPresent(id -> filter.should(termQuery(FIELD_USER_IDS, id))); - - // groups - userSession.getGroups() - .stream() - .map(GroupDto::getId) - .forEach(groupId -> filter.should(termQuery(FIELD_GROUP_IDS, groupId))); - - return JoinQueryBuilders.hasParentQuery( - TYPE_AUTHORIZATION, - QueryBuilders.boolQuery().filter(filter), - false); - } -} diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/IndexAuthorizationConstants.java b/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/IndexAuthorizationConstants.java new file mode 100644 index 00000000000..416f66f768d --- /dev/null +++ b/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/IndexAuthorizationConstants.java @@ -0,0 +1,36 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.permission.index; + +public final class IndexAuthorizationConstants { + public static final String TYPE_AUTHORIZATION = "authorization"; + public static final String FIELD_GROUP_IDS = "groupIds"; + public static final String FIELD_USER_IDS = "userIds"; + /** + * When true, then anybody can access to the project. In that case + * it's useless to store granted groups and users. The related + * fields are empty. + */ + public static final String FIELD_ALLOW_ANYONE = "allowAnyone"; + + private IndexAuthorizationConstants() { + // prevents instantiation + } +} diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/IndexPermissions.java b/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/IndexPermissions.java new file mode 100644 index 00000000000..effa29bb462 --- /dev/null +++ b/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/IndexPermissions.java @@ -0,0 +1,70 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.permission.index; + +import java.util.ArrayList; +import java.util.List; + +public final class IndexPermissions { + private final String projectUuid; + private final String qualifier; + private final List userIds = new ArrayList<>(); + private final List groupIds = new ArrayList<>(); + private boolean allowAnyone = false; + + public IndexPermissions(String projectUuid, String qualifier) { + this.projectUuid = projectUuid; + this.qualifier = qualifier; + } + + public String getProjectUuid() { + return projectUuid; + } + + public String getQualifier() { + return qualifier; + } + + public List getUserIds() { + return userIds; + } + + public IndexPermissions addUserId(int l) { + userIds.add(l); + return this; + } + + public IndexPermissions addGroupId(int id) { + groupIds.add(id); + return this; + } + + public List getGroupIds() { + return groupIds; + } + + public void allowAnyone() { + this.allowAnyone = true; + } + + public boolean isAllowAnyone() { + return allowAnyone; + } +} diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/NeedAuthorizationIndexer.java b/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/NeedAuthorizationIndexer.java index a240fcc3580..0ce996c34f5 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/NeedAuthorizationIndexer.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/NeedAuthorizationIndexer.java @@ -22,7 +22,7 @@ package org.sonar.server.permission.index; /** * An {@link NeedAuthorizationIndexer} defines how * a {@link org.sonar.server.es.ProjectIndexer} populates - * the type named {@link AuthorizationTypeSupport#TYPE_AUTHORIZATION}, which + * the type named {@link WebAuthorizationTypeSupport#TYPE_AUTHORIZATION}, which * is used to verify that a user can access to projects. */ public interface NeedAuthorizationIndexer { diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/es/EsModuleTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/es/EsModuleTest.java index 972f8ad3ee9..ed1931efa9c 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/es/EsModuleTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/es/EsModuleTest.java @@ -23,13 +23,14 @@ import org.junit.Test; import org.sonar.core.platform.ComponentContainer; import static org.assertj.core.api.Assertions.assertThat; +import static org.sonar.core.platform.ComponentContainer.COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER; public class EsModuleTest { @Test public void verify_count_of_added_components() { ComponentContainer container = new ComponentContainer(); new EsModule().configure(container); - assertThat(container.size()).isEqualTo(3 + 2); + assertThat(container.size()).isEqualTo(2 + COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER); } } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexerTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexerTest.java index 6ecf880a1dc..3c793a28e6e 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexerTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexerTest.java @@ -47,7 +47,7 @@ import org.sonar.server.es.EsTester; import org.sonar.server.es.IndexingResult; import org.sonar.server.es.ProjectIndexer; import org.sonar.server.permission.index.AuthorizationScope; -import org.sonar.server.permission.index.PermissionIndexerDao; +import org.sonar.server.permission.index.IndexPermissions; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; @@ -56,10 +56,10 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.rules.ExpectedException.none; import static org.sonar.db.component.ComponentTesting.newFileDto; import static org.sonar.server.issue.IssueDocTesting.newDoc; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_POROUS_DEFENSES; -import static org.sonar.server.issue.IssueQuery.UNKNOWN_STANDARD; import static org.sonar.server.issue.index.IssueIndexDefinition.INDEX_TYPE_ISSUE; -import static org.sonar.server.permission.index.AuthorizationTypeSupport.TYPE_AUTHORIZATION; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_POROUS_DEFENSES; +import static org.sonar.server.issue.index.IssueIndexDefinition.UNKNOWN_STANDARD; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.TYPE_AUTHORIZATION; public class IssueIndexerTest { @@ -91,9 +91,9 @@ public class IssueIndexerTest { assertThat(scope.getIndexType().getIndex()).isEqualTo(INDEX_TYPE_ISSUE.getIndex()); assertThat(scope.getIndexType().getType()).isEqualTo(TYPE_AUTHORIZATION); - Predicate projectPredicate = scope.getProjectPredicate(); - PermissionIndexerDao.Dto project = new PermissionIndexerDao.Dto("P1", Qualifiers.PROJECT); - PermissionIndexerDao.Dto file = new PermissionIndexerDao.Dto("F1", Qualifiers.FILE); + Predicate projectPredicate = scope.getProjectPredicate(); + IndexPermissions project = new IndexPermissions("P1", Qualifiers.PROJECT); + IndexPermissions file = new IndexPermissions("F1", Qualifiers.FILE); assertThat(projectPredicate.test(project)).isTrue(); assertThat(projectPredicate.test(file)).isFalse(); } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/user/LightUserSessionRule.java b/server/sonar-server-common/src/test/java/org/sonar/server/user/LightUserSessionRule.java deleted file mode 100644 index 640dcb9aa91..00000000000 --- a/server/sonar-server-common/src/test/java/org/sonar/server/user/LightUserSessionRule.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2018 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.user; - -import com.google.common.collect.HashMultimap; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import javax.annotation.CheckForNull; -import org.junit.rules.TestRule; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; -import org.sonar.api.web.UserRole; -import org.sonar.db.component.ComponentDto; -import org.sonar.db.organization.OrganizationDto; -import org.sonar.db.permission.OrganizationPermission; -import org.sonar.db.user.GroupDto; -import org.sonar.db.user.UserDto; - -import static com.google.common.collect.Maps.newHashMap; -import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic; - -public class LightUserSessionRule extends BaseUserSession implements TestRule { - private HashMultimap projectUuidByPermission = HashMultimap.create(); - private Set projectPermissionsCheckedByUuid = new HashSet<>(); - private Map projectUuidByComponentUuid = newHashMap(); - private boolean root = false; - private String login; - private Integer userId; - private String uuid; - private String name; - private Set groups = new HashSet<>(); - - public Statement apply(final Statement base, Description description) { - return new Statement() { - @Override - public void evaluate() throws Throwable { - reset(); - try { - base.evaluate(); - } finally { - reset(); - } - } - }; - } - - private void reset() { - this.root = false; - this.login = null; - this.userId = null; - this.userId = null; - this.name = null; - this.groups.clear(); - } - - public LightUserSessionRule setRoot() { - this.root = true; - return this; - } - - public LightUserSessionRule anonymous() { - reset(); - return this; - } - - public LightUserSessionRule logIn() { - return logIn(randomAlphabetic(6)); - } - - public LightUserSessionRule logIn(String login) { - reset(); - this.login = login; - return this; - } - - public LightUserSessionRule logIn(UserDto userDto) { - reset(); - logIn(userDto.getLogin()); - setUserId(userDto.getId()); - return this; - } - - public LightUserSessionRule setUserId(Integer userId) { - this.userId = userId; - return this; - } - - public LightUserSessionRule setUuid(String uuid) { - this.uuid = uuid; - return this; - } - - public LightUserSessionRule setName(String name) { - this.name = name; - return this; - } - - public LightUserSessionRule setGroups(GroupDto... groups) { - this.groups.clear(); - this.groups.addAll(Arrays.asList(groups)); - return this; - } - - /** - * Use this method to register public root component and non root components the UserSession must be aware of. - * (ie. this method can be used to emulate the content of the DB) - */ - public LightUserSessionRule registerComponents(ComponentDto... components) { - Arrays.stream(components) - .forEach(component -> { - if (component.projectUuid().equals(component.uuid()) && !component.isPrivate()) { - this.projectUuidByPermission.put(UserRole.USER, component.uuid()); - this.projectUuidByPermission.put(UserRole.CODEVIEWER, component.uuid()); - this.projectPermissionsCheckedByUuid.add(UserRole.USER); - this.projectPermissionsCheckedByUuid.add(UserRole.CODEVIEWER); - } - this.projectUuidByComponentUuid.put(component.uuid(), component.projectUuid()); - }); - return this; - } - - @Override - protected boolean hasPermissionImpl(OrganizationPermission permission, String organizationUuid) { - throw new UnsupportedOperationException("hasPermissionImpl not implemented"); - } - - @Override - protected boolean hasMembershipImpl(OrganizationDto organization) { - throw new UnsupportedOperationException("hasMembershipImpl not implemented"); - } - - @Override - protected Optional componentUuidToProjectUuid(String componentUuid) { - return Optional.ofNullable(projectUuidByComponentUuid.get(componentUuid)); - } - - @Override - protected boolean hasProjectUuidPermission(String permission, String projectUuid) { - return projectPermissionsCheckedByUuid.contains(permission) && projectUuidByPermission.get(permission).contains(projectUuid); - } - - @CheckForNull - @Override - public String getLogin() { - return login; - } - - @CheckForNull - @Override - public String getUuid() { - return uuid; - } - - @CheckForNull - @Override - public String getName() { - return name; - } - - @CheckForNull - @Override - public Integer getUserId() { - return userId; - } - - @Override - public Collection getGroups() { - return groups; - } - - @Override - public boolean isLoggedIn() { - return login != null; - } - - @Override - public boolean isRoot() { - return root; - } - - @Override - public UserSession checkIsRoot() { - throw new UnsupportedOperationException("checkIsRoot not implemented"); - } - - @Override - public UserSession checkLoggedIn() { - throw new UnsupportedOperationException("checkLoggedIn not implemented"); - } - - @Override - public UserSession checkPermission(OrganizationPermission permission, OrganizationDto organization) { - throw new UnsupportedOperationException("checkPermission not implemented"); - } - - @Override - public UserSession checkPermission(OrganizationPermission permission, String organizationUuid) { - throw new UnsupportedOperationException("checkPermission not implemented"); - } - - @Override - public UserSession checkComponentPermission(String projectPermission, ComponentDto component) { - throw new UnsupportedOperationException("checkComponentPermission not implemented"); - } - - @Override - public UserSession checkComponentUuidPermission(String permission, String componentUuid) { - throw new UnsupportedOperationException("checkComponentUuidPermission not implemented"); - } - - @Override - public boolean isSystemAdministrator() { - throw new UnsupportedOperationException("isSystemAdministrator not implemented"); - } - - @Override - public UserSession checkIsSystemAdministrator() { - throw new UnsupportedOperationException("checkIsSystemAdministrator not implemented"); - } - - @Override - public UserSession checkMembership(OrganizationDto organization) { - throw new UnsupportedOperationException("checkMembership not implemented"); - } -} diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/view/index/ViewIndexerTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/view/index/ViewIndexerTest.java index 00638cd8e3b..6a3e75e6b25 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/view/index/ViewIndexerTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/view/index/ViewIndexerTest.java @@ -22,32 +22,16 @@ package org.sonar.server.view.index; import com.google.common.collect.Maps; import java.util.List; import java.util.Map; -import org.elasticsearch.action.search.SearchResponse; import org.junit.Rule; import org.junit.Test; import org.junit.rules.DisableOnDebug; import org.junit.rules.TestRule; import org.junit.rules.Timeout; -import org.sonar.api.utils.System2; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.component.ComponentDto; -import org.sonar.db.component.ComponentTesting; -import org.sonar.db.issue.IssueDto; -import org.sonar.db.issue.IssueTesting; -import org.sonar.db.organization.OrganizationDto; -import org.sonar.db.rule.RuleDto; -import org.sonar.db.rule.RuleTesting; import org.sonar.server.es.EsTester; -import org.sonar.server.es.SearchOptions; -import org.sonar.server.issue.IssueQuery; -import org.sonar.server.issue.index.IssueIndex; -import org.sonar.server.issue.index.IssueIndexer; -import org.sonar.server.issue.index.IssueIteratorFactory; -import org.sonar.server.permission.index.AuthorizationTypeSupport; -import org.sonar.server.permission.index.PermissionIndexer; -import org.sonar.server.user.LightUserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static java.util.Arrays.asList; @@ -66,13 +50,9 @@ public class ViewIndexerTest { public DbTester db = DbTester.create(); @Rule public EsTester es = EsTester.create(); - @Rule - public LightUserSessionRule userSessionRule = new LightUserSessionRule(); private DbClient dbClient = db.getDbClient(); private DbSession dbSession = db.getSession(); - private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient)); - private PermissionIndexer permissionIndexer = new PermissionIndexer(dbClient, es.client(), issueIndexer); private ViewIndexer underTest = new ViewIndexer(dbClient, es.client()); @Test @@ -180,46 +160,6 @@ public class ViewIndexerTest { tuple(applicationBranch1.uuid(), asList(project1Branch.uuid(), project2Branch.uuid()))); } - @Test - public void clear_views_lookup_cache_on_index_view_uuid() { - IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSessionRule, new AuthorizationTypeSupport(userSessionRule)); - IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient)); - - String viewUuid = "ABCD"; - - RuleDto rule = RuleTesting.newXooX1(); - dbClient.ruleDao().insert(dbSession, rule.getDefinition()); - ComponentDto project1 = addProjectWithIssue(rule, db.organizations().insert()); - issueIndexer.indexOnStartup(issueIndexer.getIndexTypes()); - permissionIndexer.indexOnStartup(permissionIndexer.getIndexTypes()); - - OrganizationDto organizationDto = db.organizations().insert(); - ComponentDto view = ComponentTesting.newView(organizationDto, "ABCD"); - ComponentDto techProject1 = newProjectCopy("CDEF", project1, view); - dbClient.componentDao().insert(dbSession, view, techProject1); - dbSession.commit(); - - // First view indexation - underTest.index(viewUuid); - - // Execute issue query on view -> 1 issue on view - SearchResponse issueResponse = issueIndex.search(IssueQuery.builder().viewUuids(newArrayList(viewUuid)).build(), new SearchOptions()); - assertThat(issueResponse.getHits().getHits()).hasSize(1); - - // Add a project to the view and index it again - ComponentDto project2 = addProjectWithIssue(rule, organizationDto); - issueIndexer.indexOnStartup(issueIndexer.getIndexTypes()); - permissionIndexer.indexOnStartup(permissionIndexer.getIndexTypes()); - - ComponentDto techProject2 = newProjectCopy("EFGH", project2, view); - dbClient.componentDao().insert(dbSession, techProject2); - dbSession.commit(); - underTest.index(viewUuid); - - // Execute issue query on view -> issue of project2 are well taken into account : the cache has been cleared - assertThat(issueIndex.search(IssueQuery.builder().viewUuids(newArrayList(viewUuid)).build(), new SearchOptions()).getHits()).hasSize(2); - } - @Test public void delete_should_delete_the_view() { ViewDoc view1 = new ViewDoc().setUuid("UUID1").setProjects(asList("P1")); @@ -238,16 +178,4 @@ public class ViewIndexerTest { .containsOnly(view3.uuid()); } - private ComponentDto addProjectWithIssue(RuleDto rule, OrganizationDto org) { - ComponentDto project = ComponentTesting.newPublicProjectDto(org); - ComponentDto file = ComponentTesting.newFileDto(project, null); - db.components().insertComponents(project, file); - - IssueDto issue = IssueTesting.newDto(rule, file, project); - dbClient.issueDao().insert(dbSession, issue); - dbSession.commit(); - - return project; - } - } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/component/index/ComponentIndex.java b/server/sonar-server/src/main/java/org/sonar/server/component/index/ComponentIndex.java similarity index 97% rename from server/sonar-server-common/src/main/java/org/sonar/server/component/index/ComponentIndex.java rename to server/sonar-server/src/main/java/org/sonar/server/component/index/ComponentIndex.java index e41f9880224..b7a20f64126 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/component/index/ComponentIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/index/ComponentIndex.java @@ -51,7 +51,7 @@ import org.sonar.server.es.textsearch.ComponentTextSearchFeature; import org.sonar.server.es.textsearch.ComponentTextSearchFeatureRepertoire; import org.sonar.server.es.textsearch.ComponentTextSearchQueryFactory; import org.sonar.server.es.textsearch.ComponentTextSearchQueryFactory.ComponentTextSearchQuery; -import org.sonar.server.permission.index.AuthorizationTypeSupport; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import static org.elasticsearch.index.query.QueryBuilders.boolQuery; import static org.elasticsearch.index.query.QueryBuilders.termQuery; @@ -71,10 +71,10 @@ public class ComponentIndex { private static final String DOCS_AGGREGATION_NAME = "docs"; private final EsClient client; - private final AuthorizationTypeSupport authorizationTypeSupport; + private final WebAuthorizationTypeSupport authorizationTypeSupport; private final System2 system2; - public ComponentIndex(EsClient client, AuthorizationTypeSupport authorizationTypeSupport, System2 system2) { + public ComponentIndex(EsClient client, WebAuthorizationTypeSupport authorizationTypeSupport, System2 system2) { this.client = client; this.authorizationTypeSupport = authorizationTypeSupport; this.system2 = system2; diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/component/index/ComponentIndexResults.java b/server/sonar-server/src/main/java/org/sonar/server/component/index/ComponentIndexResults.java similarity index 100% rename from server/sonar-server-common/src/main/java/org/sonar/server/component/index/ComponentIndexResults.java rename to server/sonar-server/src/main/java/org/sonar/server/component/index/ComponentIndexResults.java diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/component/index/ComponentQuery.java b/server/sonar-server/src/main/java/org/sonar/server/component/index/ComponentQuery.java similarity index 100% rename from server/sonar-server-common/src/main/java/org/sonar/server/component/index/ComponentQuery.java rename to server/sonar-server/src/main/java/org/sonar/server/component/index/ComponentQuery.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/index/package-info.java b/server/sonar-server/src/main/java/org/sonar/server/component/index/package-info.java new file mode 100644 index 00000000000..54f6c6e1bae --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/component/index/package-info.java @@ -0,0 +1,23 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +@ParametersAreNonnullByDefault +package org.sonar.server.component.index; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java index 21004ab49da..2dbd6604799 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java @@ -27,6 +27,7 @@ import java.util.List; import javax.annotation.Nonnull; import org.sonar.api.rule.Severity; import org.sonar.db.issue.IssueDto; +import org.sonar.server.issue.index.IssueQuery; /** * @since 3.6 diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndex.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java similarity index 98% rename from server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndex.java rename to server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java index 5c0522d9e54..f623f129bd3 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java @@ -80,9 +80,8 @@ import org.sonar.server.es.EsUtils; import org.sonar.server.es.SearchOptions; import org.sonar.server.es.Sorting; import org.sonar.server.es.StickyFacetBuilder; -import org.sonar.server.issue.IssueQuery; -import org.sonar.server.issue.IssueQuery.PeriodStart; -import org.sonar.server.permission.index.AuthorizationTypeSupport; +import org.sonar.server.issue.index.IssueQuery.PeriodStart; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.user.UserSession; import org.sonar.server.view.index.ViewIndexDefinition; @@ -100,10 +99,10 @@ import static org.elasticsearch.index.query.QueryBuilders.termsQuery; import static org.sonar.core.util.stream.MoreCollectors.uniqueIndex; import static org.sonar.server.es.BaseDoc.epochMillisToEpochSeconds; import static org.sonar.server.es.EsUtils.escapeSpecialRegexChars; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_INSECURE_INTERACTION; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_POROUS_DEFENSES; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_RISKY_RESOURCE; -import static org.sonar.server.issue.IssueQuery.UNKNOWN_STANDARD; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_INSECURE_INTERACTION; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_POROUS_DEFENSES; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_RISKY_RESOURCE; +import static org.sonar.server.issue.index.IssueIndexDefinition.UNKNOWN_STANDARD; import static org.sonar.server.issue.index.IssueIndexDefinition.FIELD_ISSUE_ORGANIZATION_UUID; import static org.sonar.server.issue.index.IssueIndexDefinition.INDEX_TYPE_ISSUE; import static org.sonarqube.ws.client.issue.IssuesWsParameters.DEPRECATED_FACET_MODE_DEBT; @@ -173,9 +172,9 @@ public class IssueIndex { private final EsClient client; private final System2 system; private final UserSession userSession; - private final AuthorizationTypeSupport authorizationTypeSupport; + private final WebAuthorizationTypeSupport authorizationTypeSupport; - public IssueIndex(EsClient client, System2 system, UserSession userSession, AuthorizationTypeSupport authorizationTypeSupport) { + public IssueIndex(EsClient client, System2 system, UserSession userSession, WebAuthorizationTypeSupport authorizationTypeSupport) { this.client = client; this.system = system; this.userSession = userSession; diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/IssueQuery.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueQuery.java similarity index 97% rename from server/sonar-server-common/src/main/java/org/sonar/server/issue/IssueQuery.java rename to server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueQuery.java index 23e28bfd249..dfb60a7a22b 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/IssueQuery.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueQuery.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.issue; +package org.sonar.server.issue.index; import com.google.common.collect.ImmutableSet; import java.util.Collection; @@ -57,11 +57,6 @@ public class IssueQuery { public static final Set SORTS = ImmutableSet.of(SORT_BY_CREATION_DATE, SORT_BY_UPDATE_DATE, SORT_BY_CLOSE_DATE, SORT_BY_ASSIGNEE, SORT_BY_SEVERITY, SORT_BY_STATUS, SORT_BY_FILE_LINE); - public static final String UNKNOWN_STANDARD = "unknown"; - public static final String SANS_TOP_25_INSECURE_INTERACTION = "insecure-interaction"; - public static final String SANS_TOP_25_RISKY_RESOURCE = "risky-resource"; - public static final String SANS_TOP_25_POROUS_DEFENSES = "porous-defenses"; - private final Collection issueKeys; private final Collection severities; private final Collection statuses; diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/IssueQueryFactory.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java similarity index 99% rename from server/sonar-server-common/src/main/java/org/sonar/server/issue/IssueQueryFactory.java rename to server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java index e28607edc5b..5e89f78cb70 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/IssueQueryFactory.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.issue; +package org.sonar.server.issue.index; import com.google.common.base.Joiner; import com.google.common.base.Strings; @@ -50,7 +50,8 @@ import org.sonar.db.component.ComponentDto; import org.sonar.db.component.SnapshotDto; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; -import org.sonar.server.issue.IssueQuery.PeriodStart; +import org.sonar.server.issue.SearchRequest; +import org.sonar.server.issue.index.IssueQuery.PeriodStart; import org.sonar.server.user.UserSession; import static com.google.common.base.Preconditions.checkArgument; diff --git a/server/sonar-server/src/main/java/org/sonar/server/measure/package-info.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/package-info.java similarity index 96% rename from server/sonar-server/src/main/java/org/sonar/server/measure/package-info.java rename to server/sonar-server/src/main/java/org/sonar/server/issue/index/package-info.java index 16ec2482de6..c4487cb828b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/measure/package-info.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/package-info.java @@ -18,6 +18,6 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ @ParametersAreNonnullByDefault -package org.sonar.server.measure; +package org.sonar.server.issue.index; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/AuthorsAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/AuthorsAction.java index 27fb50a7a6e..0f22690ef2f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/AuthorsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/AuthorsAction.java @@ -28,7 +28,7 @@ import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.api.server.ws.WebService.Param; import org.sonar.api.utils.text.JsonWriter; -import org.sonar.server.issue.IssueQuery; +import org.sonar.server.issue.index.IssueQuery; import org.sonar.server.issue.index.IssueIndex; import static org.sonarqube.ws.client.issue.IssuesWsParameters.ACTION_AUTHORS; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/ComponentTagsAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/ComponentTagsAction.java index a63cb6b72cf..eab940d4adf 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/ComponentTagsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/ComponentTagsAction.java @@ -26,8 +26,8 @@ import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.api.utils.text.JsonWriter; -import org.sonar.server.issue.IssueQuery; -import org.sonar.server.issue.IssueQueryFactory; +import org.sonar.server.issue.index.IssueQuery; +import org.sonar.server.issue.index.IssueQueryFactory; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.SearchRequest; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueWsModule.java index 981f13099c6..19a817c45b5 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueWsModule.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueWsModule.java @@ -22,7 +22,7 @@ package org.sonar.server.issue.ws; import org.sonar.core.platform.Module; import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueFinder; -import org.sonar.server.issue.IssueQueryFactory; +import org.sonar.server.issue.index.IssueQueryFactory; import org.sonar.server.issue.WebIssueStorage; import org.sonar.server.issue.IssueUpdater; import org.sonar.server.issue.TransitionService; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java index a2cbf329ebc..0b03a534e52 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java @@ -39,7 +39,6 @@ import org.elasticsearch.search.SearchHit; import org.sonar.api.issue.Issue; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.Severity; -import org.sonar.api.rules.Rule; import org.sonar.api.rules.RuleType; import org.sonar.api.server.ws.Change; import org.sonar.api.server.ws.Request; @@ -57,8 +56,8 @@ import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.user.UserDto; import org.sonar.server.es.Facets; import org.sonar.server.es.SearchOptions; -import org.sonar.server.issue.IssueQuery; -import org.sonar.server.issue.IssueQueryFactory; +import org.sonar.server.issue.index.IssueQuery; +import org.sonar.server.issue.index.IssueQueryFactory; import org.sonar.server.issue.SearchRequest; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.user.UserSession; @@ -76,12 +75,12 @@ import static java.util.stream.Collectors.toList; import static org.sonar.api.utils.Paging.forPageIndex; import static org.sonar.core.util.stream.MoreCollectors.toSet; import static org.sonar.server.es.SearchOptions.MAX_LIMIT; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_INSECURE_INTERACTION; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_POROUS_DEFENSES; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_RISKY_RESOURCE; -import static org.sonar.server.issue.IssueQuery.SORT_BY_ASSIGNEE; -import static org.sonar.server.issue.IssueQuery.UNKNOWN_STANDARD; -import static org.sonar.server.issue.IssueQueryFactory.UNKNOWN; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_INSECURE_INTERACTION; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_POROUS_DEFENSES; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_RISKY_RESOURCE; +import static org.sonar.server.issue.index.IssueQuery.SORT_BY_ASSIGNEE; +import static org.sonar.server.issue.index.IssueIndexDefinition.UNKNOWN_STANDARD; +import static org.sonar.server.issue.index.IssueQueryFactory.UNKNOWN; import static org.sonar.server.ws.KeyExamples.KEY_BRANCH_EXAMPLE_001; import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001; import static org.sonar.server.ws.KeyExamples.KEY_PULL_REQUEST_EXAMPLE_001; diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java similarity index 98% rename from server/sonar-server-common/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java rename to server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java index a759e0326c5..989956a0569 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java @@ -48,7 +48,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilde import org.elasticsearch.search.aggregations.bucket.terms.support.IncludeExclude; import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.elasticsearch.search.sort.FieldSortBuilder; -import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.server.ServerSide; import org.sonar.api.utils.System2; import org.sonar.core.util.stream.MoreCollectors; @@ -58,7 +57,7 @@ import org.sonar.server.es.SearchIdResult; import org.sonar.server.es.SearchOptions; import org.sonar.server.es.StickyFacetBuilder; import org.sonar.server.measure.index.ProjectMeasuresQuery.MetricCriterion; -import org.sonar.server.permission.index.AuthorizationTypeSupport; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Collections.emptyList; @@ -105,7 +104,6 @@ import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_TAGS; import static org.sonarqube.ws.client.project.ProjectsWsParameters.MAX_PAGE_SIZE; @ServerSide -@ComputeEngineSide public class ProjectMeasuresIndex { public static final List SUPPORTED_FACETS = ImmutableList.of( @@ -155,10 +153,10 @@ public class ProjectMeasuresIndex { .build(); private final EsClient client; - private final AuthorizationTypeSupport authorizationTypeSupport; + private final WebAuthorizationTypeSupport authorizationTypeSupport; private final System2 system2; - public ProjectMeasuresIndex(EsClient client, AuthorizationTypeSupport authorizationTypeSupport, System2 system2) { + public ProjectMeasuresIndex(EsClient client, WebAuthorizationTypeSupport authorizationTypeSupport, System2 system2) { this.client = client; this.authorizationTypeSupport = authorizationTypeSupport; this.system2 = system2; diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/measure/index/ProjectMeasuresQuery.java b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresQuery.java similarity index 100% rename from server/sonar-server-common/src/main/java/org/sonar/server/measure/index/ProjectMeasuresQuery.java rename to server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresQuery.java diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/measure/index/ProjectsEsModule.java b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectsEsModule.java similarity index 100% rename from server/sonar-server-common/src/main/java/org/sonar/server/measure/index/ProjectsEsModule.java rename to server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectsEsModule.java diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/measure/index/ProjectsTextSearchQueryFactory.java b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectsTextSearchQueryFactory.java similarity index 100% rename from server/sonar-server-common/src/main/java/org/sonar/server/measure/index/ProjectsTextSearchQueryFactory.java rename to server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectsTextSearchQueryFactory.java diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/user/package-info.java b/server/sonar-server/src/main/java/org/sonar/server/measure/index/package-info.java similarity index 95% rename from server/sonar-ce/src/main/java/org/sonar/ce/user/package-info.java rename to server/sonar-server/src/main/java/org/sonar/server/measure/index/package-info.java index 174e9701c68..ece66815ae9 100644 --- a/server/sonar-ce/src/main/java/org/sonar/ce/user/package-info.java +++ b/server/sonar-server/src/main/java/org/sonar/server/measure/index/package-info.java @@ -18,6 +18,6 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ @ParametersAreNonnullByDefault -package org.sonar.ce.user; +package org.sonar.server.measure.index; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java b/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java similarity index 90% rename from server/sonar-server-common/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java rename to server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java index 1a9ab35efec..72260764b4f 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java @@ -40,7 +40,6 @@ import org.sonar.server.es.IndexType; import org.sonar.server.es.IndexingResult; import org.sonar.server.es.OneToOneResilientIndexingListener; import org.sonar.server.es.ProjectIndexer; -import org.sonar.server.permission.index.PermissionIndexerDao.Dto; import static java.util.Collections.emptyList; import static org.sonar.core.util.stream.MoreCollectors.toArrayList; @@ -81,13 +80,13 @@ public class PermissionIndexer implements ProjectIndexer { @Override public void indexOnStartup(Set uninitializedIndexTypes) { // TODO do not load everything in memory. Db rows should be scrolled. - List authorizations = getAllAuthorizations(); + List authorizations = getAllAuthorizations(); Stream scopes = getScopes(uninitializedIndexTypes); index(authorizations, scopes, Size.LARGE); } @VisibleForTesting - void index(List authorizations) { + void index(List authorizations) { index(authorizations, authorizationScopes.stream(), Size.REGULAR); } @@ -125,7 +124,7 @@ public class PermissionIndexer implements ProjectIndexer { return items; } - private void index(Collection authorizations, Stream scopes, Size bulkSize) { + private void index(Collection authorizations, Stream scopes, Size bulkSize) { if (authorizations.isEmpty()) { return; } @@ -180,15 +179,15 @@ public class PermissionIndexer implements ProjectIndexer { return result; } - private static IndexRequest newIndexRequest(PermissionIndexerDao.Dto dto, IndexType indexType) { + private static IndexRequest newIndexRequest(IndexPermissions dto, IndexType indexType) { Map doc = new HashMap<>(); if (dto.isAllowAnyone()) { - doc.put(AuthorizationTypeSupport.FIELD_ALLOW_ANYONE, true); + doc.put(IndexAuthorizationConstants.FIELD_ALLOW_ANYONE, true); // no need to feed users and groups } else { - doc.put(AuthorizationTypeSupport.FIELD_ALLOW_ANYONE, false); - doc.put(AuthorizationTypeSupport.FIELD_GROUP_IDS, dto.getGroupIds()); - doc.put(AuthorizationTypeSupport.FIELD_USER_IDS, dto.getUserIds()); + doc.put(IndexAuthorizationConstants.FIELD_ALLOW_ANYONE, false); + doc.put(IndexAuthorizationConstants.FIELD_GROUP_IDS, dto.getGroupIds()); + doc.put(IndexAuthorizationConstants.FIELD_USER_IDS, dto.getUserIds()); } return new IndexRequest(indexType.getIndex(), indexType.getType()) .id(dto.getProjectUuid()) @@ -201,7 +200,7 @@ public class PermissionIndexer implements ProjectIndexer { .filter(scope -> indexTypes.contains(scope.getIndexType())); } - private List getAllAuthorizations() { + private List getAllAuthorizations() { try (DbSession dbSession = dbClient.openSession(false)) { return new PermissionIndexerDao().selectAll(dbClient, dbSession); } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java b/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java similarity index 82% rename from server/sonar-server-common/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java rename to server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java index 5f73a4a3390..22af562e7de 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java @@ -23,7 +23,6 @@ import com.google.common.collect.ImmutableList; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -41,53 +40,6 @@ import static org.sonar.db.DatabaseUtils.executeLargeInputs; */ public class PermissionIndexerDao { - public static final class Dto { - private final String projectUuid; - private final String qualifier; - private final List userIds = new ArrayList<>(); - private final List groupIds = new ArrayList<>(); - private boolean allowAnyone = false; - - public Dto(String projectUuid, String qualifier) { - this.projectUuid = projectUuid; - this.qualifier = qualifier; - } - - public String getProjectUuid() { - return projectUuid; - } - - public String getQualifier() { - return qualifier; - } - - public List getUserIds() { - return userIds; - } - - public Dto addUserId(int l) { - userIds.add(l); - return this; - } - - public Dto addGroupId(int id) { - groupIds.add(id); - return this; - } - - public List getGroupIds() { - return groupIds; - } - - public void allowAnyone() { - this.allowAnyone = true; - } - - public boolean isAllowAnyone() { - return allowAnyone; - } - } - private enum RowKind { USER, GROUP, ANYONE, NONE } @@ -170,17 +122,17 @@ public class PermissionIndexerDao { " ) project_authorization"; - List selectAll(DbClient dbClient, DbSession session) { + List selectAll(DbClient dbClient, DbSession session) { return doSelectByProjects(dbClient, session, Collections.emptyList()); } - List selectByUuids(DbClient dbClient, DbSession session, Collection projectOrViewUuids) { + List selectByUuids(DbClient dbClient, DbSession session, Collection projectOrViewUuids) { return executeLargeInputs(projectOrViewUuids, subProjectOrViewUuids -> doSelectByProjects(dbClient, session, subProjectOrViewUuids)); } - private static List doSelectByProjects(DbClient dbClient, DbSession session, List projectUuids) { + private static List doSelectByProjects(DbClient dbClient, DbSession session, List projectUuids) { try { - Map dtosByProjectUuid = new HashMap<>(); + Map dtosByProjectUuid = new HashMap<>(); try (PreparedStatement stmt = createStatement(dbClient, session, projectUuids); ResultSet rs = stmt.executeQuery()) { while (rs.next()) { @@ -231,14 +183,14 @@ public class PermissionIndexerDao { return newIndex; } - private static void processRow(ResultSet rs, Map dtosByProjectUuid) throws SQLException { + private static void processRow(ResultSet rs, Map dtosByProjectUuid) throws SQLException { RowKind rowKind = RowKind.valueOf(rs.getString(1)); String projectUuid = rs.getString(2); - Dto dto = dtosByProjectUuid.get(projectUuid); + IndexPermissions dto = dtosByProjectUuid.get(projectUuid); if (dto == null) { String qualifier = rs.getString(5); - dto = new Dto(projectUuid, qualifier); + dto = new IndexPermissions(projectUuid, qualifier); dtosByProjectUuid.put(projectUuid, dto); } switch (rowKind) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/index/WebAuthorizationTypeSupport.java b/server/sonar-server/src/main/java/org/sonar/server/permission/index/WebAuthorizationTypeSupport.java new file mode 100644 index 00000000000..3a330a9d629 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/index/WebAuthorizationTypeSupport.java @@ -0,0 +1,78 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.permission.index; + +import java.util.Optional; +import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.QueryBuilder; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.join.query.JoinQueryBuilders; +import org.sonar.api.server.ServerSide; +import org.sonar.db.user.GroupDto; +import org.sonar.server.user.UserSession; + +import static org.elasticsearch.index.query.QueryBuilders.boolQuery; +import static org.elasticsearch.index.query.QueryBuilders.termQuery; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.FIELD_ALLOW_ANYONE; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.FIELD_GROUP_IDS; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.FIELD_USER_IDS; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.TYPE_AUTHORIZATION; + +@ServerSide +public class WebAuthorizationTypeSupport { + + private final UserSession userSession; + + public WebAuthorizationTypeSupport(UserSession userSession) { + this.userSession = userSession; + } + + /** + * Build a filter to restrict query to the documents on which + * user has read access. + */ + public QueryBuilder createQueryFilter() { + if (userSession.isRoot()) { + return QueryBuilders.matchAllQuery(); + } + + Integer userId = userSession.getUserId(); + BoolQueryBuilder filter = boolQuery(); + + // anyone + filter.should(QueryBuilders.termQuery(FIELD_ALLOW_ANYONE, true)); + + // users + Optional.ofNullable(userId) + .map(Integer::longValue) + .ifPresent(id -> filter.should(termQuery(FIELD_USER_IDS, id))); + + // groups + userSession.getGroups() + .stream() + .map(GroupDto::getId) + .forEach(groupId -> filter.should(termQuery(FIELD_GROUP_IDS, groupId))); + + return JoinQueryBuilders.hasParentQuery( + TYPE_AUTHORIZATION, + QueryBuilders.boolQuery().filter(filter), + false); + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/index/package-info.java b/server/sonar-server/src/main/java/org/sonar/server/permission/index/package-info.java new file mode 100644 index 00000000000..b09dbe2ed70 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/index/package-info.java @@ -0,0 +1,23 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +@ParametersAreNonnullByDefault +package org.sonar.server.permission.index; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java index 1b2276258e5..1a33812cd88 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java @@ -48,6 +48,7 @@ import org.sonar.server.app.WebServerProcessLogging; import org.sonar.server.config.ConfigurationProvider; import org.sonar.server.es.EsModule; import org.sonar.server.issue.index.IssueIndex; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.platform.LogServerVersion; import org.sonar.server.platform.Platform; import org.sonar.server.platform.ServerFileSystemImpl; @@ -117,6 +118,7 @@ public class PlatformLevel1 extends PlatformLevel { DaoModule.class, // Elasticsearch + WebAuthorizationTypeSupport.class, EsModule.class, // rules/qprofiles diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileComparison.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileComparison.java index 9f336ebc6a3..7dd42b598ba 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileComparison.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileComparison.java @@ -29,7 +29,6 @@ import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Nonnull; -import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.rule.RuleKey; import org.sonar.api.server.ServerSide; import org.sonar.db.DbClient; @@ -40,7 +39,6 @@ import org.sonar.db.qualityprofile.OrgActiveRuleDto; import org.sonar.db.qualityprofile.QProfileDto; @ServerSide -@ComputeEngineSide public class QProfileComparison { private final DbClient dbClient; diff --git a/server/sonar-server/src/main/java/org/sonar/server/securityreport/ws/ShowAction.java b/server/sonar-server/src/main/java/org/sonar/server/securityreport/ws/ShowAction.java index 280e9100227..4875c20dbca 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/securityreport/ws/ShowAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/securityreport/ws/ShowAction.java @@ -38,7 +38,7 @@ import static java.lang.Integer.parseInt; import static java.util.Comparator.comparing; import static java.util.stream.Collectors.toList; import static org.sonar.api.web.UserRole.USER; -import static org.sonar.server.issue.IssueQuery.UNKNOWN_STANDARD; +import static org.sonar.server.issue.index.IssueIndexDefinition.UNKNOWN_STANDARD; import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_OWASP_TOP_10; import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_SANS_TOP_25; diff --git a/server/sonar-server/src/main/java/org/sonar/server/telemetry/TelemetryDataLoader.java b/server/sonar-server/src/main/java/org/sonar/server/telemetry/TelemetryDataLoader.java index 635499c7ee9..3fb5eec7733 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/telemetry/TelemetryDataLoader.java +++ b/server/sonar-server/src/main/java/org/sonar/server/telemetry/TelemetryDataLoader.java @@ -23,7 +23,6 @@ import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.Map; import java.util.function.Function; -import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.platform.Server; import org.sonar.api.server.ServerSide; import org.sonar.core.platform.PlatformEditionProvider; @@ -39,7 +38,6 @@ import org.sonar.server.telemetry.TelemetryData.Database; import org.sonar.server.user.index.UserIndex; import org.sonar.server.user.index.UserQuery; -@ComputeEngineSide @ServerSide public class TelemetryDataLoader { private final Server server; diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/user/BaseUserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/BaseUserSession.java similarity index 100% rename from server/sonar-server-common/src/main/java/org/sonar/server/user/BaseUserSession.java rename to server/sonar-server/src/main/java/org/sonar/server/user/BaseUserSession.java diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/user/UserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java similarity index 100% rename from server/sonar-server-common/src/main/java/org/sonar/server/user/UserSession.java rename to server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/branch/pr/ws/ListActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/branch/pr/ws/ListActionTest.java index 25aefe358fc..25d2685a9b1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/branch/pr/ws/ListActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/branch/pr/ws/ListActionTest.java @@ -45,8 +45,8 @@ import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import org.sonar.server.permission.index.PermissionIndexerTester; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsActionTester; import org.sonarqube.ws.MediaTypes; @@ -90,7 +90,7 @@ public class ListActionTest { private ResourceTypes resourceTypes = new ResourceTypesRule().setRootQualifiers(PROJECT); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), db.getDbClient(), new IssueIteratorFactory(db.getDbClient())); - private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSession, new AuthorizationTypeSupport(userSession)); + private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSession, new WebAuthorizationTypeSupport(userSession)); private PermissionIndexerTester permissionIndexerTester = new PermissionIndexerTester(es, issueIndexer); public WsActionTester ws = new WsActionTester(new ListAction(db.getDbClient(), userSession, new ComponentFinder(db.getDbClient(), resourceTypes), issueIndex)); diff --git a/server/sonar-server/src/test/java/org/sonar/server/branch/ws/ListActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/branch/ws/ListActionTest.java index a865ac049cc..94f379c6700 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/branch/ws/ListActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/branch/ws/ListActionTest.java @@ -40,8 +40,8 @@ import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import org.sonar.server.permission.index.PermissionIndexerTester; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsActionTester; import org.sonarqube.ws.Common.BranchType; @@ -83,7 +83,7 @@ public class ListActionTest { private ResourceTypes resourceTypes = new ResourceTypesRule().setRootQualifiers(PROJECT); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), db.getDbClient(), new IssueIteratorFactory(db.getDbClient())); - private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSession, new AuthorizationTypeSupport(userSession)); + private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSession, new WebAuthorizationTypeSupport(userSession)); private PermissionIndexerTester permissionIndexerTester = new PermissionIndexerTester(es, issueIndexer); private MetricDto qualityGateStatus; diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexCombinationTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexCombinationTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexCombinationTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexCombinationTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureExactTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureExactTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureExactTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureExactTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureFavoriteTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureFavoriteTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureFavoriteTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureFavoriteTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureKeyTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureKeyTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureKeyTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureKeyTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeaturePartialTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeaturePartialTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeaturePartialTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeaturePartialTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeaturePrefixTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeaturePrefixTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeaturePrefixTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeaturePrefixTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureRecentlyBrowsedTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureRecentlyBrowsedTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureRecentlyBrowsedTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexFeatureRecentlyBrowsedTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexHighlightTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexHighlightTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexHighlightTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexHighlightTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexLoginTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexLoginTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexLoginTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexLoginTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexMultipleWordsTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexMultipleWordsTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexMultipleWordsTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexMultipleWordsTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexScoreTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexScoreTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexScoreTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexScoreTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexSearchTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexSearchTest.java similarity index 96% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexSearchTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexSearchTest.java index e22e83f147a..46bc6489c71 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexSearchTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexSearchTest.java @@ -34,9 +34,9 @@ import org.sonar.server.es.EsTester; import org.sonar.server.es.SearchIdResult; import org.sonar.server.es.SearchOptions; import org.sonar.server.es.textsearch.ComponentTextSearchFeatureRule; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import org.sonar.server.permission.index.PermissionIndexerTester; -import org.sonar.server.user.LightUserSessionRule; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; +import org.sonar.server.tester.UserSessionRule; import static java.util.Collections.emptySet; import static java.util.Collections.singleton; @@ -49,14 +49,14 @@ public class ComponentIndexSearchTest { @Rule public DbTester db = DbTester.create(System2.INSTANCE); @Rule - public LightUserSessionRule userSession = new LightUserSessionRule(); + public UserSessionRule userSession = UserSessionRule.standalone(); @Rule public ComponentTextSearchFeatureRule features = new ComponentTextSearchFeatureRule(); private ComponentIndexer indexer = new ComponentIndexer(db.getDbClient(), es.client()); private PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, indexer); - private ComponentIndex underTest = new ComponentIndex(es.client(), new AuthorizationTypeSupport(userSession), System2.INSTANCE); + private ComponentIndex underTest = new ComponentIndex(es.client(), new WebAuthorizationTypeSupport(userSession), System2.INSTANCE); @Test public void filter_by_language() { diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java similarity index 95% rename from server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java rename to server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java index 9079c9c11c8..f3c82a27289 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java @@ -34,9 +34,9 @@ import org.sonar.db.organization.OrganizationDto; import org.sonar.db.organization.OrganizationTesting; import org.sonar.server.es.EsTester; import org.sonar.server.es.textsearch.ComponentTextSearchFeatureRule; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import org.sonar.server.permission.index.PermissionIndexerTester; -import org.sonar.server.user.LightUserSessionRule; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; +import org.sonar.server.tester.UserSessionRule; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; @@ -51,13 +51,13 @@ public abstract class ComponentIndexTest { @Rule public DbTester db = DbTester.create(System2.INSTANCE); @Rule - public LightUserSessionRule userSession = new LightUserSessionRule(); + public UserSessionRule userSession = UserSessionRule.standalone(); @Rule public ComponentTextSearchFeatureRule features = new ComponentTextSearchFeatureRule(); protected ComponentIndexer indexer = new ComponentIndexer(db.getDbClient(), es.client()); - protected ComponentIndex index = new ComponentIndex(es.client(), new AuthorizationTypeSupport(userSession), System2.INSTANCE); + protected ComponentIndex index = new ComponentIndex(es.client(), new WebAuthorizationTypeSupport(userSession), System2.INSTANCE); protected PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, indexer); private OrganizationDto organization; diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchActionTest.java index 110092b5e16..e95d2ebcb96 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchActionTest.java @@ -43,8 +43,8 @@ import org.sonar.server.component.ws.SearchAction.SearchRequest; import org.sonar.server.es.EsTester; import org.sonar.server.l18n.I18nRule; import org.sonar.server.organization.TestDefaultOrganizationProvider; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import org.sonar.server.permission.index.PermissionIndexerTester; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.TestRequest; import org.sonar.server.ws.WsActionTester; @@ -93,7 +93,7 @@ public class SearchActionTest { private Languages languages = mock(Languages.class); private ComponentIndexer indexer = new ComponentIndexer(db.getDbClient(), es.client()); private PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, indexer); - private ComponentIndex index = new ComponentIndex(es.client(), new AuthorizationTypeSupport(userSession), System2.INSTANCE); + private ComponentIndex index = new ComponentIndex(es.client(), new WebAuthorizationTypeSupport(userSession), System2.INSTANCE); private UserDto user; diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java index a91189f110c..23bd0f1070f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java @@ -49,8 +49,8 @@ import org.sonar.server.component.ws.SearchProjectsAction.SearchProjectsRequest; import org.sonar.server.es.EsTester; import org.sonar.server.measure.index.ProjectMeasuresIndex; import org.sonar.server.measure.index.ProjectMeasuresIndexer; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import org.sonar.server.permission.index.PermissionIndexerTester; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.TestRequest; import org.sonar.server.ws.WsActionTester; @@ -125,7 +125,7 @@ public class SearchProjectsActionTest { private DbSession dbSession = db.getSession(); private PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, new ProjectMeasuresIndexer(dbClient, es.client())); - private ProjectMeasuresIndex index = new ProjectMeasuresIndex(es.client(), new AuthorizationTypeSupport(userSession), System2.INSTANCE); + private ProjectMeasuresIndex index = new ProjectMeasuresIndex(es.client(), new WebAuthorizationTypeSupport(userSession), System2.INSTANCE); private ProjectMeasuresIndexer projectMeasuresIndexer = new ProjectMeasuresIndexer(db.getDbClient(), es.client()); private WsActionTester ws = new WsActionTester( diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SuggestionsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SuggestionsActionTest.java index b3024b62fe1..325784e3c55 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SuggestionsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SuggestionsActionTest.java @@ -41,8 +41,8 @@ import org.sonar.server.component.index.ComponentIndex; import org.sonar.server.component.index.ComponentIndexer; import org.sonar.server.es.EsTester; import org.sonar.server.favorite.FavoriteFinder; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import org.sonar.server.permission.index.PermissionIndexerTester; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.TestRequest; import org.sonar.server.ws.TestResponse; @@ -96,7 +96,7 @@ public class SuggestionsActionTest { private ComponentIndexer componentIndexer = new ComponentIndexer(db.getDbClient(), es.client()); private FavoriteFinder favoriteFinder = mock(FavoriteFinder.class); - private ComponentIndex index = new ComponentIndex(es.client(), new AuthorizationTypeSupport(userSessionRule), System2.INSTANCE); + private ComponentIndex index = new ComponentIndex(es.client(), new WebAuthorizationTypeSupport(userSessionRule), System2.INSTANCE); private SuggestionsAction underTest = new SuggestionsAction(db.getDbClient(), index, favoriteFinder, userSessionRule, resourceTypes); private OrganizationDto organization; private PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, componentIndexer); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssuesFinderSortTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssuesFinderSortTest.java index 93f4380b47e..c7334911c4f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssuesFinderSortTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssuesFinderSortTest.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.commons.lang.time.DateUtils; import org.junit.Test; import org.sonar.db.issue.IssueDto; +import org.sonar.server.issue.index.IssueQuery; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java similarity index 96% rename from server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java rename to server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java index b7dac4da87d..3cafe683b75 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java @@ -38,12 +38,11 @@ import org.sonar.server.es.EsTester; import org.sonar.server.es.Facets; import org.sonar.server.es.SearchOptions; import org.sonar.server.issue.IssueDocTesting; -import org.sonar.server.issue.IssueQuery; -import org.sonar.server.issue.IssueQuery.Builder; -import org.sonar.server.permission.index.AuthorizationTypeSupport; -import org.sonar.server.permission.index.PermissionIndexerDao; +import org.sonar.server.issue.index.IssueQuery.Builder; +import org.sonar.server.permission.index.IndexPermissions; import org.sonar.server.permission.index.PermissionIndexerTester; -import org.sonar.server.user.LightUserSessionRule; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; +import org.sonar.server.tester.UserSessionRule; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; @@ -62,7 +61,7 @@ public class IssueIndexDebtTest { @Rule public EsTester es = EsTester.create(); @Rule - public LightUserSessionRule userSessionRule = new LightUserSessionRule(); + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Rule public DbTester db = DbTester.create(system2); @@ -72,7 +71,7 @@ public class IssueIndexDebtTest { @Before public void setUp() { - underTest = new IssueIndex(es.client(), system2, userSessionRule, new AuthorizationTypeSupport(userSessionRule)); + underTest = new IssueIndex(es.client(), system2, userSessionRule, new WebAuthorizationTypeSupport(userSessionRule)); } @Test @@ -286,7 +285,7 @@ public class IssueIndexDebtTest { } private void addIssueAuthorization(String projectUuid) { - PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(projectUuid, Qualifiers.PROJECT); + IndexPermissions access = new IndexPermissions(projectUuid, Qualifiers.PROJECT); access.allowAnyone(); authorizationIndexerTester.allow(access); } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexProjectStatisticsTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexProjectStatisticsTest.java similarity index 96% rename from server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexProjectStatisticsTest.java rename to server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexProjectStatisticsTest.java index eda244b09a7..b32479cea3d 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexProjectStatisticsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexProjectStatisticsTest.java @@ -28,10 +28,10 @@ import org.sonar.api.utils.System2; import org.sonar.db.component.ComponentDto; import org.sonar.db.organization.OrganizationDto; import org.sonar.server.es.EsTester; -import org.sonar.server.permission.index.AuthorizationTypeSupport; -import org.sonar.server.permission.index.PermissionIndexerDao; +import org.sonar.server.permission.index.IndexPermissions; import org.sonar.server.permission.index.PermissionIndexerTester; -import org.sonar.server.user.LightUserSessionRule; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; +import org.sonar.server.tester.UserSessionRule; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; @@ -52,12 +52,12 @@ public class IssueIndexProjectStatisticsTest { @Rule public EsTester es = EsTester.create(); @Rule - public LightUserSessionRule userSessionRule = new LightUserSessionRule(); + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), null, new IssueIteratorFactory(null)); private PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, issueIndexer); - private IssueIndex underTest = new IssueIndex(es.client(), system2, userSessionRule, new AuthorizationTypeSupport(userSessionRule)); + private IssueIndex underTest = new IssueIndex(es.client(), system2, userSessionRule, new WebAuthorizationTypeSupport(userSessionRule)); @Test public void searchProjectStatistics_returns_empty_list_if_no_input() { @@ -263,7 +263,7 @@ public class IssueIndexProjectStatisticsTest { private void indexIssues(IssueDoc... issues) { issueIndexer.index(asList(issues).iterator()); for (IssueDoc issue : issues) { - PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(issue.projectUuid(), "TRK"); + IndexPermissions access = new IndexPermissions(issue.projectUuid(), "TRK"); access.allowAnyone(); authorizationIndexerTester.allow(access); } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java similarity index 99% rename from server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java rename to server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java index eddde5f4622..cc1f50f393e 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java @@ -51,12 +51,11 @@ import org.sonar.db.user.UserDto; import org.sonar.server.es.EsTester; import org.sonar.server.es.Facets; import org.sonar.server.es.SearchOptions; -import org.sonar.server.issue.IssueQuery; -import org.sonar.server.permission.index.AuthorizationTypeSupport; -import org.sonar.server.permission.index.PermissionIndexerDao; +import org.sonar.server.permission.index.IndexPermissions; import org.sonar.server.permission.index.PermissionIndexerTester; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.rule.index.RuleIndexer; -import org.sonar.server.user.LightUserSessionRule; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.view.index.ViewDoc; import org.sonar.server.view.index.ViewIndexer; @@ -85,17 +84,17 @@ import static org.sonar.db.rule.RuleTesting.newRule; import static org.sonar.db.user.GroupTesting.newGroupDto; import static org.sonar.db.user.UserTesting.newUserDto; import static org.sonar.server.issue.IssueDocTesting.newDoc; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_INSECURE_INTERACTION; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_POROUS_DEFENSES; -import static org.sonar.server.issue.IssueQuery.SANS_TOP_25_RISKY_RESOURCE; -import static org.sonar.server.issue.IssueQuery.UNKNOWN_STANDARD; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_INSECURE_INTERACTION; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_POROUS_DEFENSES; +import static org.sonar.server.issue.index.IssueIndexDefinition.SANS_TOP_25_RISKY_RESOURCE; +import static org.sonar.server.issue.index.IssueIndexDefinition.UNKNOWN_STANDARD; public class IssueIndexTest { @Rule public EsTester es = EsTester.create(); @Rule - public LightUserSessionRule userSessionRule = new LightUserSessionRule(); + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Rule public ExpectedException expectedException = none(); private System2 system2 = new TestSystem2().setNow(1_500_000_000_000L).setDefaultTimeZone(getTimeZone("GMT-01:00")); @@ -107,7 +106,7 @@ public class IssueIndexTest { private RuleIndexer ruleIndexer = new RuleIndexer(es.client(), db.getDbClient()); private PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, issueIndexer); - private IssueIndex underTest = new IssueIndex(es.client(), system2, userSessionRule, new AuthorizationTypeSupport(userSessionRule)); + private IssueIndex underTest = new IssueIndex(es.client(), system2, userSessionRule, new WebAuthorizationTypeSupport(userSessionRule)); @Test public void filter_by_keys() { @@ -1704,7 +1703,7 @@ public class IssueIndexTest { private void indexIssues(IssueDoc... issues) { issueIndexer.index(asList(issues).iterator()); for (IssueDoc issue : issues) { - PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(issue.projectUuid(), "TRK"); + IndexPermissions access = new IndexPermissions(issue.projectUuid(), "TRK"); access.allowAnyone(); authorizationIndexerTester.allow(access); } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/issue/IssueQueryFactoryTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java similarity index 99% rename from server/sonar-server-common/src/test/java/org/sonar/server/issue/IssueQueryFactoryTest.java rename to server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java index b5894ff4e20..4051092050d 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/issue/IssueQueryFactoryTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.issue; +package org.sonar.server.issue.index; import java.time.Clock; import java.time.ZoneOffset; @@ -37,7 +37,8 @@ import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDbTester; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.user.UserDto; -import org.sonar.server.user.LightUserSessionRule; +import org.sonar.server.issue.SearchRequest; +import org.sonar.server.tester.UserSessionRule; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; @@ -56,7 +57,7 @@ import static org.sonar.db.rule.RuleTesting.newRule; public class IssueQueryFactoryTest { @Rule - public LightUserSessionRule userSession = new LightUserSessionRule(); + public UserSessionRule userSession = UserSessionRule.standalone(); @Rule public ExpectedException expectedException = ExpectedException.none(); @Rule diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/issue/IssueQueryTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueQueryTest.java similarity index 98% rename from server/sonar-server-common/src/test/java/org/sonar/server/issue/IssueQueryTest.java rename to server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueQueryTest.java index 957de3d743f..4314de182f6 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/issue/IssueQueryTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueQueryTest.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.issue; +package org.sonar.server.issue.index; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; @@ -26,7 +26,7 @@ import org.junit.Test; import org.sonar.api.issue.Issue; import org.sonar.api.rule.Severity; import org.sonar.db.rule.RuleDefinitionDto; -import org.sonar.server.issue.IssueQuery.PeriodStart; +import org.sonar.server.issue.index.IssueQuery.PeriodStart; import static com.google.common.collect.Lists.newArrayList; import static org.apache.commons.lang.math.RandomUtils.nextInt; diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AuthorsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AuthorsActionTest.java index c26a64ce11a..0cb1ee4df4a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AuthorsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AuthorsActionTest.java @@ -28,7 +28,7 @@ import org.sonar.server.es.EsTester; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; -import org.sonar.server.permission.index.AuthorizationTypeSupport; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsActionTester; @@ -47,7 +47,7 @@ public class AuthorsActionTest { public UserSessionRule userSession = UserSessionRule.standalone(); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), db.getDbClient(), new IssueIteratorFactory(db.getDbClient())); - private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSession, new AuthorizationTypeSupport(userSession)); + private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSession, new WebAuthorizationTypeSupport(userSession)); private WsActionTester ws = new WsActionTester(new AuthorsAction(issueIndex)); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/ComponentTagsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/ComponentTagsActionTest.java index a18696cfd0a..1438cffe5a6 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/ComponentTagsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/ComponentTagsActionTest.java @@ -26,8 +26,8 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import org.sonar.api.server.ws.WebService.Action; import org.sonar.api.server.ws.WebService.Param; -import org.sonar.server.issue.IssueQuery; -import org.sonar.server.issue.IssueQueryFactory; +import org.sonar.server.issue.index.IssueQuery; +import org.sonar.server.issue.index.IssueQueryFactory; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.ws.TestResponse; import org.sonar.server.ws.WsActionTester; diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsTest.java index 2a601ec3767..3f88cfabadd 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsTest.java @@ -39,15 +39,15 @@ import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.server.es.EsTester; import org.sonar.server.issue.IssueFieldsSetter; -import org.sonar.server.issue.IssueQueryFactory; +import org.sonar.server.issue.index.IssueQueryFactory; import org.sonar.server.issue.TransitionService; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; import org.sonar.server.issue.workflow.FunctionExecutor; import org.sonar.server.issue.workflow.IssueWorkflow; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import org.sonar.server.permission.index.PermissionIndexerTester; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.view.index.ViewIndexer; import org.sonar.server.ws.WsActionTester; @@ -94,7 +94,7 @@ public class SearchActionComponentsTest { public EsTester es = EsTester.create(); private DbClient dbClient = db.getDbClient(); - private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSession, new AuthorizationTypeSupport(userSession)); + private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSession, new WebAuthorizationTypeSupport(userSession)); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient)); private ViewIndexer viewIndexer = new ViewIndexer(dbClient, es.client()); private IssueQueryFactory issueQueryFactory = new IssueQueryFactory(dbClient, Clock.systemUTC(), userSession); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java index 8a55f127529..dc5b66f1721 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java @@ -56,16 +56,16 @@ import org.sonar.server.es.EsTester; import org.sonar.server.es.SearchOptions; import org.sonar.server.es.StartupIndexer; import org.sonar.server.issue.IssueFieldsSetter; -import org.sonar.server.issue.IssueQuery; -import org.sonar.server.issue.IssueQueryFactory; +import org.sonar.server.issue.index.IssueQuery; +import org.sonar.server.issue.index.IssueQueryFactory; import org.sonar.server.issue.TransitionService; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; import org.sonar.server.issue.workflow.FunctionExecutor; import org.sonar.server.issue.workflow.IssueWorkflow; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import org.sonar.server.permission.index.PermissionIndexer; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.TestResponse; import org.sonar.server.ws.WsActionTester; @@ -109,7 +109,7 @@ public class SearchActionTest { private DbClient dbClient = db.getDbClient(); private DbSession session = db.getSession(); - private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSessionRule, new AuthorizationTypeSupport(userSessionRule)); + private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSessionRule, new WebAuthorizationTypeSupport(userSessionRule)); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient)); private IssueQueryFactory issueQueryFactory = new IssueQueryFactory(dbClient, Clock.systemUTC(), userSessionRule); private IssueFieldsSetter issueFieldsSetter = new IssueFieldsSetter(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/TagsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/TagsActionTest.java index 8a4809ebda5..100910a2b93 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/TagsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/TagsActionTest.java @@ -35,9 +35,9 @@ import org.sonar.server.es.EsTester; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; -import org.sonar.server.permission.index.AuthorizationTypeSupport; -import org.sonar.server.permission.index.PermissionIndexerDao; +import org.sonar.server.permission.index.IndexPermissions; import org.sonar.server.permission.index.PermissionIndexerTester; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.rule.index.RuleIndex; import org.sonar.server.rule.index.RuleIndexer; import org.sonar.server.tester.UserSessionRule; @@ -62,7 +62,7 @@ public class TagsActionTest { private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbTester.getDbClient(), new IssueIteratorFactory(dbTester.getDbClient())); private RuleIndexer ruleIndexer = new RuleIndexer(es.client(), dbTester.getDbClient()); private PermissionIndexerTester permissionIndexerTester = new PermissionIndexerTester(es, issueIndexer); - private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSession, new AuthorizationTypeSupport(userSession)); + private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSession, new WebAuthorizationTypeSupport(userSession)); private RuleIndex ruleIndex = new RuleIndex(es.client(), System2.INSTANCE); private WsActionTester ws = new WsActionTester(new TagsAction(issueIndex, ruleIndex, dbTester.getDbClient())); @@ -254,7 +254,7 @@ public class TagsActionTest { } private void grantAccess(IssueDto issue) { - PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(issue.getProjectUuid(), "TRK"); + IndexPermissions access = new IndexPermissions(issue.getProjectUuid(), "TRK"); access.addUserId(userSession.getUserId()); permissionIndexerTester.allow(access); } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java similarity index 98% rename from server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java rename to server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java index a9eaf3102fb..670ffb15f4e 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java @@ -46,10 +46,10 @@ import org.sonar.server.es.Facets; import org.sonar.server.es.SearchIdResult; import org.sonar.server.es.SearchOptions; import org.sonar.server.measure.index.ProjectMeasuresQuery.MetricCriterion; -import org.sonar.server.permission.index.AuthorizationTypeSupport; -import org.sonar.server.permission.index.PermissionIndexerDao; +import org.sonar.server.permission.index.IndexPermissions; import org.sonar.server.permission.index.PermissionIndexerTester; -import org.sonar.server.user.LightUserSessionRule; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Sets.newHashSet; @@ -67,7 +67,7 @@ import static org.sonar.db.user.GroupTesting.newGroupDto; import static org.sonar.db.user.UserTesting.newUserDto; import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.FIELD_TAGS; import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.INDEX_TYPE_PROJECT_MEASURES; -import static org.sonar.server.measure.index.ProjectMeasuresQuery.*; +import static org.sonar.server.measure.index.ProjectMeasuresQuery.Operator; @RunWith(DataProviderRunner.class) public class ProjectMeasuresIndexTest { @@ -100,7 +100,7 @@ public class ProjectMeasuresIndexTest { @Rule public ExpectedException expectedException = ExpectedException.none(); @Rule - public LightUserSessionRule userSession = new LightUserSessionRule(); + public UserSessionRule userSession = UserSessionRule.standalone(); @DataProvider public static Object[][] rating_metric_keys() { @@ -109,7 +109,7 @@ public class ProjectMeasuresIndexTest { private ProjectMeasuresIndexer projectMeasureIndexer = new ProjectMeasuresIndexer(null, es.client()); private PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, projectMeasureIndexer); - private ProjectMeasuresIndex underTest = new ProjectMeasuresIndex(es.client(), new AuthorizationTypeSupport(userSession), System2.INSTANCE); + private ProjectMeasuresIndex underTest = new ProjectMeasuresIndex(es.client(), new WebAuthorizationTypeSupport(userSession), System2.INSTANCE); @Test public void return_empty_if_no_projects() { @@ -1398,7 +1398,7 @@ public class ProjectMeasuresIndexTest { private void index(ProjectMeasuresDoc... docs) { es.putDocuments(INDEX_TYPE_PROJECT_MEASURES, docs); for (ProjectMeasuresDoc doc : docs) { - PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(doc.getId(), Qualifiers.PROJECT); + IndexPermissions access = new IndexPermissions(doc.getId(), Qualifiers.PROJECT); access.allowAnyone(); authorizationIndexerTester.allow(access); } @@ -1407,7 +1407,7 @@ public class ProjectMeasuresIndexTest { private void indexForUser(UserDto user, ProjectMeasuresDoc... docs) { es.putDocuments(INDEX_TYPE_PROJECT_MEASURES, docs); for (ProjectMeasuresDoc doc : docs) { - PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(doc.getId(), Qualifiers.PROJECT); + IndexPermissions access = new IndexPermissions(doc.getId(), Qualifiers.PROJECT); access.addUserId(user.getId()); authorizationIndexerTester.allow(access); } @@ -1416,7 +1416,7 @@ public class ProjectMeasuresIndexTest { private void indexForGroup(GroupDto group, ProjectMeasuresDoc... docs) { es.putDocuments(INDEX_TYPE_PROJECT_MEASURES, docs); for (ProjectMeasuresDoc doc : docs) { - PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(doc.getId(), Qualifiers.PROJECT); + IndexPermissions access = new IndexPermissions(doc.getId(), Qualifiers.PROJECT); access.addGroupId(group.getId()); authorizationIndexerTester.allow(access); } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTextSearchTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTextSearchTest.java similarity index 96% rename from server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTextSearchTest.java rename to server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTextSearchTest.java index d66998b3ab7..a60a7a860a1 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTextSearchTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTextSearchTest.java @@ -34,10 +34,10 @@ import org.sonar.server.es.EsTester; import org.sonar.server.es.Facets; import org.sonar.server.es.SearchOptions; import org.sonar.server.measure.index.ProjectMeasuresQuery.MetricCriterion; -import org.sonar.server.permission.index.AuthorizationTypeSupport; -import org.sonar.server.permission.index.PermissionIndexerDao; +import org.sonar.server.permission.index.IndexPermissions; import org.sonar.server.permission.index.PermissionIndexerTester; -import org.sonar.server.user.LightUserSessionRule; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.collect.Lists.newArrayList; @@ -60,11 +60,11 @@ public class ProjectMeasuresIndexTextSearchTest { @Rule public ExpectedException expectedException = ExpectedException.none(); @Rule - public LightUserSessionRule userSession = new LightUserSessionRule(); + public UserSessionRule userSession = UserSessionRule.standalone(); private ProjectMeasuresIndexer projectMeasureIndexer = new ProjectMeasuresIndexer(null, es.client()); private PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, projectMeasureIndexer); - private ProjectMeasuresIndex underTest = new ProjectMeasuresIndex(es.client(), new AuthorizationTypeSupport(userSession), System2.INSTANCE); + private ProjectMeasuresIndex underTest = new ProjectMeasuresIndex(es.client(), new WebAuthorizationTypeSupport(userSession), System2.INSTANCE); @Test public void match_exact_case_insensitive_name() { @@ -288,7 +288,7 @@ public class ProjectMeasuresIndexTextSearchTest { private void index(ProjectMeasuresDoc... docs) { es.putDocuments(INDEX_TYPE_PROJECT_MEASURES, docs); stream(docs).forEach(doc -> { - PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(doc.getId(), Qualifiers.PROJECT); + IndexPermissions access = new IndexPermissions(doc.getId(), Qualifiers.PROJECT); access.allowAnyone(); authorizationIndexerTester.allow(access); }); diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectMeasuresQueryTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresQueryTest.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectMeasuresQueryTest.java rename to server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresQueryTest.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectsEsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectsEsModuleTest.java similarity index 86% rename from server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectsEsModuleTest.java rename to server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectsEsModuleTest.java index 9f365216ec7..0e8613fdf4e 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/measure/index/ProjectsEsModuleTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectsEsModuleTest.java @@ -21,15 +21,15 @@ package org.sonar.server.measure.index; import org.junit.Test; import org.sonar.core.platform.ComponentContainer; -import org.sonar.server.measure.index.ProjectsEsModule; import static org.assertj.core.api.Assertions.assertThat; +import static org.sonar.core.platform.ComponentContainer.COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER; public class ProjectsEsModuleTest { @Test public void verify_count_of_added_components() { ComponentContainer container = new ComponentContainer(); new ProjectsEsModule().configure(container); - assertThat(container.size()).isEqualTo(3 + 2); + assertThat(container.size()).isEqualTo(3 + COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER); } } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/FooIndex.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/FooIndex.java similarity index 92% rename from server/sonar-server-common/src/test/java/org/sonar/server/permission/index/FooIndex.java rename to server/sonar-server/src/test/java/org/sonar/server/permission/index/FooIndex.java index 8f0c8dcf15a..d8c93720ca9 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/FooIndex.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/index/FooIndex.java @@ -32,9 +32,9 @@ import static org.sonar.server.permission.index.FooIndexDefinition.FOO_TYPE; public class FooIndex { private final EsClient esClient; - private final AuthorizationTypeSupport authorizationTypeSupport; + private final WebAuthorizationTypeSupport authorizationTypeSupport; - public FooIndex(EsClient esClient, AuthorizationTypeSupport authorizationTypeSupport) { + public FooIndex(EsClient esClient, WebAuthorizationTypeSupport authorizationTypeSupport) { this.esClient = esClient; this.authorizationTypeSupport = authorizationTypeSupport; } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/FooIndexDefinition.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/FooIndexDefinition.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/permission/index/FooIndexDefinition.java rename to server/sonar-server/src/test/java/org/sonar/server/permission/index/FooIndexDefinition.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/FooIndexer.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/FooIndexer.java similarity index 100% rename from server/sonar-server-common/src/test/java/org/sonar/server/permission/index/FooIndexer.java rename to server/sonar-server/src/test/java/org/sonar/server/permission/index/FooIndexer.java diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java similarity index 78% rename from server/sonar-server-common/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java rename to server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java index 75eb48e6e53..df045f6eb79 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; import java.util.function.Function; +import org.assertj.core.api.Assertions; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -92,31 +93,31 @@ public class PermissionIndexerDaoTest { public void select_all() { insertTestDataForProjectsAndViews(); - Collection dtos = underTest.selectAll(dbClient, dbSession); - assertThat(dtos).hasSize(6); + Collection dtos = underTest.selectAll(dbClient, dbSession); + Assertions.assertThat(dtos).hasSize(6); - PermissionIndexerDao.Dto publicProjectAuthorization = getByProjectUuid(publicProject.uuid(), dtos); + IndexPermissions publicProjectAuthorization = getByProjectUuid(publicProject.uuid(), dtos); isPublic(publicProjectAuthorization, PROJECT); - PermissionIndexerDao.Dto view1Authorization = getByProjectUuid(view1.uuid(), dtos); + IndexPermissions view1Authorization = getByProjectUuid(view1.uuid(), dtos); isPublic(view1Authorization, VIEW); - PermissionIndexerDao.Dto applicationAuthorization = getByProjectUuid(application.uuid(), dtos); + IndexPermissions applicationAuthorization = getByProjectUuid(application.uuid(), dtos); isPublic(applicationAuthorization, APP); - PermissionIndexerDao.Dto privateProject1Authorization = getByProjectUuid(privateProject1.uuid(), dtos); + IndexPermissions privateProject1Authorization = getByProjectUuid(privateProject1.uuid(), dtos); assertThat(privateProject1Authorization.getGroupIds()).containsOnly(group.getId()); assertThat(privateProject1Authorization.isAllowAnyone()).isFalse(); assertThat(privateProject1Authorization.getUserIds()).containsOnly(user1.getId(), user2.getId()); assertThat(privateProject1Authorization.getQualifier()).isEqualTo(PROJECT); - PermissionIndexerDao.Dto privateProject2Authorization = getByProjectUuid(privateProject2.uuid(), dtos); + IndexPermissions privateProject2Authorization = getByProjectUuid(privateProject2.uuid(), dtos); assertThat(privateProject2Authorization.getGroupIds()).isEmpty(); assertThat(privateProject2Authorization.isAllowAnyone()).isFalse(); assertThat(privateProject2Authorization.getUserIds()).containsOnly(user1.getId()); assertThat(privateProject2Authorization.getQualifier()).isEqualTo(PROJECT); - PermissionIndexerDao.Dto view2Authorization = getByProjectUuid(view2.uuid(), dtos); + IndexPermissions view2Authorization = getByProjectUuid(view2.uuid(), dtos); isPublic(view2Authorization, VIEW); } @@ -124,34 +125,34 @@ public class PermissionIndexerDaoTest { public void selectByUuids() { insertTestDataForProjectsAndViews(); - Map dtos = underTest + Map dtos = underTest .selectByUuids(dbClient, dbSession, asList(publicProject.uuid(), privateProject1.uuid(), privateProject2.uuid(), view1.uuid(), view2.uuid(), application.uuid())) .stream() - .collect(MoreCollectors.uniqueIndex(PermissionIndexerDao.Dto::getProjectUuid, Function.identity())); - assertThat(dtos).hasSize(6); + .collect(MoreCollectors.uniqueIndex(IndexPermissions::getProjectUuid, Function.identity())); + Assertions.assertThat(dtos).hasSize(6); - PermissionIndexerDao.Dto publicProjectAuthorization = dtos.get(publicProject.uuid()); + IndexPermissions publicProjectAuthorization = dtos.get(publicProject.uuid()); isPublic(publicProjectAuthorization, PROJECT); - PermissionIndexerDao.Dto view1Authorization = dtos.get(view1.uuid()); + IndexPermissions view1Authorization = dtos.get(view1.uuid()); isPublic(view1Authorization, VIEW); - PermissionIndexerDao.Dto applicationAuthorization = dtos.get(application.uuid()); + IndexPermissions applicationAuthorization = dtos.get(application.uuid()); isPublic(applicationAuthorization, APP); - PermissionIndexerDao.Dto privateProject1Authorization = dtos.get(privateProject1.uuid()); + IndexPermissions privateProject1Authorization = dtos.get(privateProject1.uuid()); assertThat(privateProject1Authorization.getGroupIds()).containsOnly(group.getId()); assertThat(privateProject1Authorization.isAllowAnyone()).isFalse(); assertThat(privateProject1Authorization.getUserIds()).containsOnly(user1.getId(), user2.getId()); assertThat(privateProject1Authorization.getQualifier()).isEqualTo(PROJECT); - PermissionIndexerDao.Dto privateProject2Authorization = dtos.get(privateProject2.uuid()); + IndexPermissions privateProject2Authorization = dtos.get(privateProject2.uuid()); assertThat(privateProject2Authorization.getGroupIds()).isEmpty(); assertThat(privateProject2Authorization.isAllowAnyone()).isFalse(); assertThat(privateProject2Authorization.getUserIds()).containsOnly(user1.getId()); assertThat(privateProject2Authorization.getQualifier()).isEqualTo(PROJECT); - PermissionIndexerDao.Dto view2Authorization = dtos.get(view2.uuid()); + IndexPermissions view2Authorization = dtos.get(view2.uuid()); isPublic(view2Authorization, VIEW); } @@ -159,8 +160,8 @@ public class PermissionIndexerDaoTest { public void selectByUuids_returns_empty_list_when_project_does_not_exist() { insertTestDataForProjectsAndViews(); - List dtos = underTest.selectByUuids(dbClient, dbSession, asList("missing")); - assertThat(dtos).isEmpty(); + List dtos = underTest.selectByUuids(dbClient, dbSession, asList("missing")); + Assertions.assertThat(dtos).isEmpty(); } @Test @@ -181,17 +182,17 @@ public class PermissionIndexerDaoTest { assertThat(underTest.selectByUuids(dbClient, dbSession, projectUuids)) .hasSize(350) - .extracting(PermissionIndexerDao.Dto::getProjectUuid) + .extracting(IndexPermissions::getProjectUuid) .containsAll(projectUuids); } @Test public void return_private_project_without_any_permission_when_no_permission_in_DB() { - List dtos = underTest.selectByUuids(dbClient, dbSession, singletonList(privateProject1.uuid())); + List dtos = underTest.selectByUuids(dbClient, dbSession, singletonList(privateProject1.uuid())); // no permissions - assertThat(dtos).hasSize(1); - PermissionIndexerDao.Dto dto = dtos.get(0); + Assertions.assertThat(dtos).hasSize(1); + IndexPermissions dto = dtos.get(0); assertThat(dto.getGroupIds()).isEmpty(); assertThat(dto.getUserIds()).isEmpty(); assertThat(dto.isAllowAnyone()).isFalse(); @@ -201,10 +202,10 @@ public class PermissionIndexerDaoTest { @Test public void return_public_project_with_only_AllowAnyone_true_when_no_permission_in_DB() { - List dtos = underTest.selectByUuids(dbClient, dbSession, singletonList(publicProject.uuid())); + List dtos = underTest.selectByUuids(dbClient, dbSession, singletonList(publicProject.uuid())); - assertThat(dtos).hasSize(1); - PermissionIndexerDao.Dto dto = dtos.get(0); + Assertions.assertThat(dtos).hasSize(1); + IndexPermissions dto = dtos.get(0); assertThat(dto.getGroupIds()).isEmpty(); assertThat(dto.getUserIds()).isEmpty(); assertThat(dto.isAllowAnyone()).isTrue(); @@ -215,10 +216,10 @@ public class PermissionIndexerDaoTest { @Test public void return_private_project_with_AllowAnyone_false_and_user_id_when_user_is_granted_USER_permission_directly() { dbTester.users().insertProjectPermissionOnUser(user1, USER, privateProject1); - List dtos = underTest.selectByUuids(dbClient, dbSession, singletonList(privateProject1.uuid())); + List dtos = underTest.selectByUuids(dbClient, dbSession, singletonList(privateProject1.uuid())); - assertThat(dtos).hasSize(1); - PermissionIndexerDao.Dto dto = dtos.get(0); + Assertions.assertThat(dtos).hasSize(1); + IndexPermissions dto = dtos.get(0); assertThat(dto.getGroupIds()).isEmpty(); assertThat(dto.getUserIds()).containsOnly(user1.getId()); assertThat(dto.isAllowAnyone()).isFalse(); @@ -230,10 +231,10 @@ public class PermissionIndexerDaoTest { public void return_private_project_with_AllowAnyone_false_and_group_id_but_not_user_id_when_user_is_granted_USER_permission_through_group() { dbTester.users().insertMember(group, user1); dbTester.users().insertProjectPermissionOnGroup(group, USER, privateProject1); - List dtos = underTest.selectByUuids(dbClient, dbSession, singletonList(privateProject1.uuid())); + List dtos = underTest.selectByUuids(dbClient, dbSession, singletonList(privateProject1.uuid())); - assertThat(dtos).hasSize(1); - PermissionIndexerDao.Dto dto = dtos.get(0); + Assertions.assertThat(dtos).hasSize(1); + IndexPermissions dto = dtos.get(0); assertThat(dto.getGroupIds()).containsOnly(group.getId()); assertThat(dto.getUserIds()).isEmpty(); assertThat(dto.isAllowAnyone()).isFalse(); @@ -241,14 +242,14 @@ public class PermissionIndexerDaoTest { assertThat(dto.getQualifier()).isEqualTo(privateProject1.qualifier()); } - private void isPublic(PermissionIndexerDao.Dto view1Authorization, String qualifier) { + private void isPublic(IndexPermissions view1Authorization, String qualifier) { assertThat(view1Authorization.getGroupIds()).isEmpty(); assertThat(view1Authorization.isAllowAnyone()).isTrue(); assertThat(view1Authorization.getUserIds()).isEmpty(); assertThat(view1Authorization.getQualifier()).isEqualTo(qualifier); } - private static PermissionIndexerDao.Dto getByProjectUuid(String projectUuid, Collection dtos) { + private static IndexPermissions getByProjectUuid(String projectUuid, Collection dtos) { return dtos.stream().filter(dto -> dto.getProjectUuid().equals(projectUuid)).findFirst().orElseThrow(IllegalArgumentException::new); } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java similarity index 96% rename from server/sonar-server-common/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java rename to server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java index cab4ce4a0ce..104ce336492 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java @@ -35,7 +35,7 @@ import org.sonar.server.es.EsTester; import org.sonar.server.es.IndexType; import org.sonar.server.es.IndexingResult; import org.sonar.server.es.ProjectIndexer; -import org.sonar.server.user.LightUserSessionRule; +import org.sonar.server.tester.UserSessionRule; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; @@ -43,10 +43,11 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.api.web.UserRole.ADMIN; import static org.sonar.api.web.UserRole.USER; import static org.sonar.server.es.ProjectIndexer.Cause.PERMISSION_CHANGE; +import static org.sonar.server.permission.index.IndexAuthorizationConstants.TYPE_AUTHORIZATION; public class PermissionIndexerTest { - private static final IndexType INDEX_TYPE_FOO_AUTH = AuthorizationTypeSupport.getAuthorizationIndexType(FooIndexDefinition.INDEX_TYPE_FOO); + private static final IndexType INDEX_TYPE_FOO_AUTH = new IndexType(FooIndexDefinition.INDEX_TYPE_FOO.getIndex(), TYPE_AUTHORIZATION); @Rule public ExpectedException expectedException = ExpectedException.none(); @@ -55,9 +56,9 @@ public class PermissionIndexerTest { @Rule public EsTester es = EsTester.createCustom(new FooIndexDefinition()); @Rule - public LightUserSessionRule userSession = new LightUserSessionRule(); + public UserSessionRule userSession = UserSessionRule.standalone(); - private FooIndex fooIndex = new FooIndex(es.client(), new AuthorizationTypeSupport(userSession)); + private FooIndex fooIndex = new FooIndex(es.client(), new WebAuthorizationTypeSupport(userSession)); private FooIndexer fooIndexer = new FooIndexer(es.client()); private PermissionIndexer underTest = new PermissionIndexer(db.getDbClient(), es.client(), fooIndexer); @@ -78,7 +79,7 @@ public class PermissionIndexerTest { public void deletion_resilience_will_deindex_projects() { ComponentDto project1 = createUnindexedPublicProject(); ComponentDto project2 = createUnindexedPublicProject(); - //UserDto user1 = db.users().insertUser(); + // UserDto user1 = db.users().insertUser(); indexOnStartup(); assertThat(es.countDocuments(INDEX_TYPE_FOO_AUTH)).isEqualTo(2); @@ -377,7 +378,7 @@ public class PermissionIndexerTest { assertThat(fooIndex.hasAccessToProject(project.uuid())).isEqualTo(expectedAccess); } - private LightUserSessionRule logIn(UserDto u) { + private UserSessionRule logIn(UserDto u) { userSession.logIn(u.getLogin()).setUserId(u.getId()); return userSession; } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java similarity index 85% rename from server/sonar-server-common/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java rename to server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java index 41a9c6b525e..efe190311ba 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java @@ -38,27 +38,27 @@ public class PermissionIndexerTester { } public PermissionIndexerTester allowOnlyAnyone(ComponentDto project) { - PermissionIndexerDao.Dto dto = new PermissionIndexerDao.Dto(project.uuid(), project.qualifier()); + IndexPermissions dto = new IndexPermissions(project.uuid(), project.qualifier()); dto.allowAnyone(); permissionIndexer.index(asList(dto)); return this; } public PermissionIndexerTester allowOnlyUser(ComponentDto project, UserDto user) { - PermissionIndexerDao.Dto dto = new PermissionIndexerDao.Dto(project.uuid(), project.qualifier()) + IndexPermissions dto = new IndexPermissions(project.uuid(), project.qualifier()) .addUserId(user.getId()); permissionIndexer.index(asList(dto)); return this; } public PermissionIndexerTester allowOnlyGroup(ComponentDto project, GroupDto group) { - PermissionIndexerDao.Dto dto = new PermissionIndexerDao.Dto(project.uuid(), project.qualifier()) + IndexPermissions dto = new IndexPermissions(project.uuid(), project.qualifier()) .addGroupId(group.getId()); permissionIndexer.index(asList(dto)); return this; } - public PermissionIndexerTester allow(PermissionIndexerDao.Dto access) { + public PermissionIndexerTester allow(IndexPermissions access) { permissionIndexer.index(asList(access)); return this; } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/AuthorizationTypeSupportTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/WebAuthorizationTypeSupportTest.java similarity index 95% rename from server/sonar-server-common/src/test/java/org/sonar/server/permission/index/AuthorizationTypeSupportTest.java rename to server/sonar-server/src/test/java/org/sonar/server/permission/index/WebAuthorizationTypeSupportTest.java index e4d0d77ab03..ab4d0168e72 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/permission/index/AuthorizationTypeSupportTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/index/WebAuthorizationTypeSupportTest.java @@ -26,17 +26,17 @@ import org.junit.Rule; import org.junit.Test; import org.sonar.db.user.GroupDto; import org.sonar.db.user.GroupTesting; -import org.sonar.server.user.LightUserSessionRule; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.test.JsonAssert.assertJson; -public class AuthorizationTypeSupportTest { +public class WebAuthorizationTypeSupportTest { @Rule - public LightUserSessionRule userSession = new LightUserSessionRule(); + public UserSessionRule userSession = UserSessionRule.standalone(); - private AuthorizationTypeSupport underTest = new AuthorizationTypeSupport(userSession); + private WebAuthorizationTypeSupport underTest = new WebAuthorizationTypeSupport(userSession); @Test public void createQueryFilter_does_not_include_permission_filters_if_user_is_flagged_as_root() { diff --git a/server/sonar-server/src/test/java/org/sonar/server/projecttag/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/projecttag/ws/SearchActionTest.java index b186377f564..c86710a8097 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/projecttag/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/projecttag/ws/SearchActionTest.java @@ -34,9 +34,9 @@ import org.sonar.server.es.EsTester; import org.sonar.server.measure.index.ProjectMeasuresDoc; import org.sonar.server.measure.index.ProjectMeasuresIndex; import org.sonar.server.measure.index.ProjectMeasuresIndexer; -import org.sonar.server.permission.index.AuthorizationTypeSupport; -import org.sonar.server.permission.index.PermissionIndexerDao; +import org.sonar.server.permission.index.IndexPermissions; import org.sonar.server.permission.index.PermissionIndexerTester; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.TestRequest; import org.sonar.server.ws.WsActionTester; @@ -62,7 +62,7 @@ public class SearchActionTest { private ProjectMeasuresIndexer projectMeasureIndexer = new ProjectMeasuresIndexer(null, es.client()); private PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, projectMeasureIndexer); - private ProjectMeasuresIndex index = new ProjectMeasuresIndex(es.client(), new AuthorizationTypeSupport(userSession), System2.INSTANCE); + private ProjectMeasuresIndex index = new ProjectMeasuresIndex(es.client(), new WebAuthorizationTypeSupport(userSession), System2.INSTANCE); private WsActionTester ws = new WsActionTester(new SearchAction(index)); @@ -110,7 +110,7 @@ public class SearchActionTest { private void index(ProjectMeasuresDoc... docs) { es.putDocuments(INDEX_TYPE_PROJECT_MEASURES, docs); for (ProjectMeasuresDoc doc : docs) { - PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(doc.getId(), Qualifiers.PROJECT); + IndexPermissions access = new IndexPermissions(doc.getId(), Qualifiers.PROJECT); access.allowAnyone(); authorizationIndexerTester.allow(access); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/securityreport/ws/ShowActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/securityreport/ws/ShowActionTest.java index d87519555ee..b8f6acf4e8f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/securityreport/ws/ShowActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/securityreport/ws/ShowActionTest.java @@ -46,8 +46,8 @@ import org.sonar.server.es.StartupIndexer; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; -import org.sonar.server.permission.index.AuthorizationTypeSupport; import org.sonar.server.permission.index.PermissionIndexer; +import org.sonar.server.permission.index.WebAuthorizationTypeSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsActionTester; @@ -71,7 +71,7 @@ public class ShowActionTest { private DbClient dbClient = db.getDbClient(); private DbSession session = db.getSession(); - private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSessionRule, new AuthorizationTypeSupport(userSessionRule)); + private IssueIndex issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSessionRule, new WebAuthorizationTypeSupport(userSessionRule)); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient)); private WsActionTester ws = new WsActionTester(new ShowAction(userSessionRule, TestComponentFinder.from(db), issueIndex, dbClient)); private StartupIndexer permissionIndexer = new PermissionIndexer(dbClient, es.client(), issueIndexer); -- 2.39.5