From dfc395c2b6cd711677d9eae8118a9201484b2a2c Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Tue, 1 Sep 2015 08:07:49 +0200 Subject: [PATCH] Rename WsGroup and WsProject to WsGroupRef and WsProjectRef --- .../ApplyPermissionTemplateQuery.java | 49 ++++++++++--------- .../server/permission/PermissionService.java | 43 ++++++++-------- .../server/permission/ws/AddGroupAction.java | 6 +-- .../ws/AddGroupToTemplateAction.java | 8 +-- .../server/permission/ws/AddUserAction.java | 6 +-- .../ws/AddUserToTemplateAction.java | 8 +-- .../server/permission/ws/GroupsAction.java | 6 +-- .../server/permission/ws/Parameters.java | 29 ++++++----- .../ws/PermissionDependenciesFinder.java | 11 ++++- .../permission/ws/PermissionRequest.java | 2 +- .../ws/PermissionRequestValidator.java | 5 +- .../permission/ws/RemoveGroupAction.java | 6 +-- .../ws/RemoveGroupFromTemplateAction.java | 8 +-- .../permission/ws/RemoveUserAction.java | 6 +-- .../ws/RemoveUserFromTemplateAction.java | 8 +-- .../ws/SearchProjectPermissionsAction.java | 8 ++- .../SearchProjectPermissionsDataLoader.java | 2 +- .../server/permission/ws/UsersAction.java | 6 +-- .../server/permission/ws/WsProjectRef.java | 20 ++++---- .../ApplyPermissionTemplateQueryTest.java | 19 +++---- .../permission/ws/AddGroupActionTest.java | 10 ++-- .../ws/AddGroupToTemplateActionTest.java | 6 +-- .../permission/ws/AddUserActionTest.java | 10 ++-- .../ws/AddUserToTemplateActionTest.java | 2 +- .../permission/ws/GroupsActionTest.java | 7 ++- .../ws/PermissionRequestValidatorTest.java | 42 ---------------- .../permission/ws/RemoveGroupActionTest.java | 10 ++-- .../ws/RemoveGroupFromTemplateActionTest.java | 6 +-- .../permission/ws/RemoveUserActionTest.java | 10 ++-- .../ws/RemoveUserFromTemplateActionTest.java | 2 +- .../SearchProjectPermissionsActionTest.java | 4 +- .../ws/UpdateTemplateActionTest.java | 5 ++ .../server/permission/ws/UsersActionTest.java | 6 +-- .../db/permission/PermissionRepository.java | 8 +-- .../db/permission/PermissionTemplateDto.java | 15 ++++++ 35 files changed, 188 insertions(+), 211 deletions(-) delete mode 100644 server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionRequestValidatorTest.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ApplyPermissionTemplateQuery.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ApplyPermissionTemplateQuery.java index 21bec015654..2ff9b702368 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ApplyPermissionTemplateQuery.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ApplyPermissionTemplateQuery.java @@ -20,50 +20,51 @@ package org.sonar.server.permission; -import org.apache.commons.lang.StringUtils; -import org.picocontainer.annotations.Nullable; +import java.util.List; +import java.util.Map; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.util.RubyUtils; -import java.util.List; -import java.util.Map; +import static com.google.common.base.CharMatcher.WHITESPACE; public class ApplyPermissionTemplateQuery { private static final String TEMPLATE_KEY = "template_key"; private static final String COMPONENTS_KEY = "components"; - private final String templateKey; - private List selectedComponents; + private final String templateUuid; + private List componentKeys; - private ApplyPermissionTemplateQuery(@Nullable String templateKey) { - this.templateKey = templateKey; + private ApplyPermissionTemplateQuery(String templateUuid, List componentKeys) { + this.templateUuid = templateUuid; + this.componentKeys = componentKeys; + validate(); } - public static ApplyPermissionTemplateQuery buildFromParams(Map params) { - ApplyPermissionTemplateQuery query = new ApplyPermissionTemplateQuery((String)params.get(TEMPLATE_KEY)); - query.setSelectedComponents(RubyUtils.toStrings(params.get(COMPONENTS_KEY))); - return query; + public static ApplyPermissionTemplateQuery createFromMap(Map params) { + String templateUuid = (String) params.get(TEMPLATE_KEY); + List componentKeys = RubyUtils.toStrings(params.get(COMPONENTS_KEY)); + return new ApplyPermissionTemplateQuery(templateUuid, componentKeys); } - public String getTemplateKey() { - return templateKey; + public static ApplyPermissionTemplateQuery create(String templateUuid, List componentKeys) { + return new ApplyPermissionTemplateQuery(templateUuid, componentKeys); } - public List getSelectedComponents() { - return selectedComponents; + public String getTemplateUuid() { + return templateUuid; } - public void validate() { - if(StringUtils.isBlank(templateKey)) { + public List getComponentKeys() { + return componentKeys; + } + + private void validate() { + if (templateUuid == null || WHITESPACE.trimFrom(templateUuid).isEmpty()) { throw new BadRequestException("Permission template is mandatory"); } - if(selectedComponents == null || selectedComponents.isEmpty()) { - throw new BadRequestException("Please provide at least one entry to which the permission template should be applied"); + if (componentKeys == null || componentKeys.isEmpty()) { + throw new BadRequestException("No project provided. Please provide at least one project."); } } - - private void setSelectedComponents(List selectedComponents) { - this.selectedComponents = selectedComponents; - } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionService.java b/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionService.java index 3777076e03b..4849b402f01 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionService.java @@ -41,6 +41,9 @@ import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.issue.index.IssueAuthorizationIndexer; import org.sonar.server.user.UserSession; +import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; +import static org.sonar.server.permission.PermissionPrivilegeChecker.checkProjectAdminUserByComponentKey; + /** * Used by ruby code
Internal.permissions
*/ @@ -160,40 +163,34 @@ public class PermissionService { indexProjectPermissions(); } + /** + * @deprecated since 5.2 – to be deleted once Permission Template page does not rely on Ruby + */ + @Deprecated public void applyPermissionTemplate(Map params) { - userSession.checkLoggedIn(); - ApplyPermissionTemplateQuery query = ApplyPermissionTemplateQuery.buildFromParams(params); + ApplyPermissionTemplateQuery query = ApplyPermissionTemplateQuery.createFromMap(params); applyPermissionTemplate(query); } - void applyPermissionTemplate(ApplyPermissionTemplateQuery query) { - query.validate(); - - boolean projectsChanged = false; - DbSession session = dbClient.openSession(false); + public void applyPermissionTemplate(ApplyPermissionTemplateQuery query) { + DbSession dbSession = dbClient.openSession(false); try { - // If only one project is selected, check user has admin permission on it, otherwise we are in the case of a bulk change and only - // system - // admin has permission to do it - if (query.getSelectedComponents().size() == 1) { - checkProjectAdminPermission(query.getSelectedComponents().get(0)); + if (query.getComponentKeys().size() == 1) { + checkProjectAdminUserByComponentKey(userSession, query.getComponentKeys().get(0)); } else { - checkProjectAdminPermission(null); - userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + checkGlobalAdminUser(userSession); } - for (String componentKey : query.getSelectedComponents()) { - ComponentDto component = componentFinder.getByKey(session, componentKey); - permissionRepository.applyPermissionTemplate(session, query.getTemplateKey(), component.getId()); - projectsChanged = true; + for (String componentKey : query.getComponentKeys()) { + ComponentDto component = componentFinder.getByKey(dbSession, componentKey); + permissionRepository.applyPermissionTemplate(dbSession, query.getTemplateUuid(), component.getId()); } - session.commit(); + dbSession.commit(); } finally { - session.close(); - } - if (projectsChanged) { - indexProjectPermissions(); + dbClient.closeSession(dbSession); } + + indexProjectPermissions(); } private void applyChange(Operation operation, PermissionChange change, DbSession session) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupAction.java index cec958a2ebd..8d6e381d631 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupAction.java @@ -32,8 +32,7 @@ import org.sonar.server.permission.ws.PermissionRequest.Builder; import static org.sonar.server.permission.ws.Parameters.createGroupIdParameter; import static org.sonar.server.permission.ws.Parameters.createGroupNameParameter; import static org.sonar.server.permission.ws.Parameters.createPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectKeyParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectUuidParameter; +import static org.sonar.server.permission.ws.Parameters.createProjectParameter; public class AddGroupAction implements PermissionsWsAction { @@ -63,8 +62,7 @@ public class AddGroupAction implements PermissionsWsAction { createPermissionParameter(action); createGroupNameParameter(action); createGroupIdParameter(action); - createProjectUuidParameter(action); - createProjectKeyParameter(action); + createProjectParameter(action); } @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java index 658f9fb555b..e48bb2232d4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java @@ -37,11 +37,11 @@ import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobal import static org.sonar.server.permission.ws.PermissionRequestValidator.validateNotAnyoneAndAdminPermission; import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; -import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID_EXPLICIT; import static org.sonar.server.permission.ws.Parameters.createGroupIdParameter; import static org.sonar.server.permission.ws.Parameters.createGroupNameParameter; import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; +import static org.sonar.server.permission.ws.Parameters.createExplicitTemplateId; public class AddGroupToTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -65,7 +65,7 @@ public class AddGroupToTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameterToAddRemoveUserOrGroup(action); + createExplicitTemplateId(action); createProjectPermissionParameter(action); createGroupIdParameter(action); createGroupNameParameter(action); @@ -75,7 +75,7 @@ public class AddGroupToTemplateAction implements PermissionsWsAction { public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String templateKey = wsRequest.mandatoryParam(PARAM_LONG_TEMPLATE_ID); + String templateKey = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID_EXPLICIT); String permission = wsRequest.mandatoryParam(PARAM_PERMISSION); WsGroupRef group = WsGroupRef.fromRequest(wsRequest); diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserAction.java index 7812f82795b..612789bef85 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserAction.java @@ -30,8 +30,7 @@ import org.sonar.server.permission.PermissionUpdater; import org.sonar.server.permission.ws.PermissionRequest.Builder; import static org.sonar.server.permission.ws.Parameters.createPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectKeyParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectUuidParameter; +import static org.sonar.server.permission.ws.Parameters.createProjectParameter; import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter; public class AddUserAction implements PermissionsWsAction { @@ -60,8 +59,7 @@ public class AddUserAction implements PermissionsWsAction { createPermissionParameter(action); createUserLoginParameter(action); - createProjectUuidParameter(action); - createProjectKeyParameter(action); + createProjectParameter(action); } @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java index eb1e3197693..7cb65ba0be5 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java @@ -38,10 +38,10 @@ import static org.sonar.db.user.GroupMembershipQuery.IN; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; -import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID_EXPLICIT; import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN; import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; +import static org.sonar.server.permission.ws.Parameters.createExplicitTemplateId; import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter; public class AddUserToTemplateAction implements PermissionsWsAction { @@ -65,7 +65,7 @@ public class AddUserToTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameterToAddRemoveUserOrGroup(action); + createExplicitTemplateId(action); createProjectPermissionParameter(action); createUserLoginParameter(action); } @@ -74,7 +74,7 @@ public class AddUserToTemplateAction implements PermissionsWsAction { public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String templateKey = wsRequest.mandatoryParam(PARAM_LONG_TEMPLATE_ID); + String templateKey = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID_EXPLICIT); String permission = wsRequest.mandatoryParam(PARAM_PERMISSION); final String userLogin = wsRequest.mandatoryParam(PARAM_USER_LOGIN); diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/GroupsAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/GroupsAction.java index e41c6dda984..7f0b4dc98ee 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/GroupsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/GroupsAction.java @@ -44,8 +44,7 @@ import static com.google.common.base.Objects.firstNonNull; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkProjectAdminUserByComponentDto; import static org.sonar.server.permission.PermissionQueryParser.toMembership; import static org.sonar.server.permission.ws.Parameters.createPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectKeyParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectUuidParameter; +import static org.sonar.server.permission.ws.Parameters.createProjectParameter; import static org.sonar.server.ws.WsUtils.writeProtobuf; public class GroupsAction implements PermissionsWsAction { @@ -78,8 +77,7 @@ public class GroupsAction implements PermissionsWsAction { .setHandler(this); createPermissionParameter(action); - createProjectUuidParameter(action); - createProjectKeyParameter(action); + createProjectParameter(action); } @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java index 211b4f61d04..b008c1577c7 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java @@ -24,29 +24,31 @@ import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.permission.ProjectPermissions; +import static java.lang.String.format; + class Parameters { static final String PARAM_PERMISSION = "permission"; static final String PARAM_GROUP_NAME = "groupName"; static final String PARAM_GROUP_ID = "groupId"; - static final String PARAM_PROJECT_UUID = "projectId"; + static final String PARAM_PROJECT_ID = "projectId"; static final String PARAM_PROJECT_KEY = "projectKey"; static final String PARAM_USER_LOGIN = "login"; - static final String PARAM_LONG_TEMPLATE_ID = "templateId"; + static final String PARAM_TEMPLATE_ID_EXPLICIT = "templateId"; static final String PARAM_TEMPLATE_ID = "id"; static final String PARAM_TEMPLATE_NAME = "name"; static final String PARAM_TEMPLATE_DESCRIPTION = "description"; static final String PARAM_TEMPLATE_PATTERN = "projectKeyPattern"; - private static final String PERMISSION_PARAM_DESCRIPTION = String.format("Permission" + + private static final String PERMISSION_PARAM_DESCRIPTION = format("Permission" + "
    " + "
  • Possible values for global permissions: %s
  • " + "
  • Possible values for project permissions %s
  • " + "
", GlobalPermissions.ALL_ON_ONE_LINE, ProjectPermissions.ALL_ON_ONE_LINE); - private static final String PROJECT_PERMISSION_PARAM_DESCRIPTION = String.format("Permission" + + private static final String PROJECT_PERMISSION_PARAM_DESCRIPTION = format("Permission" + "
    " + "
  • Possible values for project permissions %s
  • " + "
", @@ -80,13 +82,18 @@ class Parameters { .setExampleValue("42"); } - static void createProjectUuidParameter(NewAction action) { - action.createParam(PARAM_PROJECT_UUID) + static void createProjectParameter(NewAction action) { + createProjectIdParameter(action); + createProjectKeyParameter(action); + } + + private static void createProjectIdParameter(NewAction action) { + action.createParam(PARAM_PROJECT_ID) .setDescription("Project id") .setExampleValue("ce4c03d6-430f-40a9-b777-ad877c00aa4d"); } - static void createProjectKeyParameter(NewAction action) { + private static void createProjectKeyParameter(NewAction action) { action.createParam(PARAM_PROJECT_KEY) .setDescription("Project key") .setExampleValue("org.apache.hbas:hbase"); @@ -99,11 +106,11 @@ class Parameters { .setExampleValue("g.hopper"); } - static void createTemplateKeyParameterToAddRemoveUserOrGroup(NewAction action) { - action.createParam(PARAM_LONG_TEMPLATE_ID) + static void createExplicitTemplateId(NewAction action) { + action.createParam(PARAM_TEMPLATE_ID_EXPLICIT) .setRequired(true) - .setDescription("Template key") - .setExampleValue("developer_template_20150820_170218"); + .setDescription("Template id") + .setExampleValue("617f3501-3d32-41bd-a7ac-18315d2e3c7a"); } static void createTemplateProjectKeyPatternParameter(NewAction action) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java index 9c78a4e4d09..9825d1f34ad 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java @@ -22,6 +22,7 @@ package org.sonar.server.permission.ws; import com.google.common.base.Optional; import javax.annotation.CheckForNull; +import org.sonar.api.server.ws.Request; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.component.ComponentDto; @@ -34,6 +35,7 @@ import static java.lang.String.format; import static org.sonar.api.security.DefaultGroups.ANYONE; import static org.sonar.api.security.DefaultGroups.isAnyone; import static org.sonar.server.ws.WsUtils.checkFound; +import static org.sonar.server.ws.WsUtils.checkRequest; public class PermissionDependenciesFinder { private final DbClient dbClient; @@ -56,6 +58,13 @@ public class PermissionDependenciesFinder { return Optional.of(componentFinder.getProjectByUuidOrKey(dbSession, wsProjectRef.uuid(), wsProjectRef.key())); } + public ComponentDto getProject(DbSession dbSession, Request wsRequest) { + Optional projectRef = WsProjectRef.optionalFromRequest(wsRequest); + checkRequest(projectRef.isPresent(), "The project id or the project key must be provided."); + + return componentFinder.getProjectByUuidOrKey(dbSession, projectRef.get().uuid(), projectRef.get().key()); + } + String getGroupName(DbSession dbSession, PermissionRequest request) { GroupDto group = getGroup(dbSession, request.group()); @@ -63,7 +72,7 @@ public class PermissionDependenciesFinder { } /** - * + * * @return null if it's the anyone group */ @CheckForNull diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequest.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequest.java index 05336525510..bc42c1d69df 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequest.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequest.java @@ -139,7 +139,7 @@ class PermissionRequest { } private void setProject(Request request) { - this.project = WsProjectRef.fromRequest(request); + this.project = WsProjectRef.optionalFromRequest(request); } private void checkPermissionParameter() { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequestValidator.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequestValidator.java index 1f7d1b94ee4..28754748788 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequestValidator.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequestValidator.java @@ -27,9 +27,9 @@ import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.permission.ProjectPermissions; import org.sonar.server.exceptions.BadRequestException; -import static com.google.common.base.CharMatcher.WHITESPACE; import static com.google.common.base.Strings.isNullOrEmpty; import static java.lang.String.format; +import static org.apache.commons.lang.StringUtils.isBlank; import static org.sonar.api.security.DefaultGroups.isAnyone; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN; @@ -59,8 +59,7 @@ public class PermissionRequestValidator { } public static void validateTemplateNameFormat(String name) { - String nameWithoutWhitespaces = WHITESPACE.trimFrom(name); - checkRequest(!nameWithoutWhitespaces.isEmpty(), MSG_TEMPLATE_NAME_NOT_BLANK); + checkRequest(!isBlank(name), MSG_TEMPLATE_NAME_NOT_BLANK); } public static void validateProjectPattern(@Nullable String projectPattern) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupAction.java index 8f9e9cfe776..7c18ae20ede 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupAction.java @@ -32,8 +32,7 @@ import org.sonar.server.permission.ws.PermissionRequest.Builder; import static org.sonar.server.permission.ws.Parameters.createGroupIdParameter; import static org.sonar.server.permission.ws.Parameters.createGroupNameParameter; import static org.sonar.server.permission.ws.Parameters.createPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectKeyParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectUuidParameter; +import static org.sonar.server.permission.ws.Parameters.createProjectParameter; public class RemoveGroupAction implements PermissionsWsAction { @@ -63,8 +62,7 @@ public class RemoveGroupAction implements PermissionsWsAction { createPermissionParameter(action); createGroupNameParameter(action); createGroupIdParameter(action); - createProjectUuidParameter(action); - createProjectKeyParameter(action); + createProjectParameter(action); } @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java index 4beea58427f..84fcf01fe18 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java @@ -32,11 +32,11 @@ import org.sonar.server.user.UserSession; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; -import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID_EXPLICIT; import static org.sonar.server.permission.ws.Parameters.createGroupIdParameter; import static org.sonar.server.permission.ws.Parameters.createGroupNameParameter; import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; +import static org.sonar.server.permission.ws.Parameters.createExplicitTemplateId; public class RemoveGroupFromTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -60,7 +60,7 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameterToAddRemoveUserOrGroup(action); + createExplicitTemplateId(action); createProjectPermissionParameter(action); createGroupIdParameter(action); createGroupNameParameter(action); @@ -70,7 +70,7 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction { public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String templateKey = wsRequest.mandatoryParam(PARAM_LONG_TEMPLATE_ID); + String templateKey = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID_EXPLICIT); String permission = wsRequest.mandatoryParam(PARAM_PERMISSION); WsGroupRef group = WsGroupRef.fromRequest(wsRequest); diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserAction.java index 0a50c443ed2..03ff653fa6d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserAction.java @@ -30,8 +30,7 @@ import org.sonar.server.permission.PermissionUpdater; import org.sonar.server.permission.ws.PermissionRequest.Builder; import static org.sonar.server.permission.ws.Parameters.createPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectKeyParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectUuidParameter; +import static org.sonar.server.permission.ws.Parameters.createProjectParameter; import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter; public class RemoveUserAction implements PermissionsWsAction { @@ -60,8 +59,7 @@ public class RemoveUserAction implements PermissionsWsAction { createPermissionParameter(action); createUserLoginParameter(action); - createProjectUuidParameter(action); - createProjectKeyParameter(action); + createProjectParameter(action); } @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java index fa58616c864..fe81fd29386 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java @@ -32,10 +32,10 @@ import org.sonar.server.user.UserSession; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; -import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID_EXPLICIT; import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN; import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; +import static org.sonar.server.permission.ws.Parameters.createExplicitTemplateId; import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter; public class RemoveUserFromTemplateAction implements PermissionsWsAction { @@ -59,7 +59,7 @@ public class RemoveUserFromTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameterToAddRemoveUserOrGroup(action); + createExplicitTemplateId(action); createProjectPermissionParameter(action); createUserLoginParameter(action); } @@ -68,7 +68,7 @@ public class RemoveUserFromTemplateAction implements PermissionsWsAction { public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String templateKey = wsRequest.mandatoryParam(PARAM_LONG_TEMPLATE_ID); + String templateKey = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID_EXPLICIT); String permission = wsRequest.mandatoryParam(PARAM_PERMISSION); String userLogin = wsRequest.mandatoryParam(PARAM_USER_LOGIN); diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsAction.java index 58a4126ed89..0276ab8d8a1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsAction.java @@ -39,8 +39,7 @@ import org.sonarqube.ws.Permissions.SearchProjectPermissionsResponse.Project; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkProjectAdminUserByComponentKey; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkProjectAdminUserByComponentUuid; -import static org.sonar.server.permission.ws.Parameters.createProjectKeyParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectUuidParameter; +import static org.sonar.server.permission.ws.Parameters.createProjectParameter; import static org.sonar.server.ws.WsUtils.writeProtobuf; public class SearchProjectPermissionsAction implements PermissionsWsAction { @@ -70,8 +69,7 @@ public class SearchProjectPermissionsAction implements PermissionsWsAction { .addSearchQuery("sonarq", "project names", "project keys") .setHandler(this); - createProjectUuidParameter(action); - createProjectKeyParameter(action); + createProjectParameter(action); } @Override @@ -89,7 +87,7 @@ public class SearchProjectPermissionsAction implements PermissionsWsAction { } private void checkRequestAndPermissions(Request wsRequest) { - Optional project = WsProjectRef.fromRequest(wsRequest); + Optional project = WsProjectRef.optionalFromRequest(wsRequest); boolean hasProject = project.isPresent(); boolean hasProjectUuid = hasProject && project.get().uuid() != null; boolean hasProjectKey = hasProject && project.get().key() != null; diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java index fa2e5949359..208171d34f0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java @@ -90,7 +90,7 @@ public class SearchProjectPermissionsDataLoader { private List searchRootComponents(DbSession dbSession, Request wsRequest, Paging paging) { String query = wsRequest.param(TEXT_QUERY); - Optional project = WsProjectRef.fromRequest(wsRequest); + Optional project = WsProjectRef.optionalFromRequest(wsRequest); if (project.isPresent()) { return singletonList(componentFinder.getProjectByUuidOrKey(dbSession, project.get().uuid(), project.get().key())); diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UsersAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UsersAction.java index ef2f9255596..b8359e3f33c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UsersAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UsersAction.java @@ -44,8 +44,7 @@ import static com.google.common.base.Strings.nullToEmpty; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkProjectAdminUserByComponentDto; import static org.sonar.server.permission.PermissionQueryParser.toMembership; import static org.sonar.server.permission.ws.Parameters.createPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectKeyParameter; -import static org.sonar.server.permission.ws.Parameters.createProjectUuidParameter; +import static org.sonar.server.permission.ws.Parameters.createProjectParameter; import static org.sonar.server.ws.WsUtils.writeProtobuf; public class UsersAction implements PermissionsWsAction { @@ -79,8 +78,7 @@ public class UsersAction implements PermissionsWsAction { .setHandler(this); createPermissionParameter(action); - createProjectUuidParameter(action); - createProjectKeyParameter(action); + createProjectParameter(action); } @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsProjectRef.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsProjectRef.java index 1f882815851..f83c6d210ca 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsProjectRef.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsProjectRef.java @@ -22,11 +22,10 @@ package org.sonar.server.permission.ws; import com.google.common.base.Optional; import javax.annotation.CheckForNull; -import javax.annotation.Nullable; import org.sonar.api.server.ws.Request; +import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_ID; import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_KEY; -import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_UUID; import static org.sonar.server.ws.WsUtils.checkRequest; /** @@ -36,22 +35,25 @@ class WsProjectRef { private final String uuid; private final String key; - private WsProjectRef(@Nullable String uuid, @Nullable String key) { + private WsProjectRef(Request wsRequest) { + String uuid = wsRequest.param(PARAM_PROJECT_ID); + String key = wsRequest.param(PARAM_PROJECT_KEY); checkRequest(uuid != null ^ key != null, "Project id or project key can be provided, not both."); this.uuid = uuid; this.key = key; } - static Optional fromRequest(Request wsRequest) { + static Optional optionalFromRequest(Request wsRequest) { if (hasNoProjectParam(wsRequest)) { return Optional.absent(); } - return Optional.of(new WsProjectRef( - wsRequest.param(PARAM_PROJECT_UUID), - wsRequest.param(PARAM_PROJECT_KEY)) - ); + return Optional.of(new WsProjectRef(wsRequest)); + } + + static WsProjectRef fromRequest(Request wsRequest) { + return new WsProjectRef(wsRequest); } @CheckForNull @@ -65,6 +67,6 @@ class WsProjectRef { } private static boolean hasNoProjectParam(Request wsRequest) { - return !wsRequest.hasParam(PARAM_PROJECT_UUID) && !wsRequest.hasParam(PARAM_PROJECT_KEY); + return !wsRequest.hasParam(PARAM_PROJECT_ID) && !wsRequest.hasParam(PARAM_PROJECT_KEY); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ApplyPermissionTemplateQueryTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ApplyPermissionTemplateQueryTest.java index 817bd23cce3..840fd55d86f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ApplyPermissionTemplateQueryTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ApplyPermissionTemplateQueryTest.java @@ -22,14 +22,13 @@ package org.sonar.server.permission; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import java.util.Collections; +import java.util.Map; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.sonar.server.exceptions.BadRequestException; -import java.util.Collections; -import java.util.Map; - import static org.assertj.core.api.Assertions.assertThat; public class ApplyPermissionTemplateQueryTest { @@ -44,10 +43,10 @@ public class ApplyPermissionTemplateQueryTest { params.put("template_key", "my_template_key"); params.put("components", Lists.newArrayList("1", "2", "3")); - ApplyPermissionTemplateQuery query = ApplyPermissionTemplateQuery.buildFromParams(params); + ApplyPermissionTemplateQuery query = ApplyPermissionTemplateQuery.createFromMap(params); - assertThat(query.getTemplateKey()).isEqualTo("my_template_key"); - assertThat(query.getSelectedComponents()).containsOnly("1", "2", "3"); + assertThat(query.getTemplateUuid()).isEqualTo("my_template_key"); + assertThat(query.getComponentKeys()).containsOnly("1", "2", "3"); } @Test @@ -60,21 +59,19 @@ public class ApplyPermissionTemplateQueryTest { params.put("template_key", ""); params.put("components", Lists.newArrayList("1", "2", "3")); - ApplyPermissionTemplateQuery query = ApplyPermissionTemplateQuery.buildFromParams(params); - query.validate(); + ApplyPermissionTemplateQuery.createFromMap(params); } @Test public void should_invalidate_query_with_no_components() { throwable.expect(BadRequestException.class); - throwable.expectMessage("Please provide at least one entry to which the permission template should be applied"); + throwable.expectMessage("No project provided. Please provide at least one project."); Map params = Maps.newHashMap(); params.put("template_key", "my_template_key"); params.put("components", Collections.EMPTY_LIST); - ApplyPermissionTemplateQuery query = ApplyPermissionTemplateQuery.buildFromParams(params); - query.validate(); + ApplyPermissionTemplateQuery.createFromMap(params); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupActionTest.java index 5243d1d1fcc..221c7985d39 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupActionTest.java @@ -53,7 +53,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_ID; import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_NAME; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_KEY; -import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_UUID; +import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_ID; import static org.sonar.server.permission.ws.PermissionsWs.ENDPOINT; @Category(DbTests.class) @@ -118,7 +118,7 @@ public class AddGroupActionTest { newRequest() .setParam(PARAM_GROUP_NAME, "sonar-administrators") - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); @@ -156,7 +156,7 @@ public class AddGroupActionTest { newRequest() .setParam(PARAM_GROUP_NAME, "sonar-administrators") - .setParam(PARAM_PROJECT_UUID, "unknown-project-uuid") + .setParam(PARAM_PROJECT_ID, "unknown-project-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); } @@ -186,7 +186,7 @@ public class AddGroupActionTest { newRequest() .setParam(PARAM_GROUP_NAME, "sonar-administrators") - .setParam(PARAM_PROJECT_UUID, "file-uuid") + .setParam(PARAM_PROJECT_ID, "file-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); } @@ -230,7 +230,7 @@ public class AddGroupActionTest { newRequest() .setParam(PARAM_GROUP_NAME, "sonar-administrators") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .setParam(PARAM_PROJECT_KEY, "project-key") .execute(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java index 16c4e5ea593..be155cbf5cc 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java @@ -59,7 +59,7 @@ import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTem import static org.sonar.db.user.GroupMembershipQuery.IN; import static org.sonar.db.user.GroupTesting.newGroupDto; import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_ID; -import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID_EXPLICIT; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; @Category(DbTests.class) @@ -103,7 +103,7 @@ public class AddGroupToTemplateActionTest { @Test public void add_with_group_id() { ws.newRequest() - .setParam(PARAM_LONG_TEMPLATE_ID, permissionTemplate.getKee()) + .setParam(PARAM_TEMPLATE_ID_EXPLICIT, permissionTemplate.getKee()) .setParam(PARAM_PERMISSION, CODEVIEWER) .setParam(PARAM_GROUP_ID, String.valueOf(group.getId())) .execute(); @@ -200,7 +200,7 @@ public class AddGroupToTemplateActionTest { request.setParam(Parameters.PARAM_GROUP_NAME, groupName); } if (templateKey != null) { - request.setParam(PARAM_LONG_TEMPLATE_ID, templateKey); + request.setParam(PARAM_TEMPLATE_ID_EXPLICIT, templateKey); } if (permission != null) { request.setParam(Parameters.PARAM_PERMISSION, permission); diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserActionTest.java index 69f9523bedd..2d9f96bdd31 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserActionTest.java @@ -51,7 +51,7 @@ import static org.sonar.db.component.ComponentTesting.newProjectDto; import static org.sonar.server.permission.ws.AddUserAction.ACTION; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_KEY; -import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_UUID; +import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_ID; import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN; import static org.sonar.server.permission.ws.PermissionsWs.ENDPOINT; @@ -99,7 +99,7 @@ public class AddUserActionTest { ws.newPostRequest(ENDPOINT, ACTION) .setParam(PARAM_USER_LOGIN, "ray.bradbury") - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); @@ -130,7 +130,7 @@ public class AddUserActionTest { ws.newPostRequest(ENDPOINT, ACTION) .setParam(PARAM_USER_LOGIN, "ray.bradbury") - .setParam(PARAM_PROJECT_UUID, "unknown-project-uuid") + .setParam(PARAM_PROJECT_ID, "unknown-project-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); } @@ -153,7 +153,7 @@ public class AddUserActionTest { ws.newPostRequest(ENDPOINT, ACTION) .setParam(PARAM_USER_LOGIN, "ray.bradbury") - .setParam(PARAM_PROJECT_UUID, "file-uuid") + .setParam(PARAM_PROJECT_ID, "file-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); } @@ -196,7 +196,7 @@ public class AddUserActionTest { ws.newPostRequest(ENDPOINT, ACTION) .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .setParam(PARAM_USER_LOGIN, "ray.bradbury") - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .setParam(PARAM_PROJECT_KEY, "project-key") .execute(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java index 023da2d0854..ee2cfdd764e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java @@ -168,7 +168,7 @@ public class AddUserToTemplateActionTest { request.setParam(Parameters.PARAM_USER_LOGIN, userLogin); } if (templateKey != null) { - request.setParam(Parameters.PARAM_LONG_TEMPLATE_ID, templateKey); + request.setParam(Parameters.PARAM_TEMPLATE_ID_EXPLICIT, templateKey); } if (permission != null) { request.setParam(Parameters.PARAM_PERMISSION, permission); diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/GroupsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/GroupsActionTest.java index bd7a9e20629..707ce4eb5c4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/GroupsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/GroupsActionTest.java @@ -55,7 +55,7 @@ import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN; import static org.sonar.db.component.ComponentTesting.newProjectDto; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_KEY; -import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_UUID; +import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_ID; import static org.sonar.test.JsonAssert.assertJson; @Category(DbTests.class) @@ -160,7 +160,7 @@ public class GroupsActionTest { String result = ws.newRequest() .setParam(PARAM_PERMISSION, ISSUE_ADMIN) - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .execute().getInput(); assertThat(result).contains("project-group-name") @@ -209,12 +209,11 @@ public class GroupsActionTest { @Test public void fail_if_project_uuid_and_project_key_are_provided() { expectedException.expect(BadRequestException.class); - expectedException.expectMessage("Project id or project key can be provided, not both."); dbClient.componentDao().insert(dbSession, newProjectDto("project-uuid").setKey("project-key")); ws.newRequest() .setParam(PARAM_PERMISSION, SCAN_EXECUTION) - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .setParam(PARAM_PROJECT_KEY, "project-key") .execute(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionRequestValidatorTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionRequestValidatorTest.java deleted file mode 100644 index ea19efdfa6e..00000000000 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionRequestValidatorTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SonarQube, open source software quality management tool. - * Copyright (C) 2008-2014 SonarSource - * mailto:contact AT sonarsource DOT com - * - * SonarQube 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. - * - * SonarQube 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.ws; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.sonar.server.exceptions.BadRequestException; - -import static org.sonar.server.permission.ws.PermissionRequestValidator.MSG_TEMPLATE_NAME_NOT_BLANK; - -public class PermissionRequestValidatorTest { - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - @Test - public void validate_template_name() { - PermissionRequestValidator.validateTemplateNameFormat(" text \r\n"); - expectedException.expect(BadRequestException.class); - expectedException.expectMessage(MSG_TEMPLATE_NAME_NOT_BLANK); - - PermissionRequestValidator.validateTemplateNameFormat(" \r\n"); - } -} diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupActionTest.java index 4e85fdb1efe..0fadbf6a91c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupActionTest.java @@ -53,7 +53,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_ID; import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_NAME; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_KEY; -import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_UUID; +import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_ID; import static org.sonar.server.permission.ws.RemoveGroupAction.ACTION; @Category(DbTests.class) @@ -117,7 +117,7 @@ public class RemoveGroupActionTest { newRequest() .setParam(PARAM_GROUP_NAME, "sonar-administrators") - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); @@ -149,7 +149,7 @@ public class RemoveGroupActionTest { newRequest() .setParam(PARAM_GROUP_NAME, "sonar-administrators") - .setParam(PARAM_PROJECT_UUID, "unknown-project-uuid") + .setParam(PARAM_PROJECT_ID, "unknown-project-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); } @@ -173,7 +173,7 @@ public class RemoveGroupActionTest { newRequest() .setParam(PARAM_GROUP_NAME, "sonar-administrators") - .setParam(PARAM_PROJECT_UUID, "file-uuid") + .setParam(PARAM_PROJECT_ID, "file-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); } @@ -227,7 +227,7 @@ public class RemoveGroupActionTest { newRequest() .setParam(PARAM_GROUP_NAME, "sonar-administrators") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .setParam(PARAM_PROJECT_KEY, "project-key") .execute(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java index 9d2da24e995..7b880d69a8f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java @@ -57,7 +57,7 @@ import static org.sonar.db.user.GroupMembershipQuery.IN; import static org.sonar.db.user.GroupTesting.newGroupDto; import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_ID; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; -import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID_EXPLICIT; @Category(DbTests.class) public class RemoveGroupFromTemplateActionTest { @@ -108,7 +108,7 @@ public class RemoveGroupFromTemplateActionTest { commit(); ws.newRequest() - .setParam(PARAM_LONG_TEMPLATE_ID, permissionTemplate.getKee()) + .setParam(PARAM_TEMPLATE_ID_EXPLICIT, permissionTemplate.getKee()) .setParam(PARAM_PERMISSION, PERMISSION) .setParam(PARAM_GROUP_ID, String.valueOf(group.getId())) .execute(); @@ -200,7 +200,7 @@ public class RemoveGroupFromTemplateActionTest { request.setParam(Parameters.PARAM_GROUP_NAME, groupName); } if (templateKey != null) { - request.setParam(PARAM_LONG_TEMPLATE_ID, templateKey); + request.setParam(PARAM_TEMPLATE_ID_EXPLICIT, templateKey); } if (permission != null) { request.setParam(Parameters.PARAM_PERMISSION, permission); diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserActionTest.java index 4970e791210..bfdb74c7c47 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserActionTest.java @@ -50,7 +50,7 @@ import static org.sonar.db.component.ComponentTesting.newFileDto; import static org.sonar.db.component.ComponentTesting.newProjectDto; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_KEY; -import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_UUID; +import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_ID; import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN; import static org.sonar.server.permission.ws.PermissionsWs.ENDPOINT; import static org.sonar.server.permission.ws.RemoveUserAction.ACTION; @@ -98,7 +98,7 @@ public class RemoveUserActionTest { ws.newPostRequest(PermissionsWs.ENDPOINT, ACTION) .setParam(PARAM_USER_LOGIN, "ray.bradbury") - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); @@ -128,7 +128,7 @@ public class RemoveUserActionTest { ws.newPostRequest(PermissionsWs.ENDPOINT, ACTION) .setParam(PARAM_USER_LOGIN, "ray.bradbury") - .setParam(PARAM_PROJECT_UUID, "unknown-project-uuid") + .setParam(PARAM_PROJECT_ID, "unknown-project-uuid") .setParam(PARAM_PERMISSION, UserRole.ISSUE_ADMIN) .execute(); } @@ -150,7 +150,7 @@ public class RemoveUserActionTest { ws.newPostRequest(PermissionsWs.ENDPOINT, ACTION) .setParam(PARAM_USER_LOGIN, "ray.bradbury") - .setParam(PARAM_PROJECT_UUID, "file-uuid") + .setParam(PARAM_PROJECT_ID, "file-uuid") .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); } @@ -192,7 +192,7 @@ public class RemoveUserActionTest { ws.newPostRequest(ENDPOINT, ACTION) .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .setParam(PARAM_USER_LOGIN, "ray.bradbury") - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .setParam(PARAM_PROJECT_KEY, "project-key") .execute(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java index 08ffe9ca61b..1b7187e335e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java @@ -192,7 +192,7 @@ public class RemoveUserFromTemplateActionTest { request.setParam(Parameters.PARAM_USER_LOGIN, userLogin); } if (templateKey != null) { - request.setParam(Parameters.PARAM_LONG_TEMPLATE_ID, templateKey); + request.setParam(Parameters.PARAM_TEMPLATE_ID_EXPLICIT, templateKey); } if (permission != null) { request.setParam(Parameters.PARAM_PERMISSION, permission); diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest.java index 8a6b7c2967d..86db252ba22 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest.java @@ -59,7 +59,7 @@ import static org.sonar.db.component.ComponentTesting.newProjectDto; import static org.sonar.db.component.ComponentTesting.newView; import static org.sonar.db.user.GroupTesting.newGroupDto; import static org.sonar.db.user.UserTesting.newUserDto; -import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_UUID; +import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_ID; import static org.sonar.test.JsonAssert.assertJson; public class SearchProjectPermissionsActionTest { @@ -147,7 +147,7 @@ public class SearchProjectPermissionsActionTest { commit(); String result = ws.newRequest() - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .execute().getInput(); assertThat(result).contains("project-uuid"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java index 684f96ed564..cb467bcd7a1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java @@ -32,6 +32,7 @@ import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.permission.PermissionTemplateDto; +import org.sonar.db.user.GroupDto; import org.sonar.server.component.ComponentFinder; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.ForbiddenException; @@ -208,6 +209,10 @@ public class UpdateTemplateActionTest { return dbClient.permissionTemplateDao().insert(dbSession, template); } + private GroupDto insertGroup(GroupDto group) { + return dbClient.groupDao().insert(db.getSession(), group); + } + private void commit() { dbSession.commit(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UsersActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UsersActionTest.java index 56c67958415..f6bb2642ce1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UsersActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UsersActionTest.java @@ -52,7 +52,7 @@ import static org.sonar.db.component.ComponentTesting.newProjectDto; import static org.sonar.db.user.UserTesting.newUserDto; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_KEY; -import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_UUID; +import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_ID; import static org.sonar.test.JsonAssert.assertJson; @Category(DbTests.class) @@ -120,7 +120,7 @@ public class UsersActionTest { String result = ws.newRequest() .setParam(PARAM_PERMISSION, ISSUE_ADMIN) - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .execute().getInput(); assertThat(result).contains("project-user-login") @@ -195,7 +195,7 @@ public class UsersActionTest { ws.newRequest() .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) - .setParam(PARAM_PROJECT_UUID, "project-uuid") + .setParam(PARAM_PROJECT_ID, "project-uuid") .setParam(PARAM_PROJECT_KEY, "project-key") .execute(); } diff --git a/sonar-db/src/main/java/org/sonar/db/permission/PermissionRepository.java b/sonar-db/src/main/java/org/sonar/db/permission/PermissionRepository.java index 24d39bc3d41..91deb4473e1 100644 --- a/sonar-db/src/main/java/org/sonar/db/permission/PermissionRepository.java +++ b/sonar-db/src/main/java/org/sonar/db/permission/PermissionRepository.java @@ -134,17 +134,19 @@ public class PermissionRepository { } } - public void applyPermissionTemplate(DbSession session, String templateKey, Long resourceId) { - PermissionTemplateDto permissionTemplate = dbClient.permissionTemplateDao().selectPermissionTemplateWithPermissions(session, templateKey); + public void applyPermissionTemplate(DbSession session, String templateUuid, long resourceId) { + PermissionTemplateDto permissionTemplate = dbClient.permissionTemplateDao().selectPermissionTemplateWithPermissions(session, templateUuid); updateProjectAuthorizationDate(session, resourceId); dbClient.roleDao().removeAllPermissions(session, resourceId); List usersPermissions = permissionTemplate.getUsersPermissions(); + //TODO should return an empty list if there's no user permissions if (usersPermissions != null) { for (PermissionTemplateUserDto userPermission : usersPermissions) { insertUserPermission(resourceId, userPermission.getUserId(), userPermission.getPermission(), false, session); } } List groupsPermissions = permissionTemplate.getGroupsPermissions(); + //TODO should return an empty list if there's no group permission if (groupsPermissions != null) { for (PermissionTemplateGroupDto groupPermission : groupsPermissions) { Long groupId = groupPermission.getGroupId() == null ? null : groupPermission.getGroupId(); @@ -153,7 +155,7 @@ public class PermissionRepository { } } - public void grantDefaultRoles(DbSession session, Long componentId, String qualifier) { + public void grantDefaultRoles(DbSession session, long componentId, String qualifier) { ResourceDto resource = dbClient.resourceDao().selectResource(componentId, session); String applicablePermissionTemplateKey = getApplicablePermissionTemplateKey(session, resource.getKey(), qualifier); applyPermissionTemplate(session, applicablePermissionTemplateKey, componentId); diff --git a/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateDto.java b/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateDto.java index 9e4b0e806fd..e79376bd24c 100644 --- a/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateDto.java +++ b/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateDto.java @@ -66,11 +66,26 @@ public class PermissionTemplateDto { return kee; } + /** + * @since 5.2 the kee column is a proper uuid. Before that it was build on the name + timestamp + */ + public String getUuid() { + return kee; + } + public PermissionTemplateDto setKee(String kee) { this.kee = kee; return this; } + /** + * @since 5.2 the kee column is a proper uuid. Before it was build on the name + timestamp + */ + public PermissionTemplateDto setUuid(String uuid) { + this.kee = uuid; + return this; + } + @CheckForNull public String getDescription() { return description; -- 2.39.5