aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2017-06-14 13:12:13 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2017-06-14 14:43:10 +0200
commitbcdb4a2044d6fcbb3a7c0786c47876c446f3bd4c (patch)
tree2cad423d03344ccc10bac0bc1e673de3d346c388 /server
parent41bea62b7d6085260437624e73b0e049b3e43390 (diff)
downloadsonarqube-bcdb4a2044d6fcbb3a7c0786c47876c446f3bd4c.tar.gz
sonarqube-bcdb4a2044d6fcbb3a7c0786c47876c446f3bd4c.zip
SONAR-9081 Remove /batch/users WS
Diffstat (limited to 'server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/batch/BatchWsModule.java1
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java92
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndex.java26
-rw-r--r--server/sonar-server/src/main/resources/org/sonar/server/batch/users-example.proto5
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsModuleTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/batch/UsersActionTest.java90
6 files changed, 1 insertions, 215 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/BatchWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/batch/BatchWsModule.java
index 05911c0edc2..74d256f85d7 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/batch/BatchWsModule.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/batch/BatchWsModule.java
@@ -29,7 +29,6 @@ public class BatchWsModule extends Module {
ProjectAction.class,
ProjectDataLoader.class,
IssuesAction.class,
- UsersAction.class,
IndexAction.class,
FileAction.class,
BatchWs.class);
diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java
deleted file mode 100644
index 9bc9ff26aab..00000000000
--- a/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2017 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.batch;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Iterator;
-import java.util.List;
-import org.sonar.api.server.ws.Request;
-import org.sonar.api.server.ws.Response;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.scanner.protocol.input.ScannerInput;
-import org.sonar.server.user.UserSession;
-import org.sonar.server.user.index.UserDoc;
-import org.sonar.server.user.index.UserIndex;
-import org.sonarqube.ws.MediaTypes;
-
-public class UsersAction implements BatchWsAction {
-
- private static final String PARAM_LOGINS = "logins";
-
- private final UserIndex userIndex;
- private final UserSession userSession;
-
- public UsersAction(UserIndex userIndex, UserSession userSession) {
- this.userIndex = userIndex;
- this.userSession = userSession;
- }
-
- @Override
- public void define(WebService.NewController controller) {
- WebService.NewAction action = controller.createAction("users")
- .setDescription("Return user details.")
- .setSince("5.2")
- .setResponseExample(getClass().getResource("users-example.proto"))
- .setInternal(true)
- .setHandler(this);
-
- action
- .createParam(PARAM_LOGINS)
- .setRequired(true)
- .setDescription("A comma separated list of user logins")
- .setExampleValue("ada.lovelace,grace.hopper");
- }
-
- @Override
- public void handle(Request request, Response response) throws Exception {
- userSession.checkLoggedIn();
- List<String> logins = request.mandatoryParamAsStrings(PARAM_LOGINS);
-
- response.stream().setMediaType(MediaTypes.PROTOBUF);
- ScannerInput.User.Builder userBuilder = ScannerInput.User.newBuilder();
- OutputStream output = response.stream().output();
- try {
- for (Iterator<UserDoc> userDocIterator = userIndex.selectUsersForBatch(logins); userDocIterator.hasNext();) {
- handleUser(userDocIterator.next(), userBuilder, output);
- }
- } finally {
- output.close();
- }
- }
-
- private static void handleUser(UserDoc user, ScannerInput.User.Builder userBuilder, OutputStream out) {
- userBuilder
- .clear()
- .setLogin(user.login())
- .setName(user.name());
- try {
- userBuilder.build().writeDelimitedTo(out);
- } catch (IOException e) {
- throw new IllegalStateException("Unable to serialize user", e);
- }
- userBuilder.clear();
- }
-}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndex.java b/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndex.java
index 9b0613059ab..8a848c79baf 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndex.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndex.java
@@ -20,7 +20,6 @@
package org.sonar.server.user.index;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import java.util.Optional;
import javax.annotation.CheckForNull;
@@ -28,20 +27,15 @@ import org.apache.commons.lang.StringUtils;
import org.elasticsearch.action.get.GetRequestBuilder;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
-import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.action.search.SearchType;
-import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
-import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.server.ServerSide;
import org.sonar.server.es.EsClient;
-import org.sonar.server.es.EsUtils;
import org.sonar.server.es.SearchOptions;
import org.sonar.server.es.SearchResult;
@@ -49,7 +43,6 @@ import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
-import static org.elasticsearch.index.query.QueryBuilders.termsQuery;
import static org.sonar.server.es.DefaultIndexSettingsElement.SORTABLE_ANALYZER;
import static org.sonar.server.es.DefaultIndexSettingsElement.USER_SEARCH_GRAMS_ANALYZER;
import static org.sonar.server.user.index.UserIndexDefinition.FIELD_ACTIVE;
@@ -103,25 +96,6 @@ public class UserIndex {
return result;
}
- public Iterator<UserDoc> selectUsersForBatch(List<String> logins) {
- BoolQueryBuilder filter = boolQuery()
- .filter(termsQuery(FIELD_LOGIN, logins));
-
- SearchRequestBuilder requestBuilder = esClient
- .prepareSearch(UserIndexDefinition.INDEX_TYPE_USER)
- .setSearchType(SearchType.SCAN)
- .addSort(SortBuilders.fieldSort(FIELD_LOGIN).order(SortOrder.ASC))
- .setScroll(TimeValue.timeValueMinutes(EsUtils.SCROLL_TIME_IN_MINUTES))
- .setSize(10_000)
- .setFetchSource(
- new String[] {FIELD_LOGIN, FIELD_NAME},
- null)
- .setQuery(filter);
- SearchResponse response = requestBuilder.get();
-
- return EsUtils.scroll(esClient, response.getScrollId(), UserDoc::new);
- }
-
public SearchResult<UserDoc> search(UserQuery userQuery, SearchOptions options) {
SearchRequestBuilder request = esClient.prepareSearch(UserIndexDefinition.INDEX_TYPE_USER)
.setSize(options.getLimit())
diff --git a/server/sonar-server/src/main/resources/org/sonar/server/batch/users-example.proto b/server/sonar-server/src/main/resources/org/sonar/server/batch/users-example.proto
deleted file mode 100644
index 6b32317db5a..00000000000
--- a/server/sonar-server/src/main/resources/org/sonar/server/batch/users-example.proto
+++ /dev/null
@@ -1,5 +0,0 @@
-# Response is a list of protocol buffer message User
-message User {
- optional string login = 1;
- optional string name = 2;
-}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsModuleTest.java
index 997c9ec8f53..e248ec50503 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsModuleTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsModuleTest.java
@@ -29,7 +29,7 @@ public class BatchWsModuleTest {
public void verify_count_of_added_components() {
ComponentContainer container = new ComponentContainer();
new BatchWsModule().configure(container);
- assertThat(container.size()).isEqualTo(10);
+ assertThat(container.size()).isEqualTo(9);
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/UsersActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/UsersActionTest.java
deleted file mode 100644
index 8dfe5e07330..00000000000
--- a/server/sonar-server/src/test/java/org/sonar/server/batch/UsersActionTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2017 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.batch;
-
-import java.io.ByteArrayInputStream;
-import java.util.Arrays;
-import java.util.List;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.config.MapSettings;
-import org.sonar.scanner.protocol.input.ScannerInput.User;
-import org.sonar.server.es.EsTester;
-import org.sonar.server.exceptions.UnauthorizedException;
-import org.sonar.server.tester.UserSessionRule;
-import org.sonar.server.user.index.UserDoc;
-import org.sonar.server.user.index.UserIndex;
-import org.sonar.server.user.index.UserIndexDefinition;
-import org.sonar.server.ws.WsTester;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class UsersActionTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- @Rule
- public EsTester es = new EsTester(new UserIndexDefinition(new MapSettings()));
-
- @Rule
- public UserSessionRule userSessionRule = UserSessionRule.standalone();
-
- UserIndex userIndex;
-
- WsTester tester;
-
- UsersAction usersAction;
-
- @Before
- public void before() {
- userIndex = new UserIndex(es.client());
- usersAction = new UsersAction(userIndex, userSessionRule);
- tester = new WsTester(new BatchWs(usersAction));
- }
-
- @Test
- public void return_minimal_fields() throws Exception {
- es.putDocuments(UserIndexDefinition.INDEX_TYPE_USER.getIndex(), UserIndexDefinition.INDEX_TYPE_USER.getType(),
- new UserDoc().setLogin("ada.lovelace").setName("Ada Lovelace").setActive(false),
- new UserDoc().setLogin("grace.hopper").setName("Grace Hopper").setActive(true));
- userSessionRule.logIn("sonarqtech");
-
- WsTester.TestRequest request = tester.newGetRequest("batch", "users").setParam("logins", "ada.lovelace,grace.hopper");
-
- ByteArrayInputStream input = new ByteArrayInputStream(request.execute().output());
- User user1 = User.parseDelimitedFrom(input);
- User user2 = User.parseDelimitedFrom(input);
- assertThat(User.parseDelimitedFrom(input)).isNull();
-
- List<User> users = Arrays.asList(user1, user2);
- assertThat(users).extracting("login").containsOnly("ada.lovelace", "grace.hopper");
- assertThat(users).extracting("name").containsOnly("Ada Lovelace", "Grace Hopper");
- }
-
- @Test
- public void fail_without_being_logged() throws Exception {
- thrown.expect(UnauthorizedException.class);
- tester.newGetRequest("batch", "users").setParam("logins", "ada.lovelace,grace.hopper").execute();
- }
-
-}