@@ -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)) { |
@@ -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)) { |
@@ -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( |
@@ -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 { |
@@ -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; | |||
} | |||
} | |||
@@ -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) { |
@@ -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"); | |||
} |
@@ -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())); | |||
} | |||
} | |||
} |
@@ -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)); | |||
} | |||
} | |||
} |
@@ -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(); |
@@ -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); |
@@ -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); | |||
} |
@@ -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())); |
@@ -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; | |||
} | |||
} |
@@ -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 { | |||
@@ -100,6 +102,18 @@ public class AddGroupToTemplateActionTest { | |||
assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), CODEVIEWER)).containsExactly(GROUP_NAME); | |||
} | |||
@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() | |||
@@ -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); | |||
} |
@@ -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 { | |||
@@ -94,6 +97,18 @@ public class AddUserToTemplateActionTest { | |||
assertThat(getLoginsInTemplateAndPermission(permissionTemplate.getId(), CODEVIEWER)).containsExactly(USER_LOGIN); | |||
} | |||
@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); | |||
@@ -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); |
@@ -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 { | |||
@@ -148,6 +149,17 @@ public class ApplyTemplateActionTest { | |||
verify(issueAuthorizationIndexer).index(); | |||
} | |||
@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); | |||
} |
@@ -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(); |
@@ -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 |
@@ -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); | |||
@@ -98,6 +99,16 @@ public class DeleteTemplateActionTest { | |||
assertThat(dbClient.permissionTemplateDao().selectByUuidWithUserAndGroupPermissions(dbSession, TEMPLATE_UUID)).isNull(); | |||
} | |||
@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); |
@@ -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 { | |||
@@ -102,6 +104,21 @@ public class RemoveGroupFromTemplateActionTest { | |||
assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), PERMISSION)).isEmpty(); | |||
} | |||
@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); | |||
@@ -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); | |||
} |
@@ -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 { | |||
@@ -96,6 +99,18 @@ public class RemoveUserFromTemplateActionTest { | |||
assertThat(getLoginsInTemplateAndPermission(permissionTemplate.getId(), DEFAULT_PERMISSION)).isEmpty(); | |||
} | |||
@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); | |||
@@ -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); |
@@ -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); | |||
@@ -112,6 +113,19 @@ public class SetDefaultTemplateActionTest { | |||
assertThat(persistentSettings.getString(defaultRootQualifierTemplateProperty("DEV"))).isEqualTo("any-dev-template-uuid"); | |||
} | |||
@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); | |||
} |
@@ -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(); |