From 8bf3014f238206ecb370742f749608ae577fb43c Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 29 Mar 2017 15:03:10 +0200 Subject: [PATCH] SONAR-9014 Replace 'sonar.defaultGroup' setting usage by hardcoded 'sonar-users' --- .../test/java/it/settings/SettingsTest.java | 2 +- .../ComputeEngineContainerImplTest.java | 7 ++- .../org/sonar/server/user/UserUpdater.java | 20 +++---- .../server/usergroups/ws/DeleteAction.java | 17 +++--- .../server/usergroups/ws/UpdateAction.java | 25 +-------- .../authentication/SsoAuthenticatorTest.java | 7 +-- .../UserIdentityAuthenticatorTest.java | 9 +--- .../sonar/server/user/UserUpdaterTest.java | 28 ++-------- .../user/ws/ChangePasswordActionTest.java | 6 +-- .../server/user/ws/CreateActionTest.java | 20 +------ .../server/user/ws/UpdateActionTest.java | 9 ++-- .../usergroups/ws/DeleteActionTest.java | 16 ++---- .../usergroups/ws/UpdateActionTest.java | 52 +------------------ .../sonar/core/config/SecurityProperties.java | 12 ++--- .../config/CorePropertyDefinitionsTest.java | 2 +- .../java/org/sonar/api/CoreProperties.java | 12 +++++ .../server/authentication/UserIdentity.java | 3 +- 17 files changed, 54 insertions(+), 193 deletions(-) diff --git a/it/it-tests/src/test/java/it/settings/SettingsTest.java b/it/it-tests/src/test/java/it/settings/SettingsTest.java index 042a82a3df7..c53f507e2ba 100644 --- a/it/it-tests/src/test/java/it/settings/SettingsTest.java +++ b/it/it-tests/src/test/java/it/settings/SettingsTest.java @@ -189,7 +189,7 @@ public class SettingsTest { assertThat(adminSettingsService.values(ValuesRequest.builder().build()).getSettingsList()) .extracting(Setting::getKey) - .contains(PLUGIN_SETTING_KEY, "hidden", "sonar.forceAuthentication", "sonar.defaultGroup", + .contains(PLUGIN_SETTING_KEY, "hidden", "sonar.forceAuthentication", // Settings for scanner "sonar.core.startTime"); 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 fdbd689b8ee..89a1da47da4 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 @@ -107,11 +107,10 @@ public class ComputeEngineContainerImplTest { ); assertThat(picoContainer.getParent().getParent().getParent().getComponentAdapters()).hasSize( COMPONENTS_IN_LEVEL_1_AT_CONSTRUCTION - + 22 // level 1 - + 48 // content of DaoModule + + 23 // level 1 + + 46 // content of DaoModule + 3 // content of EsSearchModule - + 56 // content of CorePropertyDefinitions - + 1 // content of CePropertyDefinitions + + 57 // content of CorePropertyDefinitions ); assertThat(picoContainer.getParent().getParent().getParent().getParent()).isNull(); underTest.stop(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java index 16bbacf758c..22021cd4ce6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java @@ -30,8 +30,6 @@ import java.util.Optional; import java.util.Random; import javax.annotation.Nullable; import org.apache.commons.codec.digest.DigestUtils; -import org.sonar.api.CoreProperties; -import org.sonar.api.config.Settings; import org.sonar.api.platform.NewUserHandler; import org.sonar.api.server.ServerSide; import org.sonar.api.utils.System2; @@ -59,6 +57,8 @@ import static org.sonar.server.ws.WsUtils.checkRequest; @ServerSide public class UserUpdater { + public static final String SONAR_USERS_GROUP_NAME = "sonar-users"; + private static final String SQ_AUTHORITY = "sonarqube"; private static final String LOGIN_PARAM = "Login"; @@ -72,17 +72,15 @@ public class UserUpdater { private static final int NAME_MAX_LENGTH = 200; private final NewUserNotifier newUserNotifier; - private final Settings settings; private final DbClient dbClient; private final UserIndexer userIndexer; private final System2 system2; private final DefaultOrganizationProvider defaultOrganizationProvider; private final OrganizationCreation organizationCreation; - public UserUpdater(NewUserNotifier newUserNotifier, Settings settings, DbClient dbClient, UserIndexer userIndexer, System2 system2, + public UserUpdater(NewUserNotifier newUserNotifier, DbClient dbClient, UserIndexer userIndexer, System2 system2, DefaultOrganizationProvider defaultOrganizationProvider, OrganizationCreation organizationCreation) { this.newUserNotifier = newUserNotifier; - this.settings = settings; this.dbClient = dbClient; this.userIndexer = userIndexer; this.system2 = system2; @@ -383,20 +381,14 @@ public class UserUpdater { } private void addDefaultGroup(DbSession dbSession, UserDto userDto) { - String defaultGroupName = settings.getString(CoreProperties.CORE_DEFAULT_GROUP); - if (defaultGroupName == null) { - return; - } String defOrgUuid = defaultOrganizationProvider.get().getUuid(); List userGroups = dbClient.groupDao().selectByUserLogin(dbSession, userDto.getLogin()); - if (isUserAlreadyMemberOfDefaultGroup(defaultGroupName, defOrgUuid, userGroups)) { + if (isUserAlreadyMemberOfDefaultGroup(SONAR_USERS_GROUP_NAME, defOrgUuid, userGroups)) { return; } - Optional groupDto = dbClient.groupDao().selectByName(dbSession, defOrgUuid, defaultGroupName); + Optional groupDto = dbClient.groupDao().selectByName(dbSession, defOrgUuid, SONAR_USERS_GROUP_NAME); if (!groupDto.isPresent()) { - throw new ServerException(HttpURLConnection.HTTP_INTERNAL_ERROR, - format("The default group '%s' for new users does not exist. Please update the general security settings to fix this issue.", - defaultGroupName)); + throw new ServerException(HttpURLConnection.HTTP_INTERNAL_ERROR, format("The default group '%s' for new users does not exist.", SONAR_USERS_GROUP_NAME)); } dbClient.userGroupDao().insert(dbSession, new UserGroupDto().setUserId(userDto.getId()).setGroupId(groupDto.get().getId())); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/DeleteAction.java b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/DeleteAction.java index 219ef32d44b..cce669d97e1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/DeleteAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/DeleteAction.java @@ -20,21 +20,20 @@ package org.sonar.server.usergroups.ws; import java.util.Optional; -import org.sonar.api.CoreProperties; -import org.sonar.api.config.Settings; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.NewController; import org.sonar.db.DbClient; import org.sonar.db.DbSession; +import org.sonar.db.permission.OrganizationPermission; import org.sonar.db.user.GroupDto; import org.sonar.server.organization.DefaultOrganizationProvider; -import org.sonar.db.permission.OrganizationPermission; import org.sonar.server.user.UserSession; import static com.google.common.base.Preconditions.checkArgument; import static java.lang.String.format; +import static org.sonar.server.user.UserUpdater.SONAR_USERS_GROUP_NAME; import static org.sonar.server.usergroups.ws.GroupWsSupport.PARAM_GROUP_ID; import static org.sonar.server.usergroups.ws.GroupWsSupport.PARAM_GROUP_NAME; import static org.sonar.server.usergroups.ws.GroupWsSupport.defineGroupWsParameters; @@ -44,15 +43,12 @@ public class DeleteAction implements UserGroupsWsAction { private final DbClient dbClient; private final UserSession userSession; private final GroupWsSupport support; - private final Settings settings; private final DefaultOrganizationProvider defaultOrganizationProvider; - public DeleteAction(DbClient dbClient, UserSession userSession, GroupWsSupport support, Settings settings, - DefaultOrganizationProvider defaultOrganizationProvider) { + public DeleteAction(DbClient dbClient, UserSession userSession, GroupWsSupport support, DefaultOrganizationProvider defaultOrganizationProvider) { this.dbClient = dbClient; this.userSession = userSession; this.support = support; - this.settings = settings; this.defaultOrganizationProvider = defaultOrganizationProvider; } @@ -95,11 +91,10 @@ public class DeleteAction implements UserGroupsWsAction { * are not implemented. */ private void checkNotTryingToDeleteDefaultGroup(DbSession dbSession, GroupId group) { - String defaultGroupName = settings.getString(CoreProperties.CORE_DEFAULT_GROUP); - if (defaultGroupName != null && group.getOrganizationUuid().equals(defaultOrganizationProvider.get().getUuid())) { - Optional defaultGroup = dbClient.groupDao().selectByName(dbSession, group.getOrganizationUuid(), defaultGroupName); + if (group.getOrganizationUuid().equals(defaultOrganizationProvider.get().getUuid())) { + Optional defaultGroup = dbClient.groupDao().selectByName(dbSession, group.getOrganizationUuid(), SONAR_USERS_GROUP_NAME); checkArgument(!defaultGroup.isPresent() || defaultGroup.get().getId() != group.getId(), - format("Default group '%s' cannot be deleted", defaultGroupName)); + format("Default group '%s' cannot be deleted", SONAR_USERS_GROUP_NAME)); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UpdateAction.java b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UpdateAction.java index 160ccc6b7c8..2e92f8e9f7a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UpdateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UpdateAction.java @@ -19,7 +19,6 @@ */ package org.sonar.server.usergroups.ws; -import java.util.Objects; import java.util.Optional; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; @@ -31,12 +30,9 @@ import org.sonar.db.DbSession; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.user.GroupDto; import org.sonar.db.user.UserMembershipQuery; -import org.sonar.server.organization.DefaultOrganizationProvider; -import org.sonar.server.platform.PersistentSettings; import org.sonar.server.user.UserSession; import org.sonarqube.ws.WsUserGroups; -import static org.sonar.api.CoreProperties.CORE_DEFAULT_GROUP; import static org.sonar.api.user.UserGroupValidation.GROUP_NAME_MAX_LENGTH; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER; import static org.sonar.server.usergroups.ws.GroupWsSupport.DESCRIPTION_MAX_LENGTH; @@ -53,16 +49,11 @@ public class UpdateAction implements UserGroupsWsAction { private final DbClient dbClient; private final UserSession userSession; private final GroupWsSupport support; - private final PersistentSettings persistentSettings; - private final DefaultOrganizationProvider defaultOrganizationProvider; - public UpdateAction(DbClient dbClient, UserSession userSession, GroupWsSupport support, PersistentSettings persistentSettings, - DefaultOrganizationProvider defaultOrganizationProvider) { + public UpdateAction(DbClient dbClient, UserSession userSession, GroupWsSupport support) { this.dbClient = dbClient; this.userSession = userSession; this.support = support; - this.persistentSettings = persistentSettings; - this.defaultOrganizationProvider = defaultOrganizationProvider; } @Override @@ -107,10 +98,7 @@ public class UpdateAction implements UserGroupsWsAction { changed = true; UserGroupValidation.validateGroupName(newName); support.checkNameDoesNotExist(dbSession, group.getOrganizationUuid(), newName); - - String oldName = group.getName(); group.setName(newName); - updateDefaultGroupIfNeeded(dbSession, org.get(), oldName, newName); } String description = request.param(PARAM_GROUP_DESCRIPTION); @@ -128,17 +116,6 @@ public class UpdateAction implements UserGroupsWsAction { } } - private void updateDefaultGroupIfNeeded(DbSession dbSession, OrganizationDto org, String oldName, String newName) { - // The feature "default group" relies on a property. As organization properties are - // not implemented yet, default groups are not supported on non-default organizations - if (defaultOrganizationProvider.get().getUuid().equals(org.getUuid())) { - String defaultGroupName = persistentSettings.getString(CORE_DEFAULT_GROUP); - if (Objects.equals(defaultGroupName, oldName)) { - persistentSettings.saveProperty(dbSession, CORE_DEFAULT_GROUP, newName); - } - } - } - private void writeResponse(DbSession dbSession, Request request, Response response, OrganizationDto organization, GroupDto group) { UserMembershipQuery query = UserMembershipQuery.builder() .groupId(group.getId()) diff --git a/server/sonar-server/src/test/java/org/sonar/server/authentication/SsoAuthenticatorTest.java b/server/sonar-server/src/test/java/org/sonar/server/authentication/SsoAuthenticatorTest.java index 0cb53e939f6..e79ebdfc0f1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/authentication/SsoAuthenticatorTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/authentication/SsoAuthenticatorTest.java @@ -89,6 +89,7 @@ public class SsoAuthenticatorTest { private GroupDto group1; private GroupDto group2; + private GroupDto sonarUsers; private System2 system2 = mock(System2.class); private Settings settings = new MapSettings(); @@ -97,7 +98,7 @@ public class SsoAuthenticatorTest { private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private UserIdentityAuthenticator userIdentityAuthenticator = new UserIdentityAuthenticator( db.getDbClient(), - new UserUpdater(mock(NewUserNotifier.class), settings, db.getDbClient(), mock(UserIndexer.class), System2.INSTANCE, defaultOrganizationProvider, organizationCreation), + new UserUpdater(mock(NewUserNotifier.class), db.getDbClient(), mock(UserIndexer.class), System2.INSTANCE, defaultOrganizationProvider, organizationCreation), defaultOrganizationProvider); private HttpServletResponse response = mock(HttpServletResponse.class); @@ -111,7 +112,7 @@ public class SsoAuthenticatorTest { when(system2.now()).thenReturn(NOW); group1 = db.users().insertGroup(db.getDefaultOrganization(), GROUP1); group2 = db.users().insertGroup(db.getDefaultOrganization(), GROUP2); - db.commit(); + sonarUsers = db.users().insertGroup(db.getDefaultOrganization(), "sonar-users"); } @Test @@ -135,7 +136,7 @@ public class SsoAuthenticatorTest { HttpServletRequest request = createRequest(DEFAULT_LOGIN, null, null, null); underTest.authenticate(request, response); - verifyUserInDb(DEFAULT_LOGIN, DEFAULT_LOGIN, null); + verifyUserInDb(DEFAULT_LOGIN, DEFAULT_LOGIN, null, sonarUsers); verify(authenticationEvent).loginSuccess(request, DEFAULT_LOGIN, Source.sso()); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/authentication/UserIdentityAuthenticatorTest.java b/server/sonar-server/src/test/java/org/sonar/server/authentication/UserIdentityAuthenticatorTest.java index d36d54f66c8..9f3fc517940 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/authentication/UserIdentityAuthenticatorTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/authentication/UserIdentityAuthenticatorTest.java @@ -25,8 +25,6 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.sonar.api.config.MapSettings; -import org.sonar.api.config.Settings; import org.sonar.api.server.authentication.UserIdentity; import org.sonar.api.utils.System2; import org.sonar.api.utils.internal.AlwaysIncreasingSystem2; @@ -74,24 +72,21 @@ public class UserIdentityAuthenticatorTest { @Rule public DbTester db = DbTester.create(new AlwaysIncreasingSystem2()); - private Settings settings = new MapSettings(); private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private OrganizationCreation organizationCreation = mock(OrganizationCreation.class); private UserUpdater userUpdater = new UserUpdater( mock(NewUserNotifier.class), - settings, db.getDbClient(), mock(UserIndexer.class), System2.INSTANCE, defaultOrganizationProvider, - organizationCreation); + organizationCreation); private UserIdentityAuthenticator underTest = new UserIdentityAuthenticator(db.getDbClient(), userUpdater, defaultOrganizationProvider); private GroupDto defaultGroup; @Before public void setUp() throws Exception { - settings.setProperty("sonar.defaultGroup", DEFAULT_GROUP); - defaultGroup = db.users().insertGroup(db.getDefaultOrganization(), DEFAULT_GROUP); + defaultGroup = db.users().insertGroup(db.getDefaultOrganization(), "sonar-users"); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java index 3e36354bf0f..7b6677f0444 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java @@ -30,7 +30,6 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.ArgumentCaptor; import org.sonar.api.config.MapSettings; -import org.sonar.api.config.Settings; import org.sonar.api.platform.NewUserHandler; import org.sonar.api.utils.System2; import org.sonar.db.DbClient; @@ -60,7 +59,6 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.sonar.api.CoreProperties.CORE_DEFAULT_GROUP; import static org.sonar.db.user.UserTesting.newDisabledUser; import static org.sonar.db.user.UserTesting.newLocalUser; import static org.sonar.db.user.UserTesting.newUserDto; @@ -87,12 +85,11 @@ public class UserUpdaterTest { private DbClient dbClient = db.getDbClient(); private NewUserNotifier newUserNotifier = mock(NewUserNotifier.class); private ArgumentCaptor newUserHandler = ArgumentCaptor.forClass(NewUserHandler.Context.class); - private Settings settings = new MapSettings(); private DbSession session = db.getSession(); private UserIndexer userIndexer = new UserIndexer(dbClient, es.client()); private OrganizationCreation organizationCreation = mock(OrganizationCreation.class); private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); - private UserUpdater underTest = new UserUpdater(newUserNotifier, settings, dbClient, userIndexer, system2, defaultOrganizationProvider, organizationCreation); + private UserUpdater underTest = new UserUpdater(newUserNotifier, dbClient, userIndexer, system2, defaultOrganizationProvider, organizationCreation); @Before public void setUp() { @@ -460,26 +457,10 @@ public class UserUpdaterTest { assertThat(groups.get("user")).containsOnly(DEFAULT_GROUP); } - @Test - public void doest_not_fail_when_no_default_group() { - settings.setProperty(CORE_DEFAULT_GROUP, (String) null); - - underTest.create(db.getSession(), NewUser.builder() - .setLogin("user") - .setName("User") - .setEmail("user@mail.com") - .setPassword("password") - .setScmAccounts(newArrayList("u1", "u_1")) - .build()); - - assertThat(dbClient.userDao().selectByLogin(session, "user")).isNotNull(); - } - @Test public void fail_to_associate_default_group_when_default_group_does_not_exist() { - settings.setProperty(CORE_DEFAULT_GROUP, "polop"); expectedException.expect(ServerException.class); - expectedException.expectMessage("The default group 'polop' for new users does not exist. Please update the general security settings to fix this issue."); + expectedException.expectMessage("The default group 'sonar-users' for new users does not exist."); underTest.create(db.getSession(), NewUser.builder() .setLogin("user") @@ -1099,10 +1080,7 @@ public class UserUpdaterTest { } private GroupDto createDefaultGroup() { - settings.setProperty(CORE_DEFAULT_GROUP, DEFAULT_GROUP); - GroupDto groupDto = GroupTesting.newGroupDto().setName(DEFAULT_GROUP).setOrganizationUuid(db.getDefaultOrganization().getUuid()); - db.users().insertGroup(groupDto); - return groupDto; + return db.users().insertGroup(GroupTesting.newGroupDto().setName(DEFAULT_GROUP).setOrganizationUuid(db.getDefaultOrganization().getUuid())); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/ChangePasswordActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/ChangePasswordActionTest.java index 31c64297b61..a3a731b0402 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/ChangePasswordActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/ChangePasswordActionTest.java @@ -26,7 +26,6 @@ import org.junit.rules.ExpectedException; import org.sonar.api.config.MapSettings; import org.sonar.api.utils.System2; import org.sonar.db.DbTester; -import org.sonar.db.user.GroupTesting; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.ForbiddenException; @@ -56,8 +55,7 @@ public class ChangePasswordActionTest { @Rule public UserSessionRule userSessionRule = UserSessionRule.standalone().logIn(); - private UserUpdater userUpdater = new UserUpdater(mock(NewUserNotifier.class), new MapSettings(), db.getDbClient(), - new UserIndexer(db.getDbClient(), esTester.client()), + private UserUpdater userUpdater = new UserUpdater(mock(NewUserNotifier.class), db.getDbClient(), new UserIndexer(db.getDbClient(), esTester.client()), System2.INSTANCE, TestDefaultOrganizationProvider.from(db), mock(OrganizationCreation.class)); @@ -66,7 +64,7 @@ public class ChangePasswordActionTest { @Before public void setUp() { - db.users().insertGroup(GroupTesting.newGroupDto().setName("sonar-users")); + db.users().insertGroup(db.getDefaultOrganization(), "sonar-users"); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java index 96d1de7c32f..b8fb9e76659 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java @@ -34,12 +34,10 @@ import org.sonar.api.utils.internal.AlwaysIncreasingSystem2; import org.sonar.core.config.CorePropertyDefinitions; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.user.GroupDto; import org.sonar.db.user.UserDto; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.ForbiddenException; -import org.sonar.server.exceptions.ServerException; import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.OrganizationCreation; import org.sonar.server.organization.TestDefaultOrganizationProvider; @@ -68,7 +66,7 @@ import static org.sonar.db.user.UserTesting.newUserDto; public class CreateActionTest { private static final String DEFAULT_GROUP_NAME = "sonar-users"; - private Settings settings = new MapSettings().setProperty("sonar.defaultGroup", DEFAULT_GROUP_NAME); + private Settings settings = new MapSettings(); private System2 system2 = new AlwaysIncreasingSystem2(); @Rule @@ -88,7 +86,7 @@ public class CreateActionTest { private OrganizationCreation organizationCreation = mock(OrganizationCreation.class); private WsActionTester tester = new WsActionTester(new CreateAction( db.getDbClient(), - new UserUpdater(mock(NewUserNotifier.class), settings, db.getDbClient(), userIndexer, system2, defaultOrganizationProvider, + new UserUpdater(mock(NewUserNotifier.class), db.getDbClient(), userIndexer, system2, defaultOrganizationProvider, organizationCreation), userSessionRule)); @@ -253,20 +251,6 @@ public class CreateActionTest { assertThat(db.users().selectUserByLogin("john").get().isActive()).isTrue(); } - @Test - public void request_fails_with_ServerException_when_default_group_belongs_to_another_organization() throws Exception { - OrganizationDto otherOrganization = db.organizations().insert(); - GroupDto group = db.users().insertGroup(otherOrganization); - setDefaultGroupProperty(group); - logInAsSystemAdministrator(); - - expectedException.expect(ServerException.class); - expectedException.expectMessage("The default group '" + group.getName() + "' for new users does not exist. " + - "Please update the general security settings to fix this issue"); - - executeRequest("bar"); - } - @Test public void fail_when_missing_login() throws Exception { logInAsSystemAdministrator(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java index 90bd9bd999c..feea92397b9 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java @@ -45,14 +45,13 @@ import org.sonar.server.ws.WsTester; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; -import static org.sonar.db.user.GroupTesting.newGroupDto; import static org.sonar.db.user.UserTesting.newUserDto; public class UpdateActionTest { private static final OrganizationCreation ORGANIZATION_CREATION_NOT_USED_FOR_UPDATE = null; - private final Settings settings = new MapSettings().setProperty("sonar.defaultGroup", "sonar-users"); + private final Settings settings = new MapSettings(); private System2 system2 = new System2(); @@ -71,12 +70,10 @@ public class UpdateActionTest { @Before public void setUp() { - dbClient.groupDao().insert(session, newGroupDto().setName("sonar-users")); - session.commit(); - + dbTester.users().insertGroup(dbTester.getDefaultOrganization(), "sonar-users"); userIndexer = new UserIndexer(dbClient, esTester.client()); tester = new WsTester(new UsersWs(new UpdateAction( - new UserUpdater(mock(NewUserNotifier.class), settings, dbClient, userIndexer, system2, defaultOrganizationProvider, ORGANIZATION_CREATION_NOT_USED_FOR_UPDATE), + new UserUpdater(mock(NewUserNotifier.class), dbClient, userIndexer, system2, defaultOrganizationProvider, ORGANIZATION_CREATION_NOT_USED_FOR_UPDATE), userSessionRule, new UserJsonWriter(userSessionRule), dbClient))); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java index 51d6edf9dcd..922ab178cba 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java @@ -23,9 +23,6 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.sonar.api.CoreProperties; -import org.sonar.api.config.MapSettings; -import org.sonar.api.config.Settings; import org.sonar.api.utils.internal.AlwaysIncreasingSystem2; import org.sonar.api.web.UserRole; import org.sonar.db.DbTester; @@ -45,6 +42,7 @@ import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER; +import static org.sonar.server.user.UserUpdater.SONAR_USERS_GROUP_NAME; import static org.sonar.server.usergroups.ws.GroupWsSupport.PARAM_GROUP_ID; import static org.sonar.server.usergroups.ws.GroupWsSupport.PARAM_GROUP_NAME; import static org.sonar.server.usergroups.ws.GroupWsSupport.PARAM_ORGANIZATION_KEY; @@ -61,19 +59,11 @@ public class DeleteActionTest { private ComponentDbTester componentTester = new ComponentDbTester(db); private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private GroupDto defaultGroup; - private WsTester ws; + private WsTester ws = new WsTester(new UserGroupsWs(new DeleteAction(db.getDbClient(), userSession, newGroupWsSupport(), defaultOrganizationProvider))); @Before public void setUp() { - defaultGroup = db.users().insertGroup(db.getDefaultOrganization(), CoreProperties.CORE_DEFAULT_GROUP_DEFAULT_VALUE); - Settings settings = new MapSettings().setProperty(CoreProperties.CORE_DEFAULT_GROUP, CoreProperties.CORE_DEFAULT_GROUP_DEFAULT_VALUE); - - ws = new WsTester(new UserGroupsWs( - new DeleteAction( - db.getDbClient(), - userSession, - newGroupWsSupport(), - settings, defaultOrganizationProvider))); + defaultGroup = db.users().insertGroup(db.getDefaultOrganization(), SONAR_USERS_GROUP_NAME); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UpdateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UpdateActionTest.java index a1b1eca0b81..879a201c667 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UpdateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UpdateActionTest.java @@ -20,12 +20,10 @@ package org.sonar.server.usergroups.ws; import org.apache.commons.lang.StringUtils; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.sonar.api.utils.System2; -import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.user.GroupDto; @@ -34,16 +32,9 @@ import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.ServerException; import org.sonar.server.organization.TestDefaultOrganizationProvider; -import org.sonar.server.platform.PersistentSettings; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER; public class UpdateActionTest { @@ -59,16 +50,7 @@ public class UpdateActionTest { public ExpectedException expectedException = ExpectedException.none(); private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); - private PersistentSettings settings = mock(PersistentSettings.class); - private WsTester ws = new WsTester( - new UserGroupsWs(new UpdateAction(db.getDbClient(), userSession, new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider), settings, defaultOrganizationProvider))); - - @Before - public void setUp() throws Exception { - GroupWsSupport groupSupport = new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider); - ws = new WsTester(new UserGroupsWs(new UpdateAction(db.getDbClient(), userSession, groupSupport, settings, defaultOrganizationProvider))); - when(settings.getString(DEFAULT_GROUP_NAME_KEY)).thenReturn(DEFAULT_GROUP_NAME_VALUE); - } + private WsTester ws = new WsTester(new UserGroupsWs(new UpdateAction(db.getDbClient(), userSession, new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider)))); @Test public void update_both_name_and_description() throws Exception { @@ -133,38 +115,6 @@ public class UpdateActionTest { .setParam("id", group.getId().toString()) .setParam("name", "new-name") .execute(); - - verify(settings).saveProperty(any(DbSession.class), eq(DEFAULT_GROUP_NAME_KEY), eq("new-name")); - } - - @Test - public void update_default_group_name_does_not_update_default_group_setting_when_null() throws Exception { - when(settings.getString(DEFAULT_GROUP_NAME_KEY)).thenReturn(null); - GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), DEFAULT_GROUP_NAME_VALUE); - loginAsAdminOnDefaultOrganization(); - - newRequest() - .setParam("id", group.getId().toString()) - .setParam("name", "new-name") - .execute(); - - verify(settings, never()).saveProperty(any(DbSession.class), eq(DEFAULT_GROUP_NAME_KEY), eq("new-name")); - } - - @Test - public void do_not_update_default_group_of_default_organization_if_updating_group_on_non_default_organization() throws Exception { - OrganizationDto org = db.organizations().insert(); - when(settings.getString(DEFAULT_GROUP_NAME_KEY)).thenReturn(DEFAULT_GROUP_NAME_VALUE); - GroupDto groupInDefaultOrg = db.users().insertGroup(db.getDefaultOrganization(), DEFAULT_GROUP_NAME_VALUE); - GroupDto group = db.users().insertGroup(org, DEFAULT_GROUP_NAME_VALUE); - loginAsAdmin(org); - - newRequest() - .setParam("id", group.getId().toString()) - .setParam("name", "new-name") - .execute(); - - verify(settings, never()).saveProperty(any(DbSession.class), eq(DEFAULT_GROUP_NAME_KEY), eq("new-name")); } @Test diff --git a/sonar-core/src/main/java/org/sonar/core/config/SecurityProperties.java b/sonar-core/src/main/java/org/sonar/core/config/SecurityProperties.java index bdd72b397f9..27f4f178c5f 100644 --- a/sonar-core/src/main/java/org/sonar/core/config/SecurityProperties.java +++ b/sonar-core/src/main/java/org/sonar/core/config/SecurityProperties.java @@ -19,12 +19,13 @@ */ package org.sonar.core.config; -import com.google.common.collect.ImmutableList; import java.util.List; import org.sonar.api.CoreProperties; import org.sonar.api.PropertyType; import org.sonar.api.config.PropertyDefinition; +import static java.util.Collections.singletonList; + class SecurityProperties { private SecurityProperties() { @@ -32,14 +33,7 @@ class SecurityProperties { } static List all() { - return ImmutableList.of( - PropertyDefinition.builder(CoreProperties.CORE_DEFAULT_GROUP) - .defaultValue(CoreProperties.CORE_DEFAULT_GROUP_DEFAULT_VALUE) - .name("Default user group") - .description("Any new users will automatically join this group.") - .category(CoreProperties.CATEGORY_SECURITY) - .build(), - + return singletonList( PropertyDefinition.builder(CoreProperties.CORE_FORCE_AUTHENTICATION_PROPERTY) .defaultValue(Boolean.toString(CoreProperties.CORE_FORCE_AUTHENTICATION_DEFAULT_VALUE)) .name("Force user authentication") diff --git a/sonar-core/src/test/java/org/sonar/core/config/CorePropertyDefinitionsTest.java b/sonar-core/src/test/java/org/sonar/core/config/CorePropertyDefinitionsTest.java index 50a3028672f..0d1e7f05b9f 100644 --- a/sonar-core/src/test/java/org/sonar/core/config/CorePropertyDefinitionsTest.java +++ b/sonar-core/src/test/java/org/sonar/core/config/CorePropertyDefinitionsTest.java @@ -33,7 +33,7 @@ public class CorePropertyDefinitionsTest { @Test public void all() { List defs = CorePropertyDefinitions.all(); - assertThat(defs).hasSize(58); + assertThat(defs).hasSize(57); } @Test diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java b/sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java index 54612177c24..f5753d6488b 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java @@ -191,8 +191,20 @@ public interface CoreProperties { @Deprecated String CORE_ALLOW_USERS_TO_SIGNUP_PROPERTY = "sonar.allowUsersToSignUp"; + /** + * @deprecated since 6.4. The default group is hardcoded to 'sonar-users' + * @see SONAR-9014/a> + */ + @Deprecated String CORE_DEFAULT_GROUP = "sonar.defaultGroup"; + + /** + * @deprecated since 6.4. The default group is hardcoded to 'sonar-users' + * @see SONAR-9014/a> + */ + @Deprecated String CORE_DEFAULT_GROUP_DEFAULT_VALUE = "sonar-users"; + boolean CORE_ALLOW_USERS_TO_SIGNUP_DEAULT_VALUE = false; /** diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/authentication/UserIdentity.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/authentication/UserIdentity.java index 18b55dfc1a1..f26c4491b78 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/server/authentication/UserIdentity.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/authentication/UserIdentity.java @@ -26,7 +26,6 @@ import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; -import org.sonar.api.CoreProperties; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; @@ -160,7 +159,7 @@ public final class UserIdentity { *
    *
  • When groups are not empty, group membership is synchronized when user logs in : *
      - *
    • User won't belong anymore to a group that is not in the list (even the default group defined in {@link CoreProperties#CORE_DEFAULT_GROUP})
    • + *
    • User won't belong anymore to a group that is not in the list (even the default group defined in 'sonar-users')
    • *
    • User will belong only to groups that exist in SonarQube
    • *
    • Groups that don't exist in SonarQube are silently ignored
    • *
    -- 2.39.5