]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-11220 Nb tokens is returned only for logged user or System Administrators ...
authorBenoit <43733395+benoit-sns@users.noreply.github.com>
Mon, 29 Oct 2018 10:43:07 +0000 (10:43 +0000)
committersonartech <sonartech@sonarsource.com>
Tue, 30 Oct 2018 11:42:03 +0000 (12:42 +0100)
server/sonar-server/src/main/java/org/sonar/server/user/ws/SearchAction.java
server/sonar-server/src/test/java/org/sonar/server/user/ws/SearchActionTest.java

index bfb1d3ad9e0ed4c91c5cf735ed1052eaf2b2d7b2..d4af058fba34ffa28cdf3d4ad9c4145d1a27752f 100644 (file)
@@ -92,6 +92,7 @@ public class SearchAction implements UsersWsAction {
     WebService.NewAction action = controller.createAction("search")
       .setDescription("Get a list of active users. <br/>" +
         "Administer System permission is required to show the 'groups' field.<br/>" +
+        "Field 'tokensCount' is only accessible to System Administrator and logged in user.<br/>" +
         "When accessed anonymously, only logins and names are returned.")
       .setSince("3.6")
       .setChangelog(
@@ -152,7 +153,7 @@ public class SearchAction implements UsersWsAction {
       setIfNeeded(FIELD_ACTIVE, fields, user.isActive(), userBuilder::setActive);
       setIfNeeded(FIELD_LOCAL, fields, user.isLocal(), userBuilder::setLocal);
       setIfNeeded(FIELD_EXTERNAL_PROVIDER, fields, user.getExternalIdentityProvider(), userBuilder::setExternalProvider);
-      setIfNeeded(FIELD_TOKENS_COUNT, fields, tokensCount, userBuilder::setTokensCount);
+      setIfNeeded(isNeeded(FIELD_TOKENS_COUNT, fields) && user.getLogin().equals(userSession.getLogin()), tokensCount, userBuilder::setTokensCount);
       setIfNeeded(isNeeded(FIELD_SCM_ACCOUNTS, fields) && !user.getScmAccountsAsList().isEmpty(), user.getScmAccountsAsList(),
         scm -> userBuilder.setScmAccounts(ScmAccounts.newBuilder().addAllScmAccounts(scm)));
     }
@@ -161,6 +162,7 @@ public class SearchAction implements UsersWsAction {
       setIfNeeded(isNeeded(FIELD_GROUPS, fields) && !groups.isEmpty(), groups,
         g -> userBuilder.setGroups(Groups.newBuilder().addAllGroups(g)));
       setIfNeeded(FIELD_EXTERNAL_IDENTITY, fields, user.getExternalLogin(), userBuilder::setExternalIdentity);
+      setIfNeeded(FIELD_TOKENS_COUNT, fields, tokensCount, userBuilder::setTokensCount);
     }
     return userBuilder.build();
   }
index 6def2160c4cfe478b218976b385d0fd30c2a2a2d..3d4db8c90737f765ac8837fa911769775b2bb4e1 100644 (file)
@@ -133,19 +133,43 @@ public class SearchActionTest {
   }
 
   @Test
-  public void return_tokens_count() {
+  public void return_tokens_count_for_logged_user() {
     UserDto user = db.users().insertUser();
     db.users().insertToken(user);
     db.users().insertToken(user);
     userIndexer.indexOnStartup(null);
+
     userSession.logIn();
+    assertThat(ws.newRequest()
+        .executeProtobuf(SearchWsResponse.class).getUsersList())
+        .extracting(User::getLogin, User::hasTokensCount)
+        .containsExactlyInAnyOrder(tuple(user.getLogin(), false));
 
-    SearchWsResponse response = ws.newRequest()
-      .executeProtobuf(SearchWsResponse.class);
+    userSession.logIn(user);
+    assertThat(ws.newRequest()
+        .executeProtobuf(SearchWsResponse.class).getUsersList())
+        .extracting(User::getLogin, User::getTokensCount)
+        .containsExactlyInAnyOrder(tuple(user.getLogin(), 2));
+  }
 
-    assertThat(response.getUsersList())
-      .extracting(User::getLogin, User::getTokensCount)
-      .containsExactlyInAnyOrder(tuple(user.getLogin(), 2));
+  @Test
+  public void return_tokens_count_when_system_administer() {
+    UserDto user = db.users().insertUser();
+    db.users().insertToken(user);
+    db.users().insertToken(user);
+    userIndexer.indexOnStartup(null);
+
+    userSession.logIn().setSystemAdministrator();
+    assertThat(ws.newRequest()
+      .executeProtobuf(SearchWsResponse.class).getUsersList())
+        .extracting(User::getLogin, User::getTokensCount)
+        .containsExactlyInAnyOrder(tuple(user.getLogin(), 2));
+
+    userSession.logIn();
+    assertThat(ws.newRequest()
+        .executeProtobuf(SearchWsResponse.class).getUsersList())
+        .extracting(User::getLogin, User::hasTokensCount)
+        .containsExactlyInAnyOrder(tuple(user.getLogin(), false));
   }
 
   @Test