diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java b/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java index ad0e7cb513..b06420d9c0 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java @@ -28,7 +28,8 @@ public abstract class InitializingHttpScmProtocolWrapper implements HttpScmProto if (!isInitialized) { synchronized (this) { if (!isInitialized) { - delegateProvider.get().init(config); + HttpServlet httpServlet = delegateProvider.get(); + httpServlet.init(config); isInitialized = true; } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java index 882c5a1c6b..b0499fac9f 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java @@ -42,7 +42,6 @@ import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; import sonia.scm.repository.api.Command; import sonia.scm.repository.api.ScmProtocol; -import sonia.scm.web.HgCGIServlet; import java.io.File; import java.io.IOException; @@ -87,16 +86,17 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider * * * - * + * @param handler * @param hookManager - * @param handler * @param repository + * @param httpScmProtocol */ HgRepositoryServiceProvider(HgRepositoryHandler handler, - HgHookManager hookManager, Repository repository) + HgHookManager hookManager, Repository repository, HttpScmProtocol httpScmProtocol) { this.repository = repository; this.handler = handler; + this.httpScmProtocol = httpScmProtocol; this.repositoryDirectory = handler.getDirectory(repository); this.context = new HgCommandContext(hookManager, handler, repository, repositoryDirectory); @@ -276,7 +276,7 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider @Override public Set getSupportedProtocols() { - return Collections.singleton(new HgCGIServlet(null, null, null, null, null, null)); + return Collections.singleton(httpScmProtocol); } //~--- fields --------------------------------------------------------------- @@ -292,4 +292,6 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider /** Field description */ private File repositoryDirectory; + + private final HttpScmProtocol httpScmProtocol; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java index d322cb8e9f..d32d2f862f 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java @@ -36,11 +36,11 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; - import sonia.scm.plugin.Extension; import sonia.scm.repository.HgHookManager; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; +import sonia.scm.web.HgScmProtocolProviderWrapper; /** * @@ -65,10 +65,11 @@ public class HgRepositoryServiceResolver implements RepositoryServiceResolver */ @Inject public HgRepositoryServiceResolver(HgRepositoryHandler handler, - HgHookManager hookManager) + HgHookManager hookManager, HgScmProtocolProviderWrapper httpScmProtocol) { this.handler = handler; this.hookManager = hookManager; + this.httpScmProtocol = httpScmProtocol; } //~--- methods -------------------------------------------------------------- @@ -89,7 +90,7 @@ public class HgRepositoryServiceResolver implements RepositoryServiceResolver if (TYPE.equalsIgnoreCase(repository.getType())) { provider = new HgRepositoryServiceProvider(handler, hookManager, - repository); + repository, httpScmProtocol); } return provider; @@ -102,4 +103,6 @@ public class HgRepositoryServiceResolver implements RepositoryServiceResolver /** Field description */ private HgHookManager hookManager; + + private final HttpScmProtocol httpScmProtocol; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java index ae0f259f97..3ceb129f3f 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java @@ -135,19 +135,6 @@ public class HgCGIServlet extends HttpServlet implements HttpScmProtocol //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @throws ServletException - */ - @Override - public void init() throws ServletException - { - - super.init(); - } - /** * Method description * diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilter.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilter.java index de2835dd8f..c05f03dc4e 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilter.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilter.java @@ -37,27 +37,22 @@ package sonia.scm.web; import com.google.common.collect.ImmutableSet; import com.google.inject.Inject; - -import sonia.scm.Priority; import sonia.scm.config.ScmConfiguration; -import sonia.scm.filter.Filters; -import sonia.scm.filter.WebElement; import sonia.scm.repository.RepositoryProvider; import sonia.scm.web.filter.ProviderPermissionFilter; -//~--- JDK imports ------------------------------------------------------------ - +import javax.servlet.http.HttpServletRequest; import java.util.Set; -import javax.servlet.http.HttpServletRequest; +//~--- JDK imports ------------------------------------------------------------ /** * Permission filter for mercurial repositories. * * @author Sebastian Sdorra */ -@Priority(Filters.PRIORITY_AUTHORIZATION) -@WebElement(value = HgServletModule.MAPPING_HG) +//@Priority(Filters.PRIORITY_AUTHORIZATION) +//@WebElement(value = HgServletModule.MAPPING_HG) public class HgPermissionFilter extends ProviderPermissionFilter { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.java new file mode 100644 index 0000000000..c67c68024e --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.java @@ -0,0 +1,15 @@ +package sonia.scm.web; + +import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper; + +import javax.inject.Inject; +import javax.inject.Provider; +import javax.inject.Singleton; + +@Singleton +public class HgScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper { + @Inject + public HgScmProtocolProviderWrapper(Provider servletProvider) { + super(servletProvider); + } +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java index 357995483d..ba9ae3a0b9 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java @@ -81,8 +81,5 @@ public class HgServletModule extends ServletModule // bind servlets serve(MAPPING_HOOK).with(HgHookCallbackServlet.class); - - // register hg cgi servlet - serve(MAPPING_HG).with(HgCGIServlet.class); } } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceProvider.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceProvider.java index cbd303a9c6..21d1659bec 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceProvider.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceProvider.java @@ -41,7 +41,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.SvnRepositoryHandler; import sonia.scm.repository.api.Command; import sonia.scm.repository.api.ScmProtocol; -import sonia.scm.web.SvnDAVServlet; import java.io.IOException; import java.util.Collections; @@ -69,14 +68,15 @@ public class SvnRepositoryServiceProvider extends RepositoryServiceProvider /** * Constructs ... * - * - * @param handler + * @param handler * @param repository + * @param httpScmProtocol */ SvnRepositoryServiceProvider(SvnRepositoryHandler handler, - Repository repository) + Repository repository, HttpScmProtocol httpScmProtocol) { this.repository = repository; + this.httpScmProtocol = httpScmProtocol; this.context = new SvnContext(handler.getDirectory(repository)); } @@ -194,7 +194,7 @@ public class SvnRepositoryServiceProvider extends RepositoryServiceProvider @Override public Set getSupportedProtocols() { - return Collections.singleton(new SvnDAVServlet(null, null, null, null)); + return Collections.singleton(httpScmProtocol); } //~--- fields --------------------------------------------------------------- @@ -204,4 +204,6 @@ public class SvnRepositoryServiceProvider extends RepositoryServiceProvider /** Field description */ private final Repository repository; + + private final HttpScmProtocol httpScmProtocol; } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceResolver.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceResolver.java index d56398083e..48233156c6 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceResolver.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceResolver.java @@ -35,10 +35,10 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; - import sonia.scm.plugin.Extension; import sonia.scm.repository.Repository; import sonia.scm.repository.SvnRepositoryHandler; +import sonia.scm.web.SvnScmProtocolProviderWrapper; /** * @@ -58,11 +58,13 @@ public class SvnRepositoryServiceResolver implements RepositoryServiceResolver * * * @param handler + * @param httpScmProtocol */ @Inject - public SvnRepositoryServiceResolver(SvnRepositoryHandler handler) + public SvnRepositoryServiceResolver(SvnRepositoryHandler handler, SvnScmProtocolProviderWrapper httpScmProtocol) { this.handler = handler; + this.httpScmProtocol = httpScmProtocol; } //~--- methods -------------------------------------------------------------- @@ -82,7 +84,7 @@ public class SvnRepositoryServiceResolver implements RepositoryServiceResolver if (TYPE.equalsIgnoreCase(repository.getType())) { - provider = new SvnRepositoryServiceProvider(handler, repository); + provider = new SvnRepositoryServiceProvider(handler, repository, httpScmProtocol); } return provider; @@ -92,4 +94,6 @@ public class SvnRepositoryServiceResolver implements RepositoryServiceResolver /** Field description */ private SvnRepositoryHandler handler; + + private final HttpScmProtocol httpScmProtocol; } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnBasicAuthenticationFilter.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnBasicAuthenticationFilter.java index 1d9581f7c1..b5db32a449 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnBasicAuthenticationFilter.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnBasicAuthenticationFilter.java @@ -34,30 +34,24 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; - -import sonia.scm.Priority; import sonia.scm.config.ScmConfiguration; -import sonia.scm.filter.Filters; -import sonia.scm.filter.WebElement; import sonia.scm.repository.SvnUtil; import sonia.scm.util.HttpUtil; import sonia.scm.web.filter.AuthenticationFilter; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; - -import java.util.Set; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Set; + +//~--- JDK imports ------------------------------------------------------------ /** * * @author Sebastian Sdorra */ -@Priority(Filters.PRIORITY_AUTHENTICATION) -@WebElement(value = SvnServletModule.PATTERN_SVN) +//@Priority(Filters.PRIORITY_AUTHENTICATION) +//@WebElement(value = SvnServletModule.PATTERN_SVN) public class SvnBasicAuthenticationFilter extends AuthenticationFilter { diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilter.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilter.java index 30ef3e94c0..857e3d6d71 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilter.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilter.java @@ -37,32 +37,26 @@ package sonia.scm.web; import com.google.common.collect.ImmutableSet; import com.google.inject.Inject; - import sonia.scm.ClientMessages; -import sonia.scm.Priority; import sonia.scm.config.ScmConfiguration; -import sonia.scm.filter.Filters; -import sonia.scm.filter.WebElement; import sonia.scm.repository.RepositoryProvider; import sonia.scm.repository.ScmSvnErrorCode; import sonia.scm.repository.SvnUtil; import sonia.scm.web.filter.ProviderPermissionFilter; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; - -import java.util.Set; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Set; + +//~--- JDK imports ------------------------------------------------------------ /** * * @author Sebastian Sdorra */ -@Priority(Filters.PRIORITY_AUTHORIZATION) -@WebElement(value = SvnServletModule.PATTERN_SVN) +//@Priority(Filters.PRIORITY_AUTHORIZATION) +//@WebElement(value = SvnServletModule.PATTERN_SVN) public class SvnPermissionFilter extends ProviderPermissionFilter { diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java new file mode 100644 index 0000000000..2f54f57bc8 --- /dev/null +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java @@ -0,0 +1,15 @@ +package sonia.scm.web; + +import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper; + +import javax.inject.Inject; +import javax.inject.Provider; +import javax.inject.Singleton; + +@Singleton +public class SvnScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper { + @Inject + public SvnScmProtocolProviderWrapper(Provider servletProvider) { + super(servletProvider); + } +} diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java index 9b5c8ae556..4dab556c8f 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java @@ -70,8 +70,8 @@ public class SvnServletModule extends ServletModule protected void configureServlets() { filter(PATTERN_SVN).through(SvnGZipFilter.class); - filter(PATTERN_SVN).through(SvnBasicAuthenticationFilter.class); - filter(PATTERN_SVN).through(SvnPermissionFilter.class); +// filter(PATTERN_SVN).through(SvnBasicAuthenticationFilter.class); +// filter(PATTERN_SVN).through(SvnPermissionFilter.class); bind(SvnConfigDtoToSvnConfigMapper.class).to(Mappers.getMapper(SvnConfigDtoToSvnConfigMapper.class).getClass()); bind(SvnConfigToSvnConfigDtoMapper.class).to(Mappers.getMapper(SvnConfigToSvnConfigDtoMapper.class).getClass()); @@ -80,6 +80,5 @@ public class SvnServletModule extends ServletModule parameters.put(PARAMETER_SVN_PARENTPATH, System.getProperty("java.io.tmpdir")); - serve(PATTERN_SVN).with(SvnDAVServlet.class, parameters); } } diff --git a/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java b/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java index 15536db19a..dc25875d5b 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java @@ -25,6 +25,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import static java.lang.Math.max; + @Singleton @WebElement(value = HttpProtocolServlet.PATTERN) @Slf4j @@ -79,7 +81,8 @@ public class HttpProtocolServlet extends HttpServlet { } String namespace = uri.substring(0, uri.indexOf(HttpUtil.SEPARATOR_PATH)); - String name = uri.substring(uri.indexOf(HttpUtil.SEPARATOR_PATH) + 1, uri.indexOf(HttpUtil.SEPARATOR_PATH, uri.indexOf(HttpUtil.SEPARATOR_PATH) + 1)); + int endIndex = uri.indexOf(HttpUtil.SEPARATOR_PATH, uri.indexOf(HttpUtil.SEPARATOR_PATH) + 1); + String name = uri.substring(uri.indexOf(HttpUtil.SEPARATOR_PATH) + 1, max(endIndex, uri.length())); return new NamespaceAndName(namespace, name); }