diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2015-08-26 12:08:16 +0200 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2015-08-27 09:52:44 +0200 |
commit | 771647e32377530d4a659bf286fe509ab93c02be (patch) | |
tree | 0a23a06803af231e055c1ae23549519033a47fa7 /server | |
parent | c34b9f3648628a836c437b29e2cf20f84ddd06b4 (diff) | |
download | sonarqube-771647e32377530d4a659bf286fe509ab93c02be.tar.gz sonarqube-771647e32377530d4a659bf286fe509ab93c02be.zip |
SONAR-6498 WS permissions/delete_template delete a permission template
Diffstat (limited to 'server')
10 files changed, 220 insertions, 15 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 9c4bbf1b31a..77882af0b3d 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 @@ -41,7 +41,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_KEY; 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.createTemplateKeyParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; public class AddGroupToTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -65,7 +65,7 @@ public class AddGroupToTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameter(action); + createTemplateKeyParameterToAddRemoveUserOrGroup(action); createProjectPermissionParameter(action); createGroupIdParameter(action); createGroupNameParameter(action); 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 22443cfb09a..4e0922313b0 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 @@ -41,7 +41,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_KEY; 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.createTemplateKeyParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter; public class AddUserToTemplateAction implements PermissionsWsAction { @@ -65,7 +65,7 @@ public class AddUserToTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameter(action); + createTemplateKeyParameterToAddRemoveUserOrGroup(action); createProjectPermissionParameter(action); createUserLoginParameter(action); } 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 new file mode 100644 index 00000000000..0eaeb105d73 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java @@ -0,0 +1,70 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.permission.ws; + +import org.sonar.api.server.ws.Request; +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.server.user.UserSession; + +import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_KEY; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameter; + +public class DeleteTemplateAction implements PermissionsWsAction { + private final DbClient dbClient; + private final UserSession userSession; + + public DeleteTemplateAction(DbClient dbClient, UserSession userSession) { + this.dbClient = dbClient; + this.userSession = userSession; + } + + @Override + public void define(WebService.NewController context) { + WebService.NewAction action = context.createAction("delete_template") + .setDescription("Delete a permission template.<br />" + + "It requires administration permissions to access.") + .setSince("5.2") + .setPost(true) + .setHandler(this); + + createTemplateKeyParameter(action); + } + + @Override + public void handle(Request wsRequest, Response wsResponse) throws Exception { + checkGlobalAdminUser(userSession); + String key = wsRequest.mandatoryParam(PARAM_TEMPLATE_KEY); + + DbSession dbSession = dbClient.openSession(false); + try { + dbClient.permissionTemplateDao().deleteByKey(dbSession, key); + dbSession.commit(); + + wsResponse.noContent(); + } finally { + dbClient.closeSession(dbSession); + } + } +} 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 7d11fac90c5..d9a8fac4cfe 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 @@ -98,7 +98,7 @@ class Parameters { .setExampleValue("g.hopper"); } - static void createTemplateKeyParameter(NewAction action) { + static void createTemplateKeyParameterToAddRemoveUserOrGroup(NewAction action) { action.createParam(PARAM_LONG_TEMPLATE_KEY) .setRequired(true) .setDescription("Template key") @@ -116,4 +116,11 @@ class Parameters { .setDescription("Description") .setExampleValue("Permissions for all projects related to the financial service"); } + + static void createTemplateKeyParameter(NewAction action) { + action.createParam(PARAM_TEMPLATE_KEY) + .setRequired(true) + .setDescription("Key") + .setExampleValue("af8cb8cc-1e78-4c4e-8c00-ee8e814009a5"); + } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java index 2ff2cfcd9d7..6998cf23015 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java @@ -43,6 +43,7 @@ public class PermissionsWsModule extends Module { AddGroupToTemplateAction.class, RemoveGroupFromTemplateAction.class, CreateTemplateAction.class, - UpdateTemplateAction.class); + UpdateTemplateAction.class, + DeleteTemplateAction.class); } } 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 3a625cb0b53..ebd3820f4eb 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 @@ -36,7 +36,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_KEY; 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.createTemplateKeyParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; public class RemoveGroupFromTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -60,7 +60,7 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameter(action); + createTemplateKeyParameterToAddRemoveUserOrGroup(action); createProjectPermissionParameter(action); createGroupIdParameter(action); createGroupNameParameter(action); 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 4d0474b6af3..3ed9eeebf40 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 @@ -35,7 +35,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_KEY; 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.createTemplateKeyParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter; public class RemoveUserFromTemplateAction implements PermissionsWsAction { @@ -59,7 +59,7 @@ public class RemoveUserFromTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameter(action); + createTemplateKeyParameterToAddRemoveUserOrGroup(action); createProjectPermissionParameter(action); createUserLoginParameter(action); } 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 bab5ce1c3ad..77544635e70 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 @@ -44,6 +44,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_KEY; 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.createTemplateKeyParameter; import static org.sonar.server.permission.ws.Parameters.createTemplateProjectKeyPatternParameter; import static org.sonar.server.permission.ws.PermissionTemplateDtoToPermissionTemplateResponse.toPermissionTemplateResponse; import static org.sonar.server.ws.WsUtils.checkRequest; @@ -72,10 +73,7 @@ public class UpdateTemplateAction implements PermissionsWsAction { .setPost(true) .setHandler(this); - action.createParam(PARAM_TEMPLATE_KEY) - .setRequired(true) - .setDescription("Key") - .setExampleValue("af8cb8cc-1e78-4c4e-8c00-ee8e814009a5"); + createTemplateKeyParameter(action); action.createParam(PARAM_TEMPLATE_NAME) .setDescription("Name") 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 new file mode 100644 index 00000000000..e30c3f403ee --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java @@ -0,0 +1,129 @@ +/* + * 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.Nullable; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.sonar.api.utils.System2; +import org.sonar.core.permission.GlobalPermissions; +import org.sonar.db.DbClient; +import org.sonar.db.DbSession; +import org.sonar.db.DbTester; +import org.sonar.db.permission.PermissionTemplateDto; +import org.sonar.server.exceptions.ForbiddenException; +import org.sonar.server.exceptions.UnauthorizedException; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.ws.TestRequest; +import org.sonar.server.ws.TestResponse; +import org.sonar.server.ws.WsActionTester; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_KEY; + +public class DeleteTemplateActionTest { + + static final String TEMPLATE_KEY = "permission-template-key"; + + @Rule + public DbTester db = DbTester.create(System2.INSTANCE); + @Rule + public UserSessionRule userSession = UserSessionRule.standalone(); + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + WsActionTester ws; + DbClient dbClient; + DbSession dbSession; + PermissionTemplateDto permissionTemplate; + + @Before + public void setUp() { + userSession.login().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + + dbClient = db.getDbClient(); + dbSession = db.getSession(); + ws = new WsActionTester(new DeleteTemplateAction(dbClient, userSession)); + + permissionTemplate = insertTemplate(newPermissionTemplateDto().setKee("permission-template-key")); + commit(); + assertThat(dbClient.permissionTemplateDao().selectByKey(dbSession, TEMPLATE_KEY)).isNotNull(); + } + + @Test + public void delete_template_in_db() { + + TestResponse result = newRequest(TEMPLATE_KEY); + + assertThat(result.getInput()).isEmpty(); + assertThat(dbClient.permissionTemplateDao().selectByKey(dbSession, TEMPLATE_KEY)).isNull(); + } + + @Test + public void fail_if_not_logged_in() { + expectedException.expect(UnauthorizedException.class); + userSession.anonymous(); + + newRequest(TEMPLATE_KEY); + } + + @Test + public void fail_if_not_admin() { + expectedException.expect(ForbiddenException.class); + userSession.login().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + + newRequest(TEMPLATE_KEY); + } + + @Test + public void fail_if_key_is_not_provided() { + expectedException.expect(IllegalArgumentException.class); + + newRequest(null); + } + + private PermissionTemplateDto insertTemplate(PermissionTemplateDto template) { + return dbClient.permissionTemplateDao().insert(dbSession, template); + } + + private void commit() { + dbSession.commit(); + } + + private TestResponse newRequest(@Nullable String key) { + TestRequest request = ws.newRequest(); + if (key != null) { + request.setParam(PARAM_TEMPLATE_KEY, key); + } + + TestResponse result = executeRequest(request); + commit(); + return result; + } + + private static TestResponse executeRequest(TestRequest request) { + return request.execute(); + } + +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java index 59edfb47928..69eadbe065f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java @@ -30,6 +30,6 @@ public class PermissionsWsModuleTest { public void verify_count_of_added_components() { ComponentContainer container = new ComponentContainer(); new PermissionsWsModule().configure(container); - assertThat(container.size()).isEqualTo(20); + assertThat(container.size()).isEqualTo(21); } } |