]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9194 Add canAdmin flag to WS api/navigation/global
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 11 May 2017 14:14:09 +0000 (16:14 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Fri, 12 May 2017 10:37:19 +0000 (12:37 +0200)
server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalAction.java
server/sonar-server/src/main/resources/org/sonar/server/ui/ws/global-example.json
server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java

index a5a9bc5a71b7e3e39565b6aede6a7544dc3c7301..ac787e9652837439abf355509f0bb4134b1baf39 100644 (file)
@@ -36,6 +36,7 @@ import org.sonar.server.organization.DefaultOrganizationProvider;
 import org.sonar.server.organization.OrganizationFlags;
 import org.sonar.server.ui.PageRepository;
 import org.sonar.server.ui.VersionFormatter;
+import org.sonar.server.user.UserSession;
 
 import static org.sonar.api.CoreProperties.RATING_GRID;
 import static org.sonar.core.config.WebConstants.SONARQUBE_DOT_COM_ENABLED;
@@ -63,9 +64,10 @@ public class GlobalAction implements NavigationWsAction {
   private final DbClient dbClient;
   private final OrganizationFlags organizationFlags;
   private final DefaultOrganizationProvider defaultOrganizationProvider;
+  private final UserSession userSession;
 
   public GlobalAction(PageRepository pageRepository, Settings settings, ResourceTypes resourceTypes, Server server,
-    DbClient dbClient, OrganizationFlags organizationFlags, DefaultOrganizationProvider defaultOrganizationProvider) {
+                      DbClient dbClient, OrganizationFlags organizationFlags, DefaultOrganizationProvider defaultOrganizationProvider, UserSession userSession) {
     this.pageRepository = pageRepository;
     this.settings = settings;
     this.resourceTypes = resourceTypes;
@@ -73,6 +75,7 @@ public class GlobalAction implements NavigationWsAction {
     this.dbClient = dbClient;
     this.organizationFlags = organizationFlags;
     this.defaultOrganizationProvider = defaultOrganizationProvider;
+    this.userSession = userSession;
   }
 
   @Override
@@ -88,6 +91,7 @@ public class GlobalAction implements NavigationWsAction {
   @Override
   public void handle(Request request, Response response) throws Exception {
     JsonWriter json = response.newJsonWriter().beginObject();
+    writeActions(json);
     writePages(json);
     writeSettings(json);
     writeDeprecatedLogoProperties(json);
@@ -98,6 +102,10 @@ public class GlobalAction implements NavigationWsAction {
     json.endObject().close();
   }
 
+  private void writeActions(JsonWriter json) {
+    json.prop("canAdmin", userSession.isSystemAdministrator());
+  }
+
   private void writePages(JsonWriter json) {
     json.name("globalPages").beginArray();
     for (org.sonar.api.web.page.Page page : pageRepository.getGlobalPages(false)) {
index 6af08ab2f9898299233e3f3fe426e151974ca74e..cddaab6ff311f4f3913cc9bbee626a7f318fc998 100644 (file)
@@ -26,5 +26,6 @@
   "version": "6.2",
   "productionDatabase": true,
   "organizationsEnabled": false,
-  "defaultOrganization": "key_foo"
+  "defaultOrganization": "key_foo",
+  "canAdmin": false
 }
index 1a651fec00ca287d8881ca4323d01b2430021e99..85e45dab932317e20bca71f223678fbbce5d612c 100644 (file)
@@ -50,7 +50,7 @@ import static org.sonar.test.JsonAssert.assertJson;
 public class GlobalActionTest {
 
   @Rule
-  public UserSessionRule userSessionRule = UserSessionRule.standalone();
+  public UserSessionRule userSession = UserSessionRule.standalone();
 
   private Settings settings = new MapSettings();
 
@@ -162,6 +162,14 @@ public class GlobalActionTest {
     executeAndVerify("organization_support.json");
   }
 
+  @Test
+  public void can_admin_on_global_level() {
+    init();
+    userSession.logIn().setRoot();
+
+    assertJson(call()).isSimilarTo("{\"canAdmin\":true}");
+  }
+
   @Test
   public void test_example_response() throws Exception {
     init(createPages(), new ResourceTypeTree[] {
@@ -205,7 +213,7 @@ public class GlobalActionTest {
     }});
     pageRepository.start();
     ws = new WsActionTester(new GlobalAction(pageRepository, settings, new ResourceTypes(resourceTypeTrees), server,
-      dbClient, organizationFlags, defaultOrganizationProvider));
+      dbClient, organizationFlags, defaultOrganizationProvider, userSession));
   }
 
   private void executeAndVerify(String json) {