/*
|
* 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;
|
}
|
}
|