aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java12
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java10
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/ApplyTemplateAction.java9
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java14
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java40
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java20
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java28
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java11
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequestValidator.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java10
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java10
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/SetDefaultTemplateAction.java15
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java24
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsTemplateRef.java66
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java18
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java21
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/ApplyTemplateActionTest.java14
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/CreateTemplateActionTest.java12
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java12
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java27
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java21
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java21
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/SetDefaultTemplateActionTest.java18
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java12
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();