Merge branch 'master' into ignite-11740
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
index 48d965c..c432e79 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
@@ -413,9 +413,7 @@
     private void checkFailures() {
         List<String> ids = cfg.getTrackedBranchesIds();
 
-        for (Iterator<String> iter = ids.iterator(); iter.hasNext(); ) {
-            String tbranchName = iter.next();
-
+        for (String tbranchName : ids) {
             try {
                 checkFailuresEx(tbranchName);
             }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java
index 1d0c302..ecda88e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java
@@ -32,6 +32,8 @@
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
+
+import org.apache.ignite.ci.conf.BranchTracked;
 import org.apache.ignite.ci.conf.ChainAtServer;
 import org.apache.ignite.ci.tcbot.TcBotGeneralService;
 import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
@@ -63,23 +65,32 @@
 
     @GET
     @Path("getIds")
-    public List<String> getIds() {
-        return CtxListener.getInjector(ctx).getInstance(ITcBotConfig.class).getTrackedBranchesIds();
+    public List<String> getIdsIfAccessible() {
+        ICredentialsProv prov = ICredentialsProv.get(req);
+        Injector injector = CtxListener.getInjector(ctx);
+        ITcBotConfig cfg = injector.getInstance(ITcBotConfig.class);
+        ITeamcityIgnitedProvider tcProv = injector.getInstance(ITeamcityIgnitedProvider.class);
+
+        return cfg.getTrackedBranches().getBranches()
+                .stream()
+                .filter(bt ->
+                        bt.getChains().stream().anyMatch(chain-> tcProv.hasAccess(chain.serverId, prov)))
+                .map(BranchTracked::getId)
+                .collect(Collectors.toList());
     }
 
     /**
      * Return all suites involved into tracked branches.
      *
-     * @param srvId Optional service ID to additiona filtering of chains.
+     * @param srvId Optional service ID to additional filtering of chains.
      */
     @GET
     @Path("suites")
     public Set<ChainAtServer> getSuites(@Nullable @QueryParam("server") String srvId) {
-        final ICredentialsProv prov = ICredentialsProv.get(req);
-
+        ICredentialsProv prov = ICredentialsProv.get(req);
         Injector injector = CtxListener.getInjector(ctx);
         ITcBotConfig cfg = injector.getInstance(ITcBotConfig.class);
-        ITeamcityIgnitedProvider tcIgnProv = injector.getInstance(ITeamcityIgnitedProvider.class);
+        ITeamcityIgnitedProvider tcProv = injector.getInstance(ITeamcityIgnitedProvider.class);
 
         return cfg.getTrackedBranches()
             .getSuitesUnique()
@@ -87,7 +98,7 @@
             .filter(chainAtSrv ->
                 Strings.isNullOrEmpty(srvId)
                     || srvId.equals(chainAtSrv.serverId))
-            .filter(chainAtServer -> tcIgnProv.hasAccess(chainAtServer.serverId, prov))
+            .filter(chainAtServer -> tcProv.hasAccess(chainAtServer.serverId, prov))
             .collect(Collectors.toSet());
     }
 
@@ -97,19 +108,14 @@
     @GET
     @Path("getServerIds")
     public Set<String> getServerIds() {
-        final ICredentialsProv prov = ICredentialsProv.get(req);
-
+        ICredentialsProv prov = ICredentialsProv.get(req);
         Injector injector = CtxListener.getInjector(ctx);
         ITcBotConfig cfg = injector.getInstance(ITcBotConfig.class);
-
         ITeamcityIgnitedProvider tcProv = injector.getInstance(ITeamcityIgnitedProvider.class);
+
         return cfg.getServerIds()
             .stream()
-            .filter(srvId ->
-            {
-                return tcProv.hasAccess(srvId, prov);
-
-            })
+            .filter(srvId -> tcProv.hasAccess(srvId, prov))
             .collect(Collectors.toSet());
     }