diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2015-09-04 17:26:16 +0200 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2015-09-04 18:06:29 +0200 |
commit | 5258f37933329dfee8b27c1c06cbe32c7da64d08 (patch) | |
tree | 768ba7c501972c0d4d30623849faf27e1b59fd25 /server | |
parent | a973701504df1d3c04ebdc43903a0fd496d6e4da (diff) | |
download | sonarqube-5258f37933329dfee8b27c1c06cbe32c7da64d08.tar.gz sonarqube-5258f37933329dfee8b27c1c06cbe32c7da64d08.zip |
Add permission template name as a web service parameter in the permission template domain
Diffstat (limited to 'server')
24 files changed, 305 insertions, 144 deletions
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 5549e67cea7..b81c5d3f34b 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 @@ -34,14 +34,13 @@ import org.sonar.server.user.UserSession; import static org.sonar.api.security.DefaultGroups.ANYONE; import static org.sonar.db.user.GroupMembershipQuery.IN; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; -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_TEMPLATE_ID; 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.createTemplateIdParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateParameters; +import static org.sonar.server.permission.ws.PermissionRequestValidator.validateNotAnyoneAndAdminPermission; +import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission; public class AddGroupToTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -65,7 +64,7 @@ public class AddGroupToTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateIdParameter(action); + createTemplateParameters(action); createProjectPermissionParameter(action); createGroupIdParameter(action); createGroupNameParameter(action); @@ -75,7 +74,6 @@ public class AddGroupToTemplateAction implements PermissionsWsAction { public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID); String permission = wsRequest.mandatoryParam(PARAM_PERMISSION); WsGroupRef group = WsGroupRef.fromRequest(wsRequest); @@ -84,7 +82,7 @@ public class AddGroupToTemplateAction implements PermissionsWsAction { validateProjectPermission(permission); validateNotAnyoneAndAdminPermission(permission, group.name()); - PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, templateUuid); + PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest)); GroupDto groupDto = dependenciesFinder.getGroup(dbSession, group); if (!groupAlreadyAdded(dbSession, template.getId(), groupDto, permission)) { 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 e5b534b9779..5b229797222 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 @@ -36,13 +36,12 @@ import org.sonar.server.user.UserSession; import static com.google.common.collect.FluentIterable.from; 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_TEMPLATE_ID; 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.createTemplateIdParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateParameters; import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter; +import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission; public class AddUserToTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -65,7 +64,7 @@ public class AddUserToTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateIdParameter(action); + createTemplateParameters(action); createProjectPermissionParameter(action); createUserLoginParameter(action); } @@ -74,14 +73,13 @@ public class AddUserToTemplateAction implements PermissionsWsAction { public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID); String permission = wsRequest.mandatoryParam(PARAM_PERMISSION); final String userLogin = wsRequest.mandatoryParam(PARAM_USER_LOGIN); DbSession dbSession = dbClient.openSession(false); try { validateProjectPermission(permission); - PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, templateUuid); + PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest)); UserDto user = dependenciesFinder.getUser(dbSession, userLogin); if (!isUserAlreadyAdded(dbSession, template.getId(), userLogin, permission)) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/ApplyTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/ApplyTemplateAction.java index 88b79cfde1b..54c74cde749 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/ApplyTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/ApplyTemplateAction.java @@ -31,9 +31,8 @@ import org.sonar.server.permission.ApplyPermissionTemplateQuery; import org.sonar.server.permission.PermissionService; import static java.util.Collections.singletonList; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID; -import static org.sonar.server.permission.ws.Parameters.createTemplateIdParameter; import static org.sonar.server.permission.ws.Parameters.createProjectParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateParameters; public class ApplyTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -56,17 +55,15 @@ public class ApplyTemplateAction implements PermissionsWsAction { .setSince("5.2") .setHandler(this); - createTemplateIdParameter(action); + createTemplateParameters(action); createProjectParameter(action); } @Override public void handle(Request wsRequest, Response wsResponse) throws Exception { - String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID); - DbSession dbSession = dbClient.openSession(false); try { - PermissionTemplateDto template = finder.getTemplate(dbSession, templateUuid); + PermissionTemplateDto template = finder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest)); ComponentDto project = finder.getProject(dbSession, WsProjectRef.fromRequest(wsRequest)); ApplyPermissionTemplateQuery query = ApplyPermissionTemplateQuery.create( diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java index 529d2c29a53..1eb6070c659 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java @@ -33,9 +33,9 @@ import org.sonarqube.ws.Permissions.WsCreatePermissionTemplateResponse; import static java.lang.String.format; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_DESCRIPTION; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN; +import static org.sonar.server.permission.ws.Parameters.PARAM_DESCRIPTION; +import static org.sonar.server.permission.ws.Parameters.PARAM_NAME; +import static org.sonar.server.permission.ws.Parameters.PARAM_PATTERN; import static org.sonar.server.permission.ws.Parameters.createTemplateDescriptionParameter; import static org.sonar.server.permission.ws.Parameters.createTemplateProjectKeyPatternParameter; import static org.sonar.server.permission.ws.PermissionRequestValidator.MSG_TEMPLATE_WITH_SAME_NAME; @@ -67,7 +67,7 @@ public class CreateTemplateAction implements PermissionsWsAction { .setPost(true) .setHandler(this); - action.createParam(PARAM_TEMPLATE_NAME) + action.createParam(PARAM_NAME) .setRequired(true) .setDescription("Name") .setExampleValue("Financial Service Permissions"); @@ -78,9 +78,9 @@ public class CreateTemplateAction implements PermissionsWsAction { @Override public void handle(Request wsRequest, Response wsResponse) throws Exception { - String name = wsRequest.mandatoryParam(PARAM_TEMPLATE_NAME); - String description = wsRequest.param(PARAM_TEMPLATE_DESCRIPTION); - String projectPattern = wsRequest.param(PARAM_TEMPLATE_PATTERN); + String name = wsRequest.mandatoryParam(PARAM_NAME); + String description = wsRequest.param(PARAM_DESCRIPTION); + String projectPattern = wsRequest.param(PARAM_PATTERN); DbSession dbSession = dbClient.openSession(false); try { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java index d3a08cfd1eb..d1381b44be2 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java @@ -21,15 +21,15 @@ package org.sonar.server.permission.ws; import com.google.common.base.Function; -import com.google.common.collect.ImmutableSet; import java.util.List; import java.util.Set; import javax.annotation.Nonnull; import org.sonar.api.config.Settings; +import org.sonar.api.resources.Qualifiers; import org.sonar.api.resources.ResourceTypes; -import static com.google.common.base.Objects.firstNonNull; import static com.google.common.collect.FluentIterable.from; +import static com.google.common.collect.Ordering.natural; import static org.sonar.server.permission.DefaultPermissionTemplates.DEFAULT_TEMPLATE_PROPERTY; import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty; import static org.sonar.server.permission.ws.ResourceTypeToQualifier.RESOURCE_TYPE_TO_QUALIFIER; @@ -44,14 +44,10 @@ public class DefaultPermissionTemplateFinder { } Set<String> getDefaultTemplateUuids() { - return ImmutableSet.<String>builder() - .addAll( - from(resourceTypes.getRoots()) - .transform(RESOURCE_TYPE_TO_QUALIFIER) - .transform(new QualifierToDefaultTemplate(settings)) - .toSet()) - .add(settings.getString(DEFAULT_TEMPLATE_PROPERTY)) - .build(); + return from(resourceTypes.getRoots()) + .transform(RESOURCE_TYPE_TO_QUALIFIER) + .transform(new QualifierToDefaultTemplate(settings)) + .toSortedSet(natural()); } List<TemplateUuidQualifier> getDefaultTemplatesByQualifier() { @@ -88,8 +84,8 @@ public class DefaultPermissionTemplateFinder { @Override public String apply(@Nonnull String qualifier) { - String qualifierProperty = settings.getString(defaultRootQualifierTemplateProperty(qualifier)); - return firstNonNull(qualifierProperty, settings.getString(DEFAULT_TEMPLATE_PROPERTY)); + String effectiveTemplateUuid = effectiveTemplateUuid(settings, qualifier); + return effectiveTemplateUuid; } } @@ -102,11 +98,23 @@ public class DefaultPermissionTemplateFinder { @Override public TemplateUuidQualifier apply(@Nonnull String qualifier) { - String qualifierTemplateUuid = firstNonNull( - settings.getString(defaultRootQualifierTemplateProperty(qualifier)), - settings.getString(DEFAULT_TEMPLATE_PROPERTY)); + String effectiveTemplateUuid = effectiveTemplateUuid(settings, qualifier); + + return new TemplateUuidQualifier(effectiveTemplateUuid, qualifier); + } + } - return new TemplateUuidQualifier(qualifierTemplateUuid, qualifier); + private static String effectiveTemplateUuid(Settings settings, String qualifier) { + String qualifierTemplateUuid = settings.getString(defaultRootQualifierTemplateProperty(qualifier)); + String projectTemplateUuid = settings.getString(defaultRootQualifierTemplateProperty(Qualifiers.PROJECT)); + String defaultTemplateUuid = settings.getString(DEFAULT_TEMPLATE_PROPERTY); + + if (qualifierTemplateUuid != null) { + return qualifierTemplateUuid; + } else if (projectTemplateUuid != null) { + return projectTemplateUuid; + } else { + return defaultTemplateUuid; } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java index d0f467e0778..233f6dec2d9 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java @@ -30,8 +30,8 @@ import org.sonar.db.permission.PermissionTemplateDto; import org.sonar.server.user.UserSession; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; -import static org.sonar.server.permission.ws.Parameters.PARAM_ID; -import static org.sonar.server.permission.ws.Parameters.createIdParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateParameters; +import static org.sonar.server.permission.ws.WsTemplateRef.fromRequest; import static org.sonar.server.ws.WsUtils.checkRequest; public class DeleteTemplateAction implements PermissionsWsAction { @@ -56,30 +56,24 @@ public class DeleteTemplateAction implements PermissionsWsAction { .setPost(true) .setHandler(this); - createIdParameter(action); + createTemplateParameters(action); } @Override public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String uuid = wsRequest.mandatoryParam(PARAM_ID); - checkTemplateUuidIsNotDefault(uuid); - - deleteTemplate(uuid); - - wsResponse.noContent(); - } - - private void deleteTemplate(String uuid) { DbSession dbSession = dbClient.openSession(false); try { - PermissionTemplateDto template = finder.getTemplate(dbSession, uuid); + PermissionTemplateDto template = finder.getTemplate(dbSession, fromRequest(wsRequest)); + checkTemplateUuidIsNotDefault(template.getUuid()); dbClient.permissionTemplateDao().deleteById(dbSession, template.getId()); dbSession.commit(); } finally { dbClient.closeSession(dbSession); } + + wsResponse.noContent(); } private void checkTemplateUuidIsNotDefault(String key) { 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 3882689c656..65b620ce4b8 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 @@ -23,6 +23,7 @@ package org.sonar.server.permission.ws; import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.permission.ProjectPermissions; +import org.sonar.core.util.Uuids; import static java.lang.String.format; @@ -35,11 +36,12 @@ class Parameters { static final String PARAM_PROJECT_KEY = "projectKey"; static final String PARAM_USER_LOGIN = "login"; static final String PARAM_TEMPLATE_ID = "templateId"; + static final String PARAM_TEMPLATE_NAME = "templateName"; static final String PARAM_ID = "id"; - static final String PARAM_TEMPLATE_NAME = "name"; - static final String PARAM_TEMPLATE_DESCRIPTION = "description"; - static final String PARAM_TEMPLATE_PATTERN = "projectKeyPattern"; + static final String PARAM_NAME = "name"; + static final String PARAM_DESCRIPTION = "description"; + static final String PARAM_PATTERN = "projectKeyPattern"; static final String PARAM_QUALIFIER = "qualifier"; @@ -108,21 +110,31 @@ class Parameters { .setExampleValue("g.hopper"); } - static void createTemplateIdParameter(NewAction action) { + static void createTemplateParameters(NewAction action) { + createTemplateIdParameter(action); + createTemplateNameParameter(action); + } + + private static void createTemplateIdParameter(NewAction action) { action.createParam(PARAM_TEMPLATE_ID) - .setRequired(true) .setDescription("Template id") - .setExampleValue("617f3501-3d32-41bd-a7ac-18315d2e3c7a"); + .setExampleValue(Uuids.UUID_EXAMPLE_01); + } + + private static void createTemplateNameParameter(NewAction action) { + action.createParam(PARAM_TEMPLATE_NAME) + .setDescription("Template name") + .setExampleValue("Default Permission Template for Projects"); } static void createTemplateProjectKeyPatternParameter(NewAction action) { - action.createParam(PARAM_TEMPLATE_PATTERN) + action.createParam(PARAM_PATTERN) .setDescription("Project key pattern. Must be a valid Java regular expression") .setExampleValue(".*\\.finance\\..*"); } static void createTemplateDescriptionParameter(NewAction action) { - action.createParam(PARAM_TEMPLATE_DESCRIPTION) + action.createParam(PARAM_DESCRIPTION) .setDescription("Description") .setExampleValue("Permissions for all projects related to the financial service"); } 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 f7670aeb0cf..fd56efbd8b0 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 @@ -99,8 +99,13 @@ public class PermissionDependenciesFinder { format("User with login '%s' is not found'", userLogin)); } - PermissionTemplateDto getTemplate(DbSession dbSession, String uuid) { - return checkFound(dbClient.permissionTemplateDao().selectByUuid(dbSession, uuid), - format("Permission template with id '%s' is not found", uuid)); + PermissionTemplateDto getTemplate(DbSession dbSession, WsTemplateRef template) { + if (template.uuid() != null) { + return checkFound(dbClient.permissionTemplateDao().selectByUuid(dbSession, template.uuid()), + format("Permission template with id '%s' is not found", template.uuid())); + } else { + return checkFound(dbClient.permissionTemplateDao().selectByName(dbSession, template.name()), + format("Permission template with name '%s' is not found (case insensitive)", template.name())); + } } } 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 5accd0d63aa..f21e5608208 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 @@ -34,7 +34,7 @@ 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_QUALIFIER; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN; +import static org.sonar.server.permission.ws.Parameters.PARAM_PATTERN; import static org.sonar.server.ws.WsUtils.checkRequest; public class PermissionRequestValidator { @@ -77,7 +77,7 @@ public class PermissionRequestValidator { try { Pattern.compile(projectPattern); } catch (PatternSyntaxException e) { - throw new BadRequestException(format("The '%s' parameter must be a valid Java regular expression. '%s' was passed", PARAM_TEMPLATE_PATTERN, projectPattern)); + throw new BadRequestException(format("The '%s' parameter must be a valid Java regular expression. '%s' was passed", PARAM_PATTERN, projectPattern)); } } } 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 2da3fdbe987..6aa46efae65 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 @@ -30,13 +30,12 @@ import org.sonar.db.user.GroupDto; 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_TEMPLATE_ID; 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.createTemplateIdParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateParameters; +import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission; public class RemoveGroupFromTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -60,7 +59,7 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateIdParameter(action); + createTemplateParameters(action); createProjectPermissionParameter(action); createGroupIdParameter(action); createGroupNameParameter(action); @@ -70,7 +69,6 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction { public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID); String permission = wsRequest.mandatoryParam(PARAM_PERMISSION); WsGroupRef group = WsGroupRef.fromRequest(wsRequest); @@ -78,7 +76,7 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction { try { validateProjectPermission(permission); - PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, templateUuid); + PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest)); GroupDto groupDto = dependenciesFinder.getGroup(dbSession, group); Long groupId = groupDto == null ? null : groupDto.getId(); 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 e65f3d22071..573e7007bb4 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 @@ -30,13 +30,12 @@ import org.sonar.db.user.UserDto; 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_TEMPLATE_ID; 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.createTemplateIdParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateParameters; import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter; +import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission; public class RemoveUserFromTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -59,7 +58,7 @@ public class RemoveUserFromTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateIdParameter(action); + createTemplateParameters(action); createProjectPermissionParameter(action); createUserLoginParameter(action); } @@ -68,14 +67,13 @@ public class RemoveUserFromTemplateAction implements PermissionsWsAction { public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID); String permission = wsRequest.mandatoryParam(PARAM_PERMISSION); String userLogin = wsRequest.mandatoryParam(PARAM_USER_LOGIN); DbSession dbSession = dbClient.openSession(false); try { validateProjectPermission(permission); - PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, templateUuid); + PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest)); UserDto user = dependenciesFinder.getUser(dbSession, userLogin); dbClient.permissionTemplateDao().deleteUserPermission(dbSession, template.getId(), user.getId(), permission); diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SetDefaultTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SetDefaultTemplateAction.java index 78524945197..5fc18d16d78 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SetDefaultTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SetDefaultTemplateAction.java @@ -29,6 +29,7 @@ import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.db.DbClient; import org.sonar.db.DbSession; +import org.sonar.db.permission.PermissionTemplateDto; import org.sonar.server.platform.PersistentSettings; import org.sonar.server.user.UserSession; @@ -38,8 +39,7 @@ import static java.lang.String.format; import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; import static org.sonar.server.permission.ws.Parameters.PARAM_QUALIFIER; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID; -import static org.sonar.server.permission.ws.Parameters.createTemplateIdParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateParameters; import static org.sonar.server.permission.ws.PermissionRequestValidator.validateQualifier; import static org.sonar.server.permission.ws.ResourceTypeToQualifier.RESOURCE_TYPE_TO_QUALIFIER; @@ -70,7 +70,7 @@ public class SetDefaultTemplateAction implements PermissionsWsAction { .setSince("5.2") .setHandler(this); - createTemplateIdParameter(action); + createTemplateParameters(action); action.createParam(PARAM_QUALIFIER) .setDescription("Project qualifier. Possible values are:" + buildRootQualifiersDescription()) @@ -82,12 +82,11 @@ public class SetDefaultTemplateAction implements PermissionsWsAction { public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID); String qualifier = wsRequest.mandatoryParam(PARAM_QUALIFIER); - checkTemplateExists(templateUuid); + PermissionTemplateDto template = getTemplate(wsRequest); validateQualifier(qualifier, getRootQualifiers()); - setDefaultTemplateUuid(templateUuid, qualifier); + setDefaultTemplateUuid(template.getUuid(), qualifier); wsResponse.noContent(); } @@ -114,10 +113,10 @@ public class SetDefaultTemplateAction implements PermissionsWsAction { return i18n.message(userSession.locale(), qualifiersPropertyPrefix + qualifier, ""); } - private void checkTemplateExists(String templateUuid) { + private PermissionTemplateDto getTemplate(Request wsRequest) { DbSession dbSession = dbClient.openSession(false); try { - finder.getTemplate(dbSession, templateUuid); + return finder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest)); } finally { dbClient.closeSession(dbSession); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java index 5269254e9c4..65ac0a5a91e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java @@ -36,12 +36,12 @@ import org.sonarqube.ws.Permissions.WsUpdatePermissionTemplateResponse; import static com.google.common.base.Objects.firstNonNull; import static java.lang.String.format; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_DESCRIPTION; import static org.sonar.server.permission.ws.Parameters.PARAM_ID; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN; -import static org.sonar.server.permission.ws.Parameters.createTemplateDescriptionParameter; +import static org.sonar.server.permission.ws.Parameters.PARAM_DESCRIPTION; +import static org.sonar.server.permission.ws.Parameters.PARAM_NAME; +import static org.sonar.server.permission.ws.Parameters.PARAM_PATTERN; import static org.sonar.server.permission.ws.Parameters.createIdParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateDescriptionParameter; import static org.sonar.server.permission.ws.Parameters.createTemplateProjectKeyPatternParameter; import static org.sonar.server.permission.ws.PermissionRequestValidator.MSG_TEMPLATE_WITH_SAME_NAME; import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPattern; @@ -75,7 +75,7 @@ public class UpdateTemplateAction implements PermissionsWsAction { createIdParameter(action); - action.createParam(PARAM_TEMPLATE_NAME) + action.createParam(PARAM_NAME) .setDescription("Name") .setExampleValue("Financial Service Permissions"); @@ -87,14 +87,14 @@ public class UpdateTemplateAction implements PermissionsWsAction { public void handle(Request wsRequest, Response wsResponse) throws Exception { checkGlobalAdminUser(userSession); - String key = wsRequest.mandatoryParam(PARAM_ID); - String nameParam = wsRequest.param(PARAM_TEMPLATE_NAME); - String descriptionParam = wsRequest.param(PARAM_TEMPLATE_DESCRIPTION); - String projectPatternParam = wsRequest.param(PARAM_TEMPLATE_PATTERN); + String uuid = wsRequest.mandatoryParam(PARAM_ID); + String nameParam = wsRequest.param(PARAM_NAME); + String descriptionParam = wsRequest.param(PARAM_DESCRIPTION); + String projectPatternParam = wsRequest.param(PARAM_PATTERN); DbSession dbSession = dbClient.openSession(false); try { - PermissionTemplateDto templateToUpdate = getAndBuildTemplateToUpdate(dbSession, key, nameParam, descriptionParam, projectPatternParam); + PermissionTemplateDto templateToUpdate = getAndBuildTemplateToUpdate(dbSession, uuid, nameParam, descriptionParam, projectPatternParam); validateTemplate(dbSession, templateToUpdate); PermissionTemplateDto updatedTemplate = updateTemplate(dbSession, templateToUpdate); @@ -110,9 +110,9 @@ public class UpdateTemplateAction implements PermissionsWsAction { validateProjectPattern(templateToUpdate.getKeyPattern()); } - private PermissionTemplateDto getAndBuildTemplateToUpdate(DbSession dbSession, String key, @Nullable String newName, @Nullable String newDescription, + private PermissionTemplateDto getAndBuildTemplateToUpdate(DbSession dbSession, String uuid, @Nullable String newName, @Nullable String newDescription, @Nullable String newProjectKeyPattern) { - PermissionTemplateDto templateToUpdate = finder.getTemplate(dbSession, key); + PermissionTemplateDto templateToUpdate = finder.getTemplate(dbSession, WsTemplateRef.newTemplateRef(uuid, null)); templateToUpdate.setName(firstNonNull(newName, templateToUpdate.getName())); templateToUpdate.setDescription(firstNonNull(newDescription, templateToUpdate.getDescription())); templateToUpdate.setKeyPattern(firstNonNull(newProjectKeyPattern, templateToUpdate.getKeyPattern())); diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsTemplateRef.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsTemplateRef.java new file mode 100644 index 00000000000..20b67e57bf0 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsTemplateRef.java @@ -0,0 +1,66 @@ +/* + * 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 javax.annotation.CheckForNull; +import javax.annotation.Nullable; +import org.sonar.api.server.ws.Request; + +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; +import static org.sonar.server.ws.WsUtils.checkRequest; + +/** + * Template from a WS request. Guaranties the template id or the template name is provided, not both. + */ +class WsTemplateRef { + + private final String uuid; + private final String name; + + private WsTemplateRef(@Nullable String uuid, @Nullable String name) { + checkRequest(uuid != null ^ name != null, "Template name or template id must be provided, not both."); + + this.uuid = uuid; + this.name = name; + } + + static WsTemplateRef fromRequest(Request wsRequest) { + String uuid = wsRequest.param(PARAM_TEMPLATE_ID); + String name = wsRequest.param(PARAM_TEMPLATE_NAME); + + return new WsTemplateRef(uuid, name); + } + + static WsTemplateRef newTemplateRef(@Nullable String uuid, @Nullable String name) { + return new WsTemplateRef(uuid, name); + } + + @CheckForNull + String uuid() { + return this.uuid; + } + + @CheckForNull + String name() { + return this.name; + } +} 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 8929be63822..1f587ae6a8a 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,8 +59,10 @@ 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_GROUP_NAME; import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; @Category(DbTests.class) public class AddGroupToTemplateActionTest { @@ -101,6 +103,18 @@ public class AddGroupToTemplateActionTest { } @Test + public void add_group_to_template_by_name() { + ws.newRequest() + .setParam(PARAM_GROUP_NAME, GROUP_NAME) + .setParam(PARAM_PERMISSION, CODEVIEWER) + .setParam(PARAM_TEMPLATE_NAME, permissionTemplate.getName().toUpperCase()) + .execute(); + commit(); + + assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), CODEVIEWER)).containsExactly(GROUP_NAME); + } + + @Test public void add_with_group_id() { ws.newRequest() .setParam(PARAM_TEMPLATE_ID, permissionTemplate.getKee()) @@ -172,8 +186,8 @@ public class AddGroupToTemplateActionTest { } @Test - public void fail_if_template_key_missing() { - expectedException.expect(IllegalArgumentException.class); + public void fail_if_template_uuid_and_name_missing() { + expectedException.expect(BadRequestException.class); newRequest(GROUP_NAME, null, CODEVIEWER); } 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 89f911683f9..d7a1a0ebce9 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 @@ -55,6 +55,9 @@ import static org.sonar.api.web.UserRole.ISSUE_ADMIN; import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto; import static org.sonar.db.user.GroupMembershipQuery.IN; 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_TEMPLATE_NAME; +import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN; @Category(DbTests.class) public class AddUserToTemplateActionTest { @@ -95,6 +98,18 @@ public class AddUserToTemplateActionTest { } @Test + public void add_user_to_template_by_name() { + ws.newRequest() + .setParam(PARAM_USER_LOGIN, USER_LOGIN) + .setParam(PARAM_PERMISSION, CODEVIEWER) + .setParam(PARAM_TEMPLATE_NAME, permissionTemplate.getName().toUpperCase()) + .execute(); + commit(); + + assertThat(getLoginsInTemplateAndPermission(permissionTemplate.getId(), CODEVIEWER)).containsExactly(USER_LOGIN); + } + + @Test public void does_not_add_a_user_twice() { newRequest(USER_LOGIN, permissionTemplate.getKee(), ISSUE_ADMIN); newRequest(USER_LOGIN, permissionTemplate.getKee(), ISSUE_ADMIN); @@ -140,8 +155,8 @@ public class AddUserToTemplateActionTest { } @Test - public void fail_if_template_key_missing() { - expectedException.expect(IllegalArgumentException.class); + public void fail_if_template_uuid_and_name_are_missing() { + expectedException.expect(BadRequestException.class); newRequest(USER_LOGIN, null, CODEVIEWER); } @@ -165,7 +180,7 @@ public class AddUserToTemplateActionTest { private void newRequest(@Nullable String userLogin, @Nullable String templateKey, @Nullable String permission) { TestRequest request = ws.newRequest(); if (userLogin != null) { - request.setParam(Parameters.PARAM_USER_LOGIN, userLogin); + request.setParam(PARAM_USER_LOGIN, userLogin); } if (templateKey != null) { request.setParam(Parameters.PARAM_TEMPLATE_ID, templateKey); diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/ApplyTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/ApplyTemplateActionTest.java index 3e10bc2630d..f9f63265fd5 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/ApplyTemplateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/ApplyTemplateActionTest.java @@ -71,6 +71,7 @@ import static org.sonar.db.user.UserTesting.newUserDto; 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_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; @Category(DbTests.class) public class ApplyTemplateActionTest { @@ -149,6 +150,17 @@ public class ApplyTemplateActionTest { } @Test + public void apply_template_with_project_uuid_by_template_name() { + ws.newRequest() + .setParam(PARAM_TEMPLATE_NAME, template1.getName().toUpperCase()) + .setParam(PARAM_PROJECT_ID, project.uuid()) + .execute(); + commit(); + + assertTemplate1AppliedToProject(); + } + + @Test public void apply_template_with_project_key() { newRequest(template1.getUuid(), null, project.key()); @@ -181,7 +193,7 @@ public class ApplyTemplateActionTest { @Test public void fail_when_template_is_not_provided() { - expectedException.expect(IllegalArgumentException.class); + expectedException.expect(BadRequestException.class); newRequest(null, project.uuid(), null); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/CreateTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/CreateTemplateActionTest.java index 4f58e5ed4b6..dd3115c28d2 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/CreateTemplateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/CreateTemplateActionTest.java @@ -43,9 +43,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_DESCRIPTION; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN; +import static org.sonar.server.permission.ws.Parameters.PARAM_DESCRIPTION; +import static org.sonar.server.permission.ws.Parameters.PARAM_NAME; +import static org.sonar.server.permission.ws.Parameters.PARAM_PATTERN; import static org.sonar.test.JsonAssert.assertJson; public class CreateTemplateActionTest { @@ -161,13 +161,13 @@ public class CreateTemplateActionTest { private TestResponse newRequest(@Nullable String name, @Nullable String description, @Nullable String projectPattern) { TestRequest request = ws.newRequest(); if (name != null) { - request.setParam(PARAM_TEMPLATE_NAME, name); + request.setParam(PARAM_NAME, name); } if (description != null) { - request.setParam(PARAM_TEMPLATE_DESCRIPTION, description); + request.setParam(PARAM_DESCRIPTION, description); } if (projectPattern != null) { - request.setParam(PARAM_TEMPLATE_PATTERN, projectPattern); + request.setParam(PARAM_PATTERN, projectPattern); } return request.execute(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java index c7425eb3c66..5831af38b1f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java @@ -20,7 +20,6 @@ package org.sonar.server.permission.ws; -import java.util.Collections; import java.util.List; import java.util.Set; import org.junit.Before; @@ -59,16 +58,7 @@ public class DefaultPermissionTemplateFinderTest { public void get_default_template_uuids_in_settings() { Set<String> result = underTest.getDefaultTemplateUuids(); - assertThat(result).containsOnly("default-template-uuid", "default-project-template-uuid", "default-view-template-uuid", "default-dev-template-uuid"); - } - - @Test - public void get_default_template_uuid_if_no_root_resource() { - when(resourceTypes.getRoots()).thenReturn(Collections.<ResourceType>emptySet()); - - Set<String> result = underTest.getDefaultTemplateUuids(); - - assertThat(result).containsOnly("default-template-uuid"); + assertThat(result).containsOnly("default-project-template-uuid", "default-view-template-uuid", "default-dev-template-uuid"); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java index 7a5fca2395d..60f63ba9ca4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java @@ -52,7 +52,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mockito.internal.util.collections.Sets.newSet; import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto; -import static org.sonar.server.permission.ws.Parameters.PARAM_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; public class DeleteTemplateActionTest { @@ -68,7 +69,7 @@ public class DeleteTemplateActionTest { WsActionTester ws; DbClient dbClient; DbSession dbSession; - DefaultPermissionTemplateFinder defautTemplatePermissionFinder; + DefaultPermissionTemplateFinder defaultTemplatePermissionFinder; PermissionTemplateDto permissionTemplate; @@ -78,10 +79,10 @@ public class DeleteTemplateActionTest { dbClient = db.getDbClient(); dbSession = db.getSession(); - defautTemplatePermissionFinder = mock(DefaultPermissionTemplateFinder.class); - when(defautTemplatePermissionFinder.getDefaultTemplateUuids()).thenReturn(Collections.<String>emptySet()); + defaultTemplatePermissionFinder = mock(DefaultPermissionTemplateFinder.class); + when(defaultTemplatePermissionFinder.getDefaultTemplateUuids()).thenReturn(Collections.<String>emptySet()); PermissionDependenciesFinder finder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient)); - ws = new WsActionTester(new DeleteTemplateAction(dbClient, userSession, finder, defautTemplatePermissionFinder)); + ws = new WsActionTester(new DeleteTemplateAction(dbClient, userSession, finder, defaultTemplatePermissionFinder)); permissionTemplate = insertTemplateAndAssociatedPermissions(newPermissionTemplateDto().setKee(TEMPLATE_UUID)); PermissionTemplateDto permissionTemplateInDatabase = dbClient.permissionTemplateDao().selectByUuidWithUserAndGroupPermissions(dbSession, TEMPLATE_UUID); @@ -99,6 +100,16 @@ public class DeleteTemplateActionTest { } @Test + public void delete_template_by_name_case_insensitive() { + ws.newRequest() + .setParam(PARAM_TEMPLATE_NAME, permissionTemplate.getName().toUpperCase()) + .execute(); + commit(); + + assertThat(dbClient.permissionTemplateDao().selectByUuidWithUserAndGroupPermissions(dbSession, TEMPLATE_UUID)).isNull(); + } + + @Test public void fail_if_uuid_is_not_known() { expectedException.expect(NotFoundException.class); @@ -109,7 +120,7 @@ public class DeleteTemplateActionTest { public void fail_if_template_is_default() { expectedException.expect(BadRequestException.class); expectedException.expectMessage("It is not possible to delete a default template"); - when(defautTemplatePermissionFinder.getDefaultTemplateUuids()).thenReturn(newSet(TEMPLATE_UUID)); + when(defaultTemplatePermissionFinder.getDefaultTemplateUuids()).thenReturn(newSet(TEMPLATE_UUID)); newRequest(TEMPLATE_UUID); } @@ -132,7 +143,7 @@ public class DeleteTemplateActionTest { @Test public void fail_if_uuid_is_not_provided() { - expectedException.expect(IllegalArgumentException.class); + expectedException.expect(BadRequestException.class); newRequest(null); } @@ -155,7 +166,7 @@ public class DeleteTemplateActionTest { private TestResponse newRequest(@Nullable String id) { TestRequest request = ws.newRequest(); if (id != null) { - request.setParam(PARAM_ID, id); + request.setParam(PARAM_TEMPLATE_ID, id); } TestResponse result = executeRequest(request); 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 8a335a9d291..30d7dbec135 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 @@ -56,8 +56,10 @@ 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_GROUP_NAME; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; @Category(DbTests.class) public class RemoveGroupFromTemplateActionTest { @@ -103,6 +105,21 @@ public class RemoveGroupFromTemplateActionTest { } @Test + public void remove_group_from_template_by_name_case_insensitive() { + assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), PERMISSION)).containsExactly(GROUP_NAME); + commit(); + + ws.newRequest() + .setParam(PARAM_GROUP_NAME, GROUP_NAME) + .setParam(PARAM_PERMISSION, PERMISSION) + .setParam(PARAM_TEMPLATE_NAME, permissionTemplate.getName().toUpperCase()) + .execute(); + commit(); + + assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), PERMISSION)).isEmpty(); + } + + @Test public void remove_group_with_group_id() { assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), PERMISSION)).containsExactly(GROUP_NAME); commit(); @@ -172,8 +189,8 @@ public class RemoveGroupFromTemplateActionTest { } @Test - public void fail_if_template_key_missing() { - expectedException.expect(IllegalArgumentException.class); + public void fail_if_template_missing() { + expectedException.expect(BadRequestException.class); newRequest(GROUP_NAME, null, PERMISSION); } 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 aa470855623..81582e4d8ed 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 @@ -55,6 +55,9 @@ import static org.sonar.api.web.UserRole.ISSUE_ADMIN; import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto; import static org.sonar.db.user.GroupMembershipQuery.IN; 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_TEMPLATE_NAME; +import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN; @Category(DbTests.class) public class RemoveUserFromTemplateActionTest { @@ -97,6 +100,18 @@ public class RemoveUserFromTemplateActionTest { } @Test + public void remove_user_from_template_by_name_case_insensitive() { + ws.newRequest() + .setParam(PARAM_USER_LOGIN, USER_LOGIN) + .setParam(PARAM_PERMISSION, DEFAULT_PERMISSION) + .setParam(PARAM_TEMPLATE_NAME, permissionTemplate.getName().toUpperCase()) + .execute(); + commit(); + + assertThat(getLoginsInTemplateAndPermission(permissionTemplate.getId(), DEFAULT_PERMISSION)).isEmpty(); + } + + @Test public void remove_user_from_template_twice_without_failing() { newRequest(USER_LOGIN, permissionTemplate.getKee(), DEFAULT_PERMISSION); newRequest(USER_LOGIN, permissionTemplate.getKee(), DEFAULT_PERMISSION); @@ -164,8 +179,8 @@ public class RemoveUserFromTemplateActionTest { } @Test - public void fail_if_template_key_missing() { - expectedException.expect(IllegalArgumentException.class); + public void fail_if_template_missing() { + expectedException.expect(BadRequestException.class); newRequest(USER_LOGIN, null, DEFAULT_PERMISSION); } @@ -189,7 +204,7 @@ public class RemoveUserFromTemplateActionTest { private void newRequest(@Nullable String userLogin, @Nullable String templateKey, @Nullable String permission) { TestRequest request = ws.newRequest(); if (userLogin != null) { - request.setParam(Parameters.PARAM_USER_LOGIN, userLogin); + request.setParam(PARAM_USER_LOGIN, userLogin); } if (templateKey != null) { request.setParam(Parameters.PARAM_TEMPLATE_ID, templateKey); diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SetDefaultTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SetDefaultTemplateActionTest.java index f1e20799985..f68de3c4aa0 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SetDefaultTemplateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SetDefaultTemplateActionTest.java @@ -62,6 +62,7 @@ import static org.sonar.server.permission.DefaultPermissionTemplates.DEFAULT_TEM import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty; import static org.sonar.server.permission.ws.Parameters.PARAM_QUALIFIER; import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; @Category(DbTests.class) public class SetDefaultTemplateActionTest { @@ -101,7 +102,7 @@ public class SetDefaultTemplateActionTest { } @Test - public void update_settings_of_default_and_qualifier_default_for_project_qualifier() { + public void update_settings_for_project_qualifier() { // default value is project qualifier's value String result = newRequest(template.getUuid(), null); @@ -113,6 +114,19 @@ public class SetDefaultTemplateActionTest { } @Test + public void update_settings_for_project_qualifier_by_template_name() { + ws.newRequest() + .setParam(PARAM_TEMPLATE_NAME, template.getName().toUpperCase()) + .execute(); + db.getSession().commit(); + + assertThat(persistentSettings.getString(DEFAULT_TEMPLATE_PROPERTY)).isEqualTo("any-template-uuid"); + assertThat(persistentSettings.getString(defaultRootQualifierTemplateProperty(PROJECT))).isEqualTo(template.getUuid()); + assertThat(persistentSettings.getString(defaultRootQualifierTemplateProperty(VIEW))).isEqualTo("any-view-template-uuid"); + assertThat(persistentSettings.getString(defaultRootQualifierTemplateProperty("DEV"))).isEqualTo("any-dev-template-uuid"); + } + + @Test public void update_settings_of_views_property() { newRequest(template.getUuid(), VIEW); @@ -140,7 +154,7 @@ public class SetDefaultTemplateActionTest { @Test public void fail_if_template_not_provided() { - expectedException.expect(IllegalArgumentException.class); + expectedException.expect(BadRequestException.class); newRequest(null, PROJECT); } 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 4f12bd9116b..fe9fe83acbe 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 @@ -47,10 +47,10 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_DESCRIPTION; +import static org.sonar.server.permission.ws.Parameters.PARAM_DESCRIPTION; import static org.sonar.server.permission.ws.Parameters.PARAM_ID; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; -import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN; +import static org.sonar.server.permission.ws.Parameters.PARAM_NAME; +import static org.sonar.server.permission.ws.Parameters.PARAM_PATTERN; import static org.sonar.test.JsonAssert.assertJson; public class UpdateTemplateActionTest { @@ -223,13 +223,13 @@ public class UpdateTemplateActionTest { request.setParam(PARAM_ID, key); } if (name != null) { - request.setParam(PARAM_TEMPLATE_NAME, name); + request.setParam(PARAM_NAME, name); } if (description != null) { - request.setParam(PARAM_TEMPLATE_DESCRIPTION, description); + request.setParam(PARAM_DESCRIPTION, description); } if (projectPattern != null) { - request.setParam(PARAM_TEMPLATE_PATTERN, projectPattern); + request.setParam(PARAM_PATTERN, projectPattern); } return request.execute(); |