/* * Copyright 2011 gitblit.com. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.gitblit.wicket.pages; import java.util.ArrayList; 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.Constants.AccessRestrictionType; import com.gitblit.Constants.AuthorizationControl; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.StringUtils; /** * RootSubPage is a non-topbar navigable RootPage. It also has a page header. * * @author James Moger * */ public abstract class RootSubPage extends RootPage { 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 protected void setupPage(String pageName, String subName) { add(new Label("pageName", pageName)); if (!StringUtils.isEmpty(subName)) { subName = "/ " + subName; } add(new Label("pageSubName", subName)); super.setupPage("", pageName); } protected List getAccessRestrictedRepositoryList(boolean includeWildcards, UserModel user) { // build list of access-restricted projects String lastProject = null; List repos = new ArrayList(); if (includeWildcards) { // all repositories repos.add(".*"); // all repositories excluding personal repositories if (ModelUtils.getUserRepoPrefix().length() == 1) { repos.add("[^" + ModelUtils.getUserRepoPrefix() + "].*"); } } for (String repo : app().repositories().getRepositoryList()) { RepositoryModel repositoryModel = app().repositories().getRepositoryModel(repo); 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.toLowerCase(); if (!StringUtils.isEmpty(repositoryModel.projectPath)) { // regex for all repositories within a project repos.add(repositoryModel.projectPath + "/.*"); } } } repos.add(repo.toLowerCase()); } } return repos; } }