From fb1086765282d44fd408859a93afacc0a52c2a9a Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 6 Feb 2011 16:22:54 +0100 Subject: [PATCH] use configured server port in cgis for mod_proxy --- .../java/sonia/scm/web/BzrCGIServlet.java | 7 +++- .../main/java/sonia/scm/web/HgCGIServlet.java | 7 +++- .../main/java/sonia/scm/util/HttpUtil.java | 35 +++++++++++++++++++ .../sonia/scm/web/cgi/AbstractCGIServlet.java | 23 +++++++++++- .../java/sonia/scm/web/cgi/CGIRunner.java | 8 ++--- .../rest/resources/RepositoryResource.java | 32 ++--------------- 6 files changed, 76 insertions(+), 36 deletions(-) diff --git a/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrCGIServlet.java b/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrCGIServlet.java index 1f5d7b7f8a..55a9a23e0b 100644 --- a/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrCGIServlet.java +++ b/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrCGIServlet.java @@ -39,6 +39,7 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; +import sonia.scm.config.ScmConfiguration; import sonia.scm.io.RegexResourceProcessor; import sonia.scm.io.ResourceProcessor; import sonia.scm.repository.BzrConfig; @@ -116,15 +117,19 @@ public class BzrCGIServlet extends AbstractCGIServlet * * * + * + * @param configuration * @param securityContextProvider * @param repositoryManager * @param handler */ @Inject - public BzrCGIServlet(Provider securityContextProvider, + public BzrCGIServlet(ScmConfiguration configuration, + Provider securityContextProvider, RepositoryManager repositoryManager, BzrRepositoryHandler handler) { + super(configuration); this.securityContextProvider = securityContextProvider; this.repositoryManager = repositoryManager; this.handler = handler; diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java index f10494d4f6..f66ee3245e 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java @@ -38,6 +38,7 @@ package sonia.scm.web; import com.google.inject.Inject; import com.google.inject.Singleton; +import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.HgConfig; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; @@ -88,13 +89,17 @@ public class HgCGIServlet extends AbstractCGIServlet * * * + * + * @param configuration * @param repositoryManager * @param handler */ @Inject - public HgCGIServlet(RepositoryManager repositoryManager, + public HgCGIServlet(ScmConfiguration configuration, + RepositoryManager repositoryManager, HgRepositoryHandler handler) { + super(configuration); this.repositoryManager = repositoryManager; this.handler = handler; } diff --git a/scm-core/src/main/java/sonia/scm/util/HttpUtil.java b/scm-core/src/main/java/sonia/scm/util/HttpUtil.java index 636e7f9d83..b8ad7d45fc 100644 --- a/scm-core/src/main/java/sonia/scm/util/HttpUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/HttpUtil.java @@ -33,6 +33,10 @@ package sonia.scm.util; +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.config.ScmConfiguration; + //~--- JDK imports ------------------------------------------------------------ import javax.servlet.http.HttpServletRequest; @@ -75,6 +79,37 @@ public class HttpUtil //~--- get methods ---------------------------------------------------------- + /** + * Method description + * + * + * @param configuration + * @param request + * + * @return + */ + public static int getServerPort(ScmConfiguration configuration, + HttpServletRequest request) + { + int port = 0; + + if (configuration.isEnableSSL()) + { + port = configuration.getSslPort(); + } + else + { + port = configuration.getPort(); + } + + if (port <= 0) + { + port = request.getLocalPort(); + } + + return port; + } + /** * Method description * diff --git a/scm-core/src/main/java/sonia/scm/web/cgi/AbstractCGIServlet.java b/scm-core/src/main/java/sonia/scm/web/cgi/AbstractCGIServlet.java index 684f2e5163..1693bde3eb 100644 --- a/scm-core/src/main/java/sonia/scm/web/cgi/AbstractCGIServlet.java +++ b/scm-core/src/main/java/sonia/scm/web/cgi/AbstractCGIServlet.java @@ -33,6 +33,11 @@ package sonia.scm.web.cgi; +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.config.ScmConfiguration; +import sonia.scm.util.HttpUtil; + //~--- JDK imports ------------------------------------------------------------ import java.io.File; @@ -55,6 +60,19 @@ public abstract class AbstractCGIServlet extends HttpServlet /** Field description */ private static final long serialVersionUID = -8638099037069714140L; + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + * + * @param configuration + */ + public AbstractCGIServlet(ScmConfiguration configuration) + { + this.configuration = configuration; + } + //~--- get methods ---------------------------------------------------------- /** @@ -157,7 +175,7 @@ public abstract class AbstractCGIServlet extends HttpServlet { cgiRunner.exec(createRequestEnvironment(req, baseEnvironment), getCmdPrefix(), getCommand(req), req.getPathInfo(), req, - resp); + resp, HttpUtil.getServerPort(configuration, req)); } //~--- get methods ---------------------------------------------------------- @@ -191,4 +209,7 @@ public abstract class AbstractCGIServlet extends HttpServlet /** Field description */ private CGIRunner cgiRunner; + + /** Field description */ + private ScmConfiguration configuration; } diff --git a/scm-core/src/main/java/sonia/scm/web/cgi/CGIRunner.java b/scm-core/src/main/java/sonia/scm/web/cgi/CGIRunner.java index 3a113fda7e..a48740e519 100644 --- a/scm-core/src/main/java/sonia/scm/web/cgi/CGIRunner.java +++ b/scm-core/src/main/java/sonia/scm/web/cgi/CGIRunner.java @@ -103,10 +103,10 @@ public class CGIRunner * @throws IOException */ public void exec(EnvList environment, File command, String pathInfo, - HttpServletRequest req, HttpServletResponse res) + HttpServletRequest req, HttpServletResponse res, int serverPort) throws IOException { - exec(environment, defaultCmdPrefix, command, pathInfo, req, res); + exec(environment, defaultCmdPrefix, command, pathInfo, req, res, serverPort); } /** @@ -125,7 +125,7 @@ public class CGIRunner */ public void exec(EnvList environment, String cmdPrefix, File command, String pathInfo, HttpServletRequest req, - HttpServletResponse res) + HttpServletResponse res, int serverPort) throws IOException { String path = command.getAbsolutePath(); @@ -169,7 +169,7 @@ public class CGIRunner environment.set("SCRIPT_NAME", scriptName); environment.set("SCRIPT_FILENAME", scriptPath); environment.set("SERVER_NAME", req.getServerName()); - environment.set("SERVER_PORT", Integer.toString(req.getServerPort())); + environment.set("SERVER_PORT", Integer.toString(serverPort)); environment.set("SERVER_PROTOCOL", req.getProtocol()); environment.set("SERVER_SOFTWARE", context.getServerInfo()); diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java index 1accc40c59..644c6d27c8 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java @@ -59,6 +59,7 @@ import java.util.Collection; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Path; +import sonia.scm.util.HttpUtil; /** * @@ -233,7 +234,7 @@ public class RepositoryResource extends AbstractResource StringBuilder url = new StringBuilder(request.getScheme()); url.append("://").append(configuration.getServername()); - url.append(":").append(getPort(request)); + url.append(":").append(HttpUtil.getServerPort(configuration, request)); String ctxPath = request.getContextPath(); @@ -271,34 +272,7 @@ public class RepositoryResource extends AbstractResource //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - */ - private int getPort(HttpServletRequest request) - { - int port = 0; - - if (configuration.isEnableSSL()) - { - port = configuration.getSslPort(); - } - else - { - port = configuration.getPort(); - } - - if (port <= 0) - { - port = request.getLocalPort(); - } - - return port; - } + /** * Method description