diff --git a/scm-core/src/main/java/sonia/scm/repository/api/ScmProtocol.java b/scm-core/src/main/java/sonia/scm/repository/api/ScmProtocol.java index b865d6e55b..c987510491 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/ScmProtocol.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/ScmProtocol.java @@ -1,7 +1,5 @@ package sonia.scm.repository.api; -import java.net.URI; - /** * An ScmProtocol represents a concrete protocol provided by the SCM-Manager instance * to interact with a repository depending on its type. There may be multiple protocols @@ -17,5 +15,5 @@ public interface ScmProtocol { /** * The URL to access the repository providing this protocol. */ - String getUrl(URI baseUri); + String getUrl(); } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/HttpScmProtocol.java b/scm-core/src/main/java/sonia/scm/repository/spi/HttpScmProtocol.java index 310b663d5d..f2d49b8570 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/HttpScmProtocol.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/HttpScmProtocol.java @@ -7,15 +7,18 @@ import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.core.UriInfo; import java.io.IOException; import java.net.URI; public abstract class HttpScmProtocol implements ScmProtocol { private final Repository repository; + private final UriInfo uriInfo; - public HttpScmProtocol(Repository repository) { + public HttpScmProtocol(Repository repository, UriInfo uriInfo) { this.repository = repository; + this.uriInfo = uriInfo; } @Override @@ -24,8 +27,8 @@ public abstract class HttpScmProtocol implements ScmProtocol { } @Override - public String getUrl(URI baseUri) { - return baseUri.resolve(URI.create("repo" + "/" + repository.getNamespace() + "/" + repository.getName())).toASCIIString(); + public String getUrl() { + return uriInfo.getBaseUri().resolve(URI.create("../../repo/" + repository.getNamespace() + "/" + repository.getName())).toASCIIString(); } public abstract void serve(HttpServletRequest request, HttpServletResponse response, ServletConfig config) throws ServletException, IOException; 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 b83386a380..e2634826b1 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 @@ -1,5 +1,6 @@ package sonia.scm.repository.spi; +import sonia.scm.api.v2.resources.UriInfoStore; import sonia.scm.repository.Repository; import javax.inject.Provider; @@ -13,12 +14,14 @@ import java.io.IOException; public abstract class InitializingHttpScmProtocolWrapper { private final Provider delegateProvider; + private final Provider uriInfoStore; private volatile boolean isInitialized = false; - protected InitializingHttpScmProtocolWrapper(Provider delegateProvider) { + protected InitializingHttpScmProtocolWrapper(Provider delegateProvider, Provider uriInfoStore) { this.delegateProvider = delegateProvider; + this.uriInfoStore = uriInfoStore; } protected void initializeServlet(ServletConfig config, HttpServlet httpServlet) throws ServletException { @@ -32,7 +35,7 @@ public abstract class InitializingHttpScmProtocolWrapper { private class ProtocolWrapper extends HttpScmProtocol { public ProtocolWrapper(Repository repository) { - super(repository); + super(repository, uriInfoStore.get().get()); } @Override diff --git a/scm-core/src/test/java/sonia/scm/repository/api/RepositoryServiceTest.java b/scm-core/src/test/java/sonia/scm/repository/api/RepositoryServiceTest.java index 0f7914b4b0..cc6d02e076 100644 --- a/scm-core/src/test/java/sonia/scm/repository/api/RepositoryServiceTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/api/RepositoryServiceTest.java @@ -8,6 +8,7 @@ import sonia.scm.repository.spi.RepositoryServiceProvider; import javax.servlet.ServletConfig; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.core.UriInfo; import java.util.Collection; import java.util.Collections; @@ -45,7 +46,7 @@ public class RepositoryServiceTest { private static class DummyHttpProtocol extends HttpScmProtocol { public DummyHttpProtocol(Repository repository) { - super(repository); + super(repository, mock(UriInfo.class)); } @Override diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java index 5cc7383500..f2210259c2 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java @@ -1,5 +1,6 @@ package sonia.scm.web; +import sonia.scm.api.v2.resources.UriInfoStore; import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper; import javax.inject.Inject; @@ -9,7 +10,7 @@ import javax.inject.Singleton; @Singleton public class GitScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper { @Inject - public GitScmProtocolProviderWrapper(Provider servletProvider) { - super(servletProvider); + public GitScmProtocolProviderWrapper(Provider servletProvider, Provider uriInfoStore) { + super(servletProvider, uriInfoStore); } } 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 index c67c68024e..a69ff10512 100644 --- 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 @@ -1,5 +1,6 @@ package sonia.scm.web; +import sonia.scm.api.v2.resources.UriInfoStore; import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper; import javax.inject.Inject; @@ -9,7 +10,7 @@ import javax.inject.Singleton; @Singleton public class HgScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper { @Inject - public HgScmProtocolProviderWrapper(Provider servletProvider) { - super(servletProvider); + public HgScmProtocolProviderWrapper(Provider servletProvider, Provider uriInfoStore) { + super(servletProvider, uriInfoStore); } } 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 index 5544bf796e..4e619e27f8 100644 --- 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 @@ -1,5 +1,6 @@ package sonia.scm.web; +import sonia.scm.api.v2.resources.UriInfoStore; import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper; import javax.inject.Inject; @@ -16,8 +17,8 @@ import static sonia.scm.web.SvnServletModule.PARAMETER_SVN_PARENTPATH; @Singleton public class SvnScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper { @Inject - public SvnScmProtocolProviderWrapper(Provider servletProvider) { - super(servletProvider); + public SvnScmProtocolProviderWrapper(Provider servletProvider, Provider uriInfoStore) { + super(servletProvider, uriInfoStore); } @Override diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java index 5ca5d13219..74ce1a65dd 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java @@ -67,6 +67,6 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper