James Moger
2012-11-27 73f1adb2e84b8b9cd4045bcdd7d9afa72d3875b5
src/com/gitblit/wicket/pages/RootSubPage.java
@@ -19,11 +19,14 @@
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.Session;
import org.apache.wicket.markup.html.basic.Label;
import com.gitblit.GitBlit;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Constants.AuthorizationControl;
import com.gitblit.GitBlit;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.StringUtils;
/**
@@ -36,10 +39,27 @@
   public RootSubPage() {
      super();
      createPageMapIfNeeded();
   }
   public RootSubPage(PageParameters params) {
      super(params);
      createPageMapIfNeeded();
   }
   protected boolean requiresPageMap() {
      return false;
   }
   protected void createPageMapIfNeeded() {
      if (requiresPageMap()) {
         // because Gitblit strives for page-statelessness
         // Wicket seems to get confused as to when it really should
         // generate a page map for complex pages.  Conditionally ensure we
         // have a page map for complex AJAX pages like the EditNNN pages.
         Session.get().pageMapForName(null, true);
         setVersioned(true);
      }
   }
   @Override
@@ -52,7 +72,7 @@
      super.setupPage("", pageName);
   }
   
   protected List<String> getAccessRestrictedRepositoryList(boolean includeWildcards) {
   protected List<String> getAccessRestrictedRepositoryList(boolean includeWildcards, UserModel user) {
      // build list of access-restricted projects
      String lastProject = null;
      List<String> repos = new ArrayList<String>();
@@ -62,19 +82,26 @@
         // all repositories excluding personal repositories
         repos.add("[^~].*");
      }
      for (String repo : GitBlit.self().getRepositoryList()) {
         RepositoryModel repositoryModel = GitBlit.self().getRepositoryModel(repo);
         if (repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE)) {
         if (repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE)
               && repositoryModel.authorizationControl.equals(AuthorizationControl.NAMED)) {
            if (user != null &&
                  (repositoryModel.isOwner(user.username) || repositoryModel.isUsersPersonalRepository(user.username))) {
               // exclude Owner or personal repositories
               continue;
            }
            if (includeWildcards) {
               if (lastProject == null || !lastProject.equalsIgnoreCase(repositoryModel.projectPath)) {
                  lastProject = repositoryModel.projectPath;
                  lastProject = repositoryModel.projectPath.toLowerCase();
                  if (!StringUtils.isEmpty(repositoryModel.projectPath)) {
                     // regex for all repositories within a project
                     repos.add(repositoryModel.projectPath + "/.*");
                  }
               }
            }
            repos.add(repo);
            repos.add(repo.toLowerCase());
         }
      }
      return repos;