diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2017-06-14 13:12:13 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@sonarsource.com> | 2017-06-14 14:43:10 +0200 |
commit | bcdb4a2044d6fcbb3a7c0786c47876c446f3bd4c (patch) | |
tree | 2cad423d03344ccc10bac0bc1e673de3d346c388 /server | |
parent | 41bea62b7d6085260437624e73b0e049b3e43390 (diff) | |
download | sonarqube-bcdb4a2044d6fcbb3a7c0786c47876c446f3bd4c.tar.gz sonarqube-bcdb4a2044d6fcbb3a7c0786c47876c446f3bd4c.zip |
SONAR-9081 Remove /batch/users WS
Diffstat (limited to 'server')
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(); - } - -} |