From e0dc80dcd0d17262782bec349419713a82ebadc5 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 06 May 2013 23:25:10 -0400 Subject: [PATCH] Fixed regression with http socket connector --- src/main/java/com/gitblit/wicket/pages/BasePage.java | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 42 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/BasePage.java b/src/main/java/com/gitblit/wicket/pages/BasePage.java index bb7d8c9..19fa749 100644 --- a/src/main/java/com/gitblit/wicket/pages/BasePage.java +++ b/src/main/java/com/gitblit/wicket/pages/BasePage.java @@ -32,6 +32,7 @@ import javax.servlet.http.HttpServletRequest; import org.apache.wicket.Application; +import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.PageParameters; import org.apache.wicket.RedirectToUrlException; @@ -44,6 +45,7 @@ import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.protocol.http.RequestUtils; +import org.apache.wicket.protocol.http.WebRequest; import org.apache.wicket.protocol.http.servlet.ServletWebRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -63,6 +65,7 @@ import com.gitblit.utils.TimeUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.WicketUtils; +import com.gitblit.wicket.panels.DetailedRepositoryUrlPanel; import com.gitblit.wicket.panels.LinkPanel; public abstract class BasePage extends SessionPage { @@ -270,6 +273,45 @@ return sb.toString(); } + protected Component createGitDaemonUrlPanel(String wicketId, UserModel user, RepositoryModel repository) { + int gitDaemonPort = GitBlit.getInteger(Keys.git.daemonPort, 0); + if (gitDaemonPort > 0 && user.canClone(repository)) { + String servername = ((WebRequest) getRequest()).getHttpServletRequest().getServerName(); + String gitDaemonUrl; + if (gitDaemonPort == 9418) { + // standard port + gitDaemonUrl = MessageFormat.format("git://{0}/{1}", servername, repository.name); + } else { + // non-standard port + gitDaemonUrl = MessageFormat.format("git://{0}:{1,number,0}/{2}", servername, gitDaemonPort, repository.name); + } + + AccessPermission gitDaemonPermission = user.getRepositoryPermission(repository).permission;; + if (gitDaemonPermission.atLeast(AccessPermission.CLONE)) { + if (repository.accessRestriction.atLeast(AccessRestrictionType.CLONE)) { + // can not authenticate clone via anonymous git protocol + gitDaemonPermission = AccessPermission.NONE; + } else if (repository.accessRestriction.atLeast(AccessRestrictionType.PUSH)) { + // can not authenticate push via anonymous git protocol + gitDaemonPermission = AccessPermission.CLONE; + } else { + // normal user permission + } + } + + if (AccessPermission.NONE.equals(gitDaemonPermission)) { + // repository prohibits all anonymous access + return new Label(wicketId).setVisible(false); + } else { + // repository allows some form of anonymous access + return new DetailedRepositoryUrlPanel(wicketId, getLocalizer(), this, repository.name, gitDaemonUrl, gitDaemonPermission); + } + } else { + // git daemon is not running + return new Label(wicketId).setVisible(false); + } + } + protected List<ProjectModel> getProjectModels() { final UserModel user = GitBlitWebSession.get().getUser(); List<ProjectModel> projects = GitBlit.self().getProjectModels(user, true); -- Gitblit v1.9.1