From e9de3f7fd55dd4d4535cd7b2fc2bee8094152e39 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Sat, 17 Mar 2012 12:09:01 -0400
Subject: [PATCH] Implemented RPC administration of indexed branches
---
src/com/gitblit/wicket/GitBlitWebApp.java | 213 +++++++++++++++++++++++++++-------------------------
1 files changed, 111 insertions(+), 102 deletions(-)
diff --git a/src/com/gitblit/wicket/GitBlitWebApp.java b/src/com/gitblit/wicket/GitBlitWebApp.java
index b869a05..5054afa 100644
--- a/src/com/gitblit/wicket/GitBlitWebApp.java
+++ b/src/com/gitblit/wicket/GitBlitWebApp.java
@@ -1,96 +1,149 @@
+/*
+ * 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;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
import org.apache.wicket.Application;
import org.apache.wicket.Page;
import org.apache.wicket.Request;
import org.apache.wicket.Response;
import org.apache.wicket.Session;
+import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.protocol.http.WebApplication;
-import org.apache.wicket.protocol.http.request.urlcompressing.UrlCompressingWebRequestProcessor;
-import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
-import org.apache.wicket.request.IRequestCycleProcessor;
-import org.apache.wicket.request.target.coding.MixedParamUrlCodingStrategy;
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
-import org.eclipse.jgit.http.server.resolver.FileResolver;
-import org.eclipse.jgit.http.server.resolver.ServiceNotEnabledException;
-import org.eclipse.jgit.lib.Repository;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.gitblit.GitBlitServer;
-import com.gitblit.StoredSettings;
-import com.gitblit.utils.JGitUtils;
-import com.gitblit.wicket.models.RepositoryModel;
+import com.gitblit.GitBlit;
+import com.gitblit.Keys;
+import com.gitblit.wicket.pages.ActivityPage;
+import com.gitblit.wicket.pages.BasePage;
+import com.gitblit.wicket.pages.BlamePage;
import com.gitblit.wicket.pages.BlobDiffPage;
import com.gitblit.wicket.pages.BlobPage;
import com.gitblit.wicket.pages.BranchesPage;
-import com.gitblit.wicket.pages.CommitPage;
import com.gitblit.wicket.pages.CommitDiffPage;
+import com.gitblit.wicket.pages.CommitPage;
+import com.gitblit.wicket.pages.DocsPage;
+import com.gitblit.wicket.pages.FederationRegistrationPage;
+import com.gitblit.wicket.pages.GravatarProfilePage;
+import com.gitblit.wicket.pages.HistoryPage;
import com.gitblit.wicket.pages.LogPage;
+import com.gitblit.wicket.pages.MarkdownPage;
+import com.gitblit.wicket.pages.MetricsPage;
import com.gitblit.wicket.pages.PatchPage;
import com.gitblit.wicket.pages.RawPage;
import com.gitblit.wicket.pages.RepositoriesPage;
+import com.gitblit.wicket.pages.ReviewProposalPage;
+import com.gitblit.wicket.pages.SearchPage;
import com.gitblit.wicket.pages.SummaryPage;
import com.gitblit.wicket.pages.TagPage;
import com.gitblit.wicket.pages.TagsPage;
-import com.gitblit.wicket.pages.TicGitPage;
-import com.gitblit.wicket.pages.TicGitTicketPage;
+import com.gitblit.wicket.pages.TicketPage;
+import com.gitblit.wicket.pages.TicketsPage;
import com.gitblit.wicket.pages.TreePage;
-
public class GitBlitWebApp extends WebApplication {
-
- public static int PAGING_ITEM_COUNT = 50;
-
- Logger logger = LoggerFactory.getLogger(GitBlitWebApp.class);
-
- FileResolver repositoryResolver;
-
- private File repositories;
-
- private boolean exportAll;
@Override
public void init() {
super.init();
+ // Setup page authorization mechanism
+ boolean useAuthentication = GitBlit.getBoolean(Keys.web.authenticateViewPages, false)
+ || GitBlit.getBoolean(Keys.web.authenticateAdminPages, false);
+ if (useAuthentication) {
+ AuthorizationStrategy authStrategy = new AuthorizationStrategy();
+ getSecuritySettings().setAuthorizationStrategy(authStrategy);
+ getSecuritySettings().setUnauthorizedComponentInstantiationListener(authStrategy);
+ }
+
// Grab Browser info (like timezone, etc)
- getRequestCycleSettings().setGatherExtendedBrowserInfo(true);
+ if (GitBlit.getBoolean(Keys.web.useClientTimezone, false)) {
+ getRequestCycleSettings().setGatherExtendedBrowserInfo(true);
+ }
+
+ // configure the resource cache duration to 90 days for deployment
+ if (!GitBlit.isDebugMode()) {
+ getResourceSettings().setDefaultCacheDuration(90 * 86400);
+ }
// setup the standard gitweb-ish urls
- mount(new MixedParamUrlCodingStrategy("/summary", SummaryPage.class, new String[] { "r" }));
- mount(new MixedParamUrlCodingStrategy("/log", LogPage.class, new String[] { "r", "h" }));
- mount(new MixedParamUrlCodingStrategy("/tags", TagsPage.class, new String[] { "r" }));
- mount(new MixedParamUrlCodingStrategy("/branches", BranchesPage.class, new String[] { "r" }));
- mount(new MixedParamUrlCodingStrategy("/commit", CommitPage.class, new String[] { "r", "h" }));
- mount(new MixedParamUrlCodingStrategy("/tag", TagPage.class, new String[] { "r", "h" }));
- mount(new MixedParamUrlCodingStrategy("/tree", TreePage.class, new String[] { "r", "h", "f" }));
- mount(new MixedParamUrlCodingStrategy("/blob", BlobPage.class, new String[] { "r", "h", "f" }));
- mount(new MixedParamUrlCodingStrategy("/raw", RawPage.class, new String[] { "r", "h", "f" }));
- mount(new MixedParamUrlCodingStrategy("/blobdiff", BlobDiffPage.class, new String[] { "r", "h", "f" }));
- mount(new MixedParamUrlCodingStrategy("/commitdiff", CommitDiffPage.class, new String[] { "r", "h" }));
- mount(new MixedParamUrlCodingStrategy("/patch", PatchPage.class, new String[] { "r", "h", "f" }));
-
- // setup extended urls
- mount(new MixedParamUrlCodingStrategy("/ticgit", TicGitPage.class, new String[] { "p" }));
- mount(new MixedParamUrlCodingStrategy("/ticgittkt", TicGitTicketPage.class, new String[] { "p", "f" }));
-
- repositories = new File(StoredSettings.getString("repositoriesFolder", "repos"));
- exportAll = StoredSettings.getBoolean("exportAll", true);
- repositoryResolver = new FileResolver(repositories, exportAll);
+ mount("/summary", SummaryPage.class, "r");
+ mount("/log", LogPage.class, "r", "h");
+ mount("/tags", TagsPage.class, "r");
+ mount("/branches", BranchesPage.class, "r");
+ mount("/commit", CommitPage.class, "r", "h");
+ mount("/tag", TagPage.class, "r", "h");
+ mount("/tree", TreePage.class, "r", "h", "f");
+ mount("/blob", BlobPage.class, "r", "h", "f");
+ mount("/raw", RawPage.class, "r", "h", "f");
+ mount("/blobdiff", BlobDiffPage.class, "r", "h", "f");
+ mount("/commitdiff", CommitDiffPage.class, "r", "h");
+ mount("/patch", PatchPage.class, "r", "h", "f");
+ mount("/history", HistoryPage.class, "r", "h", "f");
+ if (GitBlit.getBoolean(Keys.lucene.enable, false)) {
+ // TODO switch this to LucenePage when it is ready
+ mount("/search", SearchPage.class);
+ } else {
+ mount("/search", SearchPage.class);
+ }
+ mount("/metrics", MetricsPage.class, "r");
+ mount("/blame", BlamePage.class, "r", "h", "f");
+
+ // setup ticket urls
+ mount("/tickets", TicketsPage.class, "r");
+ mount("/ticket", TicketPage.class, "r", "h", "f");
+
+ // setup the markdown urls
+ mount("/docs", DocsPage.class, "r");
+ mount("/markdown", MarkdownPage.class, "r", "h", "f");
+
+ // federation urls
+ mount("/proposal", ReviewProposalPage.class, "t");
+ mount("/registration", FederationRegistrationPage.class, "u", "n");
+
+ mount("/activity", ActivityPage.class, "r", "h");
+ mount("/gravatar", GravatarProfilePage.class, "h");
+ }
+
+ private void mount(String location, Class<? extends WebPage> clazz, String... parameters) {
+ if (parameters == null) {
+ parameters = new String[] {};
+ }
+ if (!GitBlit.getBoolean(Keys.web.mountParameters, true)) {
+ parameters = new String[] {};
+ }
+ mount(new GitblitParamUrlCodingStrategy(location, clazz, parameters));
}
@Override
public Class<? extends Page> getHomePage() {
return RepositoriesPage.class;
}
+
+ /**
+ * Returns the preferred search page class.
+ *
+ * @return a Wicket class representing a search page
+ */
+ public Class<? extends BasePage> getSearchPageClass() {
+ if (GitBlit.getBoolean(Keys.lucene.enable, false)) {
+ // TODO switch this to LucenePage when it is ready
+ return SearchPage.class;//LucenePage.class;
+ }
+ return SearchPage.class;
+ }
+
@Override
public final Session newSession(Request request, Response response) {
@@ -98,55 +151,11 @@
}
@Override
- protected final IRequestCycleProcessor newRequestCycleProcessor() {
- return new UrlCompressingWebRequestProcessor();
- }
-
- @Override
public final String getConfigurationType() {
- if (GitBlitServer.isDebugMode())
+ if (GitBlit.isDebugMode()) {
return Application.DEVELOPMENT;
+ }
return Application.DEPLOYMENT;
- }
-
- public List<String> getRepositoryList() {
- return JGitUtils.getRepositoryList(repositories, exportAll, StoredSettings.getBoolean("nestedRepositories", true));
- }
-
- public List<RepositoryModel> getRepositories(Request request) {
- List<String> list = getRepositoryList();
- ServletWebRequest servletWebRequest = (ServletWebRequest) request;
- HttpServletRequest req = servletWebRequest.getHttpServletRequest();
-
- List<RepositoryModel> repositories = new ArrayList<RepositoryModel>();
- for (String repo : list) {
- Repository r = getRepository(req, repo);
- String description = JGitUtils.getRepositoryDescription(r);
- String owner = JGitUtils.getRepositoryOwner(r);
- Date lastchange = JGitUtils.getLastChange(r);
- r.close();
- repositories.add(new RepositoryModel(repo, description, owner, lastchange));
- }
- return repositories;
- }
-
- public Repository getRepository(HttpServletRequest req, String repositoryName) {
- Repository r = null;
- try {
- r = repositoryResolver.open(req, repositoryName);
- } catch (RepositoryNotFoundException e) {
- r = null;
- logger.error("Failed to find repository " + repositoryName);
- e.printStackTrace();
- } catch (ServiceNotEnabledException e) {
- r = null;
- e.printStackTrace();
- }
- return r;
- }
-
- public String getCloneUrl(String repositoryName) {
- return StoredSettings.getString("cloneUrl", "https://localhost/git/") + repositoryName;
}
public static GitBlitWebApp get() {
--
Gitblit v1.9.1