diff --git a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsModule.java index 98616286efcf..098106d29e1b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsModule.java +++ b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsModule.java @@ -40,9 +40,8 @@ protected void configureModule() { OrganizationsWsSupport.class, // actions SearchAction.class, - SearchMembersAction.class, - // Update of project visibility is used on on-premise instances, not only on SonarCloud / Organizations - UpdateProjectVisibilityAction.class); + SearchMembersAction.class); + if (config.getBoolean(SONARCLOUD_ENABLED.getKey()).orElse(false)) { add( OrganisationSupport.class, diff --git a/server/sonar-server/src/main/java/org/sonar/server/project/ws/ProjectsWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/project/ws/ProjectsWsModule.java index a466e01ba450..da21fa5d78b8 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/project/ws/ProjectsWsModule.java +++ b/server/sonar-server/src/main/java/org/sonar/server/project/ws/ProjectsWsModule.java @@ -19,11 +19,19 @@ */ package org.sonar.server.project.ws; +import org.sonar.api.config.Configuration; import org.sonar.core.platform.Module; +import org.sonar.process.ProcessProperties; import org.sonar.server.project.ProjectLifeCycleListenersImpl; public class ProjectsWsModule extends Module { + private final Configuration configuration; + + public ProjectsWsModule(Configuration configuration) { + this.configuration = configuration; + } + @Override protected void configureModule() { add( @@ -41,5 +49,10 @@ protected void configureModule() { SearchMyProjectsAction.class, SearchAction.class, UpdateVisibilityAction.class); + + if (!configuration.getBoolean(ProcessProperties.Property.SONARCLOUD_ENABLED.getKey()).orElse(false)) { + // Updating default visibility is not available in SonarCloud + add(UpdateDefaultVisibilityAction.class); + } } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/UpdateProjectVisibilityAction.java b/server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateDefaultVisibilityAction.java similarity index 59% rename from server/sonar-server/src/main/java/org/sonar/server/organization/ws/UpdateProjectVisibilityAction.java rename to server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateDefaultVisibilityAction.java index 1260e7d89371..e140e6aebf66 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/UpdateProjectVisibilityAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateDefaultVisibilityAction.java @@ -17,52 +17,48 @@ * 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.organization.ws; +package org.sonar.server.project.ws; import java.util.Optional; +import org.sonar.api.server.ws.Change; 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.db.organization.OrganizationDto; -import org.sonar.db.permission.OrganizationPermission; -import org.sonar.server.organization.BillingValidations; -import org.sonar.server.organization.BillingValidationsProxy; +import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.project.Visibility; import org.sonar.server.user.UserSession; -import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_ORGANIZATION; +import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException; import static org.sonar.server.ws.WsUtils.checkFoundWithOptional; -public class UpdateProjectVisibilityAction implements OrganizationsWsAction { - static final String ACTION = "update_project_visibility"; +public class UpdateDefaultVisibilityAction implements ProjectsWsAction { + static final String ACTION = "update_default_visibility"; static final String PARAM_PROJECT_VISIBILITY = "projectVisibility"; private final UserSession userSession; private final DbClient dbClient; - private final BillingValidationsProxy billingValidations; + private final DefaultOrganizationProvider defaultOrganizationProvider; - public UpdateProjectVisibilityAction(UserSession userSession, DbClient dbClient, BillingValidationsProxy billingValidations) { + public UpdateDefaultVisibilityAction(UserSession userSession, DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider) { this.userSession = userSession; this.dbClient = dbClient; - this.billingValidations = billingValidations; + this.defaultOrganizationProvider = defaultOrganizationProvider; } @Override public void define(WebService.NewController context) { WebService.NewAction action = context.createAction(ACTION) .setPost(true) - .setDescription("Update the default visibility for new projects of the specified organization.") + .setDescription("Update the default visibility for new projects.
Requires System Administrator privileges") + .setChangelog( + new Change("7.3", "This WS used to be located at /api/organizations/update_project_visibility")) .setInternal(true) .setSince("6.4") .setHandler(this); - action.createParam(PARAM_ORGANIZATION) - .setRequired(true) - .setDescription("Organization key") - .setExampleValue("foo-company"); - action.createParam(PARAM_PROJECT_VISIBILITY) .setRequired(true) .setDescription("Default visibility for projects") @@ -71,24 +67,17 @@ public void define(WebService.NewController context) { @Override public void handle(Request request, Response response) throws Exception { - String organizationKey = request.mandatoryParam(PARAM_ORGANIZATION); boolean newProjectsPrivate = Visibility.isPrivate(request.mandatoryParam(PARAM_PROJECT_VISIBILITY)); + try (DbSession dbSession = dbClient.openSession(false)) { - Optional optionalOrganization = dbClient.organizationDao().selectByKey(dbSession, organizationKey); - OrganizationDto organization = checkFoundWithOptional(optionalOrganization, "No organization with key '" + organizationKey + "' can be found."); - userSession.checkPermission(OrganizationPermission.ADMINISTER, organization.getUuid()); - checkCanUpdateProjectsVisibility(organization, newProjectsPrivate); + Optional optionalOrganization = dbClient.organizationDao().selectByKey(dbSession, defaultOrganizationProvider.get().getKey()); + OrganizationDto organization = checkFoundWithOptional(optionalOrganization, "No default organization."); + if (!userSession.isSystemAdministrator()) { + throw insufficientPrivilegesException(); + } dbClient.organizationDao().setNewProjectPrivate(dbSession, organization, newProjectsPrivate); dbSession.commit(); } response.noContent(); } - - private void checkCanUpdateProjectsVisibility(OrganizationDto organization, boolean newProjectsPrivate) { - try { - billingValidations.checkCanUpdateProjectVisibility(new BillingValidations.Organization(organization.getKey(), organization.getUuid()), newProjectsPrivate); - } catch (BillingValidations.BillingValidationsException e) { - throw new IllegalArgumentException(e.getMessage()); - } - } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/OrganizationsWsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/OrganizationsWsModuleTest.java index 57f01dd1e4a9..186c8811075d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/OrganizationsWsModuleTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/OrganizationsWsModuleTest.java @@ -33,23 +33,23 @@ public class OrganizationsWsModuleTest { private OrganizationsWsModule underTest = new OrganizationsWsModule(mapSettings.asConfig()); @Test - public void verify_component_count_when_not_on_sonar_cloud() { + public void verify_component_count_when_on_SonarQube() { mapSettings.setProperty("sonar.sonarcloud.enabled", false); underTest.configure(container); assertThat(container.getPicoContainer().getComponentAdapters()) - .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 5); + .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 4); } @Test - public void verify_component_count_when_on_sonar_cloud() { + public void verify_component_count_when_on_SonarCloud() { mapSettings.setProperty("sonar.sonarcloud.enabled", true); underTest.configure(container); assertThat(container.getPicoContainer().getComponentAdapters()) - .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 12); + .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 11); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/UpdateProjectVisibilityActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/UpdateProjectVisibilityActionTest.java deleted file mode 100644 index 5a48c5eee0e3..000000000000 --- a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/UpdateProjectVisibilityActionTest.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2018 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program 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. - * - * This program 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.organization.ws; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.sonar.api.server.ws.WebService; -import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; -import org.sonar.server.exceptions.ForbiddenException; -import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.organization.BillingValidations; -import org.sonar.server.organization.BillingValidationsProxy; -import org.sonar.server.tester.UserSessionRule; -import org.sonar.server.ws.TestRequest; -import org.sonar.server.ws.WsActionTester; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; -import static org.sonar.db.permission.OrganizationPermission.ADMINISTER; -import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_ORGANIZATION; -import static org.sonar.server.organization.ws.UpdateProjectVisibilityAction.ACTION; -import static org.sonar.server.organization.ws.UpdateProjectVisibilityAction.PARAM_PROJECT_VISIBILITY; - -public class UpdateProjectVisibilityActionTest { - @Rule - public DbTester dbTester = DbTester.create(); - @Rule - public UserSessionRule userSession = UserSessionRule.standalone(); - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - private BillingValidationsProxy billingValidations = mock(BillingValidationsProxy.class); - - private UpdateProjectVisibilityAction underTest = new UpdateProjectVisibilityAction(userSession, dbTester.getDbClient(), billingValidations); - private WsActionTester wsTester = new WsActionTester(underTest); - - @Test - public void verify_define() { - WebService.Action action = wsTester.getDef(); - assertThat(action.key()).isEqualTo(ACTION); - assertThat(action.isPost()).isTrue(); - assertThat(action.description()).isNotEmpty(); - assertThat(action.isInternal()).isTrue(); - assertThat(action.since()).isEqualTo("6.4"); - assertThat(action.handler()).isEqualTo(underTest); - assertThat(action.changelog()).isEmpty(); - - WebService.Param organization = action.param(PARAM_ORGANIZATION); - assertThat(organization.isRequired()).isTrue(); - assertThat(organization.exampleValue()).isEqualTo("foo-company"); - assertThat(organization.description()).isEqualTo("Organization key"); - - WebService.Param projectVisibility = action.param(PARAM_PROJECT_VISIBILITY); - assertThat(projectVisibility.isRequired()).isTrue(); - assertThat(projectVisibility.possibleValues()).containsExactlyInAnyOrder("private", "public"); - assertThat(projectVisibility.description()).isEqualTo("Default visibility for projects"); - } - - @Test - public void change_project_visibility_to_private() { - OrganizationDto organization = dbTester.organizations().insert(); - dbTester.organizations().setNewProjectPrivate(organization, false); - userSession.logIn().addPermission(ADMINISTER, organization); - - wsTester.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .setParam(PARAM_PROJECT_VISIBILITY, "private") - .execute(); - - assertThat(dbTester.getDbClient().organizationDao().getNewProjectPrivate(dbTester.getSession(), organization)).isTrue(); - } - - @Test - public void change_project_visibility_to_public() { - OrganizationDto organization = dbTester.organizations().insert(); - dbTester.organizations().setNewProjectPrivate(organization, true); - userSession.logIn().addPermission(ADMINISTER, organization); - - wsTester.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .setParam(PARAM_PROJECT_VISIBILITY, "public") - .execute(); - dbTester.organizations().getNewProjectPrivate(organization); - - assertThat(dbTester.organizations().getNewProjectPrivate(organization)).isFalse(); - } - - @Test - public void fail_to_update_visibility_to_private_when_organization_is_not_allowed_to_use_private_projects() { - OrganizationDto organization = dbTester.organizations().insert(); - dbTester.organizations().setNewProjectPrivate(organization, true); - userSession.logIn().addPermission(ADMINISTER, organization); - doThrow(new BillingValidations.BillingValidationsException("This organization cannot use project private")).when(billingValidations) - .checkCanUpdateProjectVisibility(any(BillingValidations.Organization.class), eq(true)); - - expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage("This organization cannot use project private"); - - wsTester.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .setParam(PARAM_PROJECT_VISIBILITY, "private") - .execute(); - } - - @Test - public void does_not_fail_to_update_visibility_to_public_when_organization_is_not_allowed_to_use_private_projects() { - OrganizationDto organization = dbTester.organizations().insert(); - dbTester.organizations().setNewProjectPrivate(organization, true); - userSession.logIn().addPermission(ADMINISTER, organization); - doThrow(new BillingValidations.BillingValidationsException("This organization cannot use project private")).when(billingValidations) - .checkCanUpdateProjectVisibility(any(BillingValidations.Organization.class), eq(true)); - - wsTester.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .setParam(PARAM_PROJECT_VISIBILITY, "public") - .execute(); - - assertThat(dbTester.organizations().getNewProjectPrivate(organization)).isFalse(); - } - - @Test - public void fail_if_organization_does_not_exist() { - TestRequest request = wsTester.newRequest() - .setParam(PARAM_ORGANIZATION, "does not exist") - .setParam(PARAM_PROJECT_VISIBILITY, "private"); - - expectedException.expect(NotFoundException.class); - request.execute(); - } - - @Test - public void should_fail_if_permissions_are_missing() { - OrganizationDto organization = dbTester.organizations().insert(); - TestRequest request = wsTester.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .setParam(PARAM_PROJECT_VISIBILITY, "private"); - - expectedException.expect(ForbiddenException.class); - request.execute(); - } -} diff --git a/server/sonar-server/src/test/java/org/sonar/server/project/ws/ProjectsWsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/project/ws/ProjectsWsModuleTest.java index 495366c2f14b..1cca08e5e57c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/project/ws/ProjectsWsModuleTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/project/ws/ProjectsWsModuleTest.java @@ -20,16 +20,32 @@ package org.sonar.server.project.ws; import org.junit.Test; +import org.sonar.api.config.internal.ConfigurationBridge; +import org.sonar.api.config.internal.MapSettings; import org.sonar.core.platform.ComponentContainer; +import org.sonar.process.ProcessProperties; import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.core.platform.ComponentContainer.COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER; public class ProjectsWsModuleTest { + + private MapSettings settings = new MapSettings(); + + @Test + public void verify_count_of_added_components_on_SonarQube() { + ComponentContainer container = new ComponentContainer(); + new ProjectsWsModule(new ConfigurationBridge(settings)).configure(container); + assertThat(container.size()).isEqualTo(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 15); + } + @Test - public void verify_count_of_added_components() { + public void verify_count_of_added_components_on_SonarCloud() { ComponentContainer container = new ComponentContainer(); - new ProjectsWsModule().configure(container); + settings.setProperty(ProcessProperties.Property.SONARCLOUD_ENABLED.getKey(), true); + + new ProjectsWsModule(new ConfigurationBridge(settings)).configure(container); assertThat(container.size()).isEqualTo(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 14); } + } diff --git a/server/sonar-server/src/test/java/org/sonar/server/project/ws/UpdateDefaultVisibilityActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/project/ws/UpdateDefaultVisibilityActionTest.java new file mode 100644 index 000000000000..6c9e8791ffdd --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/project/ws/UpdateDefaultVisibilityActionTest.java @@ -0,0 +1,105 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program 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. + * + * This program 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.project.ws; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.sonar.api.config.internal.MapSettings; +import org.sonar.api.server.ws.Change; +import org.sonar.api.server.ws.WebService; +import org.sonar.db.DbTester; +import org.sonar.server.exceptions.ForbiddenException; +import org.sonar.server.organization.DefaultOrganizationProvider; +import org.sonar.server.organization.DefaultOrganizationProviderImpl; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.ws.TestRequest; +import org.sonar.server.ws.WsActionTester; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.tuple; +import static org.sonar.server.project.ws.UpdateDefaultVisibilityAction.ACTION; +import static org.sonar.server.project.ws.UpdateDefaultVisibilityAction.PARAM_PROJECT_VISIBILITY; + +public class UpdateDefaultVisibilityActionTest { + @Rule + public DbTester dbTester = DbTester.create(); + @Rule + public UserSessionRule userSession = UserSessionRule.standalone(); + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + private DefaultOrganizationProvider defaultOrganizationProvider = new DefaultOrganizationProviderImpl(dbTester.getDbClient()); + private UpdateDefaultVisibilityAction underTest = new UpdateDefaultVisibilityAction(userSession, dbTester.getDbClient(), defaultOrganizationProvider); + private WsActionTester wsTester = new WsActionTester(underTest); + + @Test + public void change_project_visibility_to_private() { + userSession.logIn().setSystemAdministrator(); + + wsTester.newRequest() + .setParam(PARAM_PROJECT_VISIBILITY, "private") + .execute(); + + assertThat(dbTester.getDbClient().organizationDao().getNewProjectPrivate(dbTester.getSession(), dbTester.getDefaultOrganization())).isTrue(); + } + + @Test + public void change_project_visibility_to_public() { + dbTester.organizations().setNewProjectPrivate(dbTester.getDefaultOrganization(), true); + userSession.logIn().setSystemAdministrator(); + + wsTester.newRequest() + .setParam(PARAM_PROJECT_VISIBILITY, "public") + .execute(); + + assertThat(dbTester.organizations().getNewProjectPrivate(dbTester.getDefaultOrganization())).isFalse(); + } + + @Test + public void fail_if_not_loggued_as_system_administrator() { + userSession.logIn(); + + TestRequest request = wsTester.newRequest() + .setParam(PARAM_PROJECT_VISIBILITY, "private"); + + expectedException.expect(ForbiddenException.class); + request.execute(); + } + + @Test + public void verify_define() { + WebService.Action action = wsTester.getDef(); + assertThat(action.key()).isEqualTo(ACTION); + assertThat(action.isPost()).isTrue(); + assertThat(action.description()).isNotEmpty(); + assertThat(action.isInternal()).isTrue(); + assertThat(action.since()).isEqualTo("6.4"); + assertThat(action.handler()).isEqualTo(underTest); + assertThat(action.changelog()) + .extracting(Change::getVersion, Change::getDescription) + .contains(tuple("7.3", "This WS used to be located at /api/organizations/update_project_visibility")); + + WebService.Param projectVisibility = action.param(PARAM_PROJECT_VISIBILITY); + assertThat(projectVisibility.isRequired()).isTrue(); + assertThat(projectVisibility.possibleValues()).containsExactlyInAnyOrder("private", "public"); + assertThat(projectVisibility.description()).isEqualTo("Default visibility for projects"); + } +} diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/OrganizationsService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/OrganizationsService.java index 1ffc208f2720..1ec8c2ba71de 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/OrganizationsService.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/OrganizationsService.java @@ -172,20 +172,4 @@ public void update(UpdateRequest request) { .setParam("url", request.getUrl()), UpdateWsResponse.parser()); } - - /** - * - * This is part of the internal API. - * This is a POST request. - * @see Further information about this action online (including a response example) - * @since 6.4 - */ - public void updateProjectVisibility(UpdateProjectVisibilityRequest request) { - call( - new PostRequest(path("update_project_visibility")) - .setParam("organization", request.getOrganization()) - .setParam("projectVisibility", request.getProjectVisibility()) - .setMediaType(MediaTypes.JSON) - ).content(); - } } diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/ProjectsService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/ProjectsService.java index 9af10fc42b02..2b1191b569dd 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/ProjectsService.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/ProjectsService.java @@ -22,14 +22,14 @@ import java.util.stream.Collectors; import javax.annotation.Generated; import org.sonarqube.ws.MediaTypes; +import org.sonarqube.ws.Projects.BulkUpdateKeyWsResponse; +import org.sonarqube.ws.Projects.CreateWsResponse; +import org.sonarqube.ws.Projects.SearchMyProjectsWsResponse; +import org.sonarqube.ws.Projects.SearchWsResponse; import org.sonarqube.ws.client.BaseService; import org.sonarqube.ws.client.GetRequest; import org.sonarqube.ws.client.PostRequest; import org.sonarqube.ws.client.WsConnector; -import org.sonarqube.ws.Projects.BulkUpdateKeyWsResponse; -import org.sonarqube.ws.Projects.CreateWsResponse; -import org.sonarqube.ws.Projects.SearchWsResponse; -import org.sonarqube.ws.Projects.SearchMyProjectsWsResponse; /** * @see Further information about this web service online @@ -251,4 +251,19 @@ public void updateVisibility(UpdateVisibilityRequest request) { .setMediaType(MediaTypes.JSON) ).content(); } + + /** + * + * This is part of the internal API. + * This is a POST request. + * @see Further information about this action online (including a response example) + * @since 6.4 + */ + public void updateDefaultVisibility(UpdateDefaultVisibilityRequest request) { + call( + new PostRequest(path("update_default_visibility")) + .setParam("projectVisibility", request.getProjectVisibility()) + .setMediaType(MediaTypes.JSON) + ).content(); + } } diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/UpdateProjectVisibilityRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/UpdateDefaultVisibilityRequest.java similarity index 69% rename from sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/UpdateProjectVisibilityRequest.java rename to sonar-ws/src/main/java/org/sonarqube/ws/client/projects/UpdateDefaultVisibilityRequest.java index 378d5f33fb73..7f5b2ae7d481 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/UpdateProjectVisibilityRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/UpdateDefaultVisibilityRequest.java @@ -17,36 +17,21 @@ * 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.sonarqube.ws.client.organizations; +package org.sonarqube.ws.client.projects; -import java.util.List; import javax.annotation.Generated; /** * This is part of the internal API. * This is a POST request. - * @see Further information about this action online (including a response example) + * @see Further information about this action online (including a response example) * @since 6.4 */ @Generated("sonar-ws-generator") -public class UpdateProjectVisibilityRequest { +public class UpdateDefaultVisibilityRequest { - private String organization; private String projectVisibility; - /** - * This is a mandatory parameter. - * Example value: "foo-company" - */ - public UpdateProjectVisibilityRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Possible values: @@ -55,7 +40,7 @@ public String getOrganization() { *
  • "public"
  • * */ - public UpdateProjectVisibilityRequest setProjectVisibility(String projectVisibility) { + public UpdateDefaultVisibilityRequest setProjectVisibility(String projectVisibility) { this.projectVisibility = projectVisibility; return this; }