doortts doortts 2017-02-21
security: Apply 'application.hide.project.listing' option to org
@a43bdbb5b5e26ac59c00f94b7d4de93861aba283
app/controllers/SearchApp.java
--- app/controllers/SearchApp.java
+++ app/controllers/SearchApp.java
@@ -123,6 +123,13 @@
 
         Organization organization = Organization.findByName(organizationName);
         User user = UserApp.currentUser();
+
+        if (Application.HIDE_PROJECT_LISTING) {
+            if (!user.isMemberOf(organization) || !user.isAdminOf(organization)) {
+                return badRequest();
+            }
+        }
+
         SearchType searchType = SearchType.getValue(searchTypeValue);
 
         if(searchType == SearchType.NA || organization == null) {
app/models/Organization.java
--- app/models/Organization.java
+++ app/models/Organization.java
@@ -20,6 +20,7 @@
  */
 package models;
 
+import controllers.Application;
 import models.enumeration.RequestState;
 import models.enumeration.ResourceType;
 import models.resource.GlobalResource;
@@ -112,9 +113,11 @@
                 }
             }
         } else {
-            for(Project project : this.projects) {
-                if(project.isPublic() || user.isMemberOf(project)) {
-                    result.add(project);
+            if(!Application.HIDE_PROJECT_LISTING){
+                for(Project project : this.projects) {
+                    if(project.isPublic() || user.isMemberOf(project)) {
+                        result.add(project);
+                    }
                 }
             }
         }
app/models/Search.java
--- app/models/Search.java
+++ app/models/Search.java
@@ -24,6 +24,7 @@
 import com.avaje.ebean.ExpressionList;
 import com.avaje.ebean.Junction;
 import com.avaje.ebean.Page;
+import controllers.Application;
 import models.enumeration.Operation;
 import models.enumeration.ProjectScope;
 import models.enumeration.UserState;
@@ -496,7 +497,7 @@
 
     private static ExpressionList<Project> projectsEL(String keyword, User user) {
         ExpressionList<Project> el = Project.find.where();
-        if(user.isAnonymous()) {
+        if(user.isAnonymous() && !Application.HIDE_PROJECT_LISTING) {
             el.eq("projectScope", ProjectScope.PUBLIC);
             el.disjunction()
                 .icontains("overview", keyword)
@@ -505,17 +506,19 @@
         } else {
             Junction<Project> junction = el.conjunction();
             Junction<Project> pj = junction.disjunction();
-            pj.add(Expr.eq("projectScope", ProjectScope.PUBLIC)); // public
+            if (!Application.HIDE_PROJECT_LISTING) {
+                pj.add(Expr.eq("projectScope", ProjectScope.PUBLIC)); // public
+            }
             List<Organization> orgs = Organization.findOrganizationsByUserLoginId(user.loginId); // protected
-            if(!orgs.isEmpty()) {
+            if (!orgs.isEmpty()) {
                 pj.and(Expr.in("organization", orgs), Expr.eq("projectScope", ProjectScope.PROTECTED));
             }
             pj.add(Expr.eq("projectUser.user.id", user.id)); // private
             pj.endJunction();
             junction.disjunction()
-                .icontains("overview", keyword)
-                .icontains("name", keyword)
-            .endJunction();
+                    .icontains("overview", keyword)
+                    .icontains("name", keyword)
+                    .endJunction();
             junction.endJunction();
         }
         el.orderBy().asc("name");
app/views/common/navbar.scala.html
--- app/views/common/navbar.scala.html
+++ app/views/common/navbar.scala.html
@@ -94,17 +94,24 @@
                             }
                             } 
                             @if(org != null) {
-                            <li>
-                                <a href="#" data-toggle="search-scope" data-action="@routes.SearchApp.searchInAGroup(org.name)">
-                                    @Messages("search.scope.group")
-                                </a>
-                            </li>
+                                @if(Application.HIDE_PROJECT_LISTING) {
+                                    @if(UserApp.currentUser().isMemberOf(org) || UserApp.currentUser().isAdminOf(org)){
+                                        <li>
+                                            <a href="#" data-toggle="search-scope" data-action="@routes.SearchApp.searchInAGroup(org.name)">
+                                            @Messages("search.scope.group")
+                                            </a>
+                                        </li>
+                                    }
+                                }
+
                             }
+                            @if(!Application.HIDE_PROJECT_LISTING || UserApp.currentUser().isSiteManager) {
                             <li>
                                 <a href="#" data-toggle="search-scope" data-action="@routes.SearchApp.searchInAll()">
                                     @Messages("search.scope.all")
                                 </a>
                             </li>
+                            }
                         </ul>
                     </div>
                     }
app/views/organization/view.scala.html
--- app/views/organization/view.scala.html
+++ app/views/organization/view.scala.html
@@ -137,6 +137,7 @@
                 </ul>
             </div>
             <div class="span3 span-hard-wrap">
+            @if(UserApp.currentUser().isMemberOf(org)) {
                 <div class="bubble-wrap gray project-home">
                     <div class="inner member-info">
                         <header>
@@ -168,6 +169,7 @@
                         </div>
                     </div>
                 </div>
+                }
             </div>
         </div>
     </div>
Add a comment
List