From 4707da2a69cfaf45ae8b0bf4426288375694912e Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 22 Jun 2012 15:16:36 +0200 Subject: [PATCH 1/3] write header before getOutputStream is called --- .../src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java index 031075f069..1d25a5bcce 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java +++ b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java @@ -397,8 +397,8 @@ public class DefaultCGIExecutor extends AbstractCGIExecutor processErrorStreamAsync(process); processServletInput(process); processIS = process.getInputStream(); - servletOS = response.getOutputStream(); parseHeaders(processIS); + servletOS = response.getOutputStream(); long content = ByteStreams.copy(processIS, servletOS); From 1f2faed4f697275c62ff3969bf2f368c1cc515fb Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 26 Jun 2012 15:26:56 +0200 Subject: [PATCH 2/3] send redirect for root repository urls only if the name of the repository is empty --- .../sonia/scm/ArgumentIsInvalidException.java | 84 +++++++++++++++++++ .../main/java/sonia/scm/util/AssertUtil.java | 1 + .../scm/web/filter/PermissionFilter.java | 12 ++- .../repository/DefaultRepositoryManager.java | 13 ++- 4 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/ArgumentIsInvalidException.java diff --git a/scm-core/src/main/java/sonia/scm/ArgumentIsInvalidException.java b/scm-core/src/main/java/sonia/scm/ArgumentIsInvalidException.java new file mode 100644 index 0000000000..38ec041c0e --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/ArgumentIsInvalidException.java @@ -0,0 +1,84 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm; + +/** + * + * @author Sebastian Sdorra + * @since 1.17 + */ +public class ArgumentIsInvalidException extends IllegalStateException +{ + + /** + * Constructs ... + * + */ + public ArgumentIsInvalidException() + { + super(); + } + + /** + * Constructs ... + * + * + * @param s + */ + public ArgumentIsInvalidException(String s) + { + super(s); + } + + /** + * Constructs ... + * + * + * @param cause + */ + public ArgumentIsInvalidException(Throwable cause) + { + super(cause); + } + + /** + * Constructs ... + * + * + * @param message + * @param cause + */ + public ArgumentIsInvalidException(String message, Throwable cause) + { + super(message, cause); + } +} diff --git a/scm-core/src/main/java/sonia/scm/util/AssertUtil.java b/scm-core/src/main/java/sonia/scm/util/AssertUtil.java index f3aa613065..b53037a023 100644 --- a/scm-core/src/main/java/sonia/scm/util/AssertUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/AssertUtil.java @@ -35,6 +35,7 @@ package sonia.scm.util; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.ArgumentIsInvalidException; import sonia.scm.Validateable; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java b/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java index a584c821e5..1e031cead4 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java @@ -41,6 +41,7 @@ import com.google.inject.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.ArgumentIsInvalidException; import sonia.scm.SCMContext; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.PermissionType; @@ -176,14 +177,19 @@ public abstract class PermissionFilter extends HttpFilter response.sendError(HttpServletResponse.SC_NOT_FOUND); } } - catch (IllegalStateException ex) + catch (ArgumentIsInvalidException ex) { - if (logger.isWarnEnabled()) + if (logger.isTraceEnabled()) { - logger.warn( + logger.trace( "wrong request at ".concat(request.getRequestURI()).concat( " send redirect"), ex); } + else if (logger.isWarnEnabled()) + { + logger.warn("wrong request at {} send redirect", + request.getRequestURI()); + } response.sendRedirect(getRepositoryRootHelpUrl(request)); } diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java index 1d1351d402..46701c3bbb 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java @@ -35,6 +35,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.Strings; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; @@ -42,6 +43,7 @@ import com.google.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.ArgumentIsInvalidException; import sonia.scm.ConfigurationException; import sonia.scm.HandlerEvent; import sonia.scm.SCMContextProvider; @@ -661,8 +663,15 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager @Override public Repository getFromTypeAndUri(String type, String uri) { - AssertUtil.assertIsNotEmpty(type); - AssertUtil.assertIsNotEmpty(uri); + if (Strings.isNullOrEmpty(type)) + { + throw new ArgumentIsInvalidException("argument type is required"); + } + + if (Strings.isNullOrEmpty(uri)) + { + throw new ArgumentIsInvalidException("argument uri is required"); + } // remove ;jsessionid, jetty bug? uri = HttpUtil.removeMatrixParameter(uri); From 8656e5ed3325ff9922b9d3a562d806def3866aa5 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 23 Jul 2012 09:18:59 +0200 Subject: [PATCH 3/3] close branch issue-192