| /* | |
| * 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<String> getAccessRestrictedRepositoryList(boolean includeWildcards, UserModel user) { | |
| // build list of access-restricted projects | |
| String lastProject = null; | |
| List<String> repos = new ArrayList<String>(); | |
| 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; | |
| } | |
| } |