mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-01 02:55:56 +01:00
Inject uri info for http protocol url computation
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<? extends HttpServlet> delegateProvider;
|
||||
private final Provider<UriInfoStore> uriInfoStore;
|
||||
|
||||
private volatile boolean isInitialized = false;
|
||||
|
||||
|
||||
protected InitializingHttpScmProtocolWrapper(Provider<? extends HttpServlet> delegateProvider) {
|
||||
protected InitializingHttpScmProtocolWrapper(Provider<? extends HttpServlet> delegateProvider, Provider<UriInfoStore> 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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<ScmGitServlet> servletProvider) {
|
||||
super(servletProvider);
|
||||
public GitScmProtocolProviderWrapper(Provider<ScmGitServlet> servletProvider, Provider<UriInfoStore> uriInfoStore) {
|
||||
super(servletProvider, uriInfoStore);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<HgCGIServlet> servletProvider) {
|
||||
super(servletProvider);
|
||||
public HgScmProtocolProviderWrapper(Provider<HgCGIServlet> servletProvider, Provider<UriInfoStore> uriInfoStore) {
|
||||
super(servletProvider, uriInfoStore);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<SvnDAVServlet> servletProvider) {
|
||||
super(servletProvider);
|
||||
public SvnScmProtocolProviderWrapper(Provider<SvnDAVServlet> servletProvider, Provider<UriInfoStore> uriInfoStore) {
|
||||
super(servletProvider, uriInfoStore);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -67,6 +67,6 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Reposit
|
||||
}
|
||||
|
||||
private Link createProtocolLink(ScmProtocol protocol, Repository repository) {
|
||||
return Link.linkBuilder("protocol", protocol.getUrl(uriInfoStore.get().getBaseUri().resolve("../.."))).withName(protocol.getType()).build();
|
||||
return Link.linkBuilder("protocol", protocol.getUrl()).withName(protocol.getType()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@ package sonia.scm.api.v2.resources;
|
||||
|
||||
import sonia.scm.repository.api.ScmProtocol;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
class MockScmProtocol implements ScmProtocol {
|
||||
private final String type;
|
||||
private final String protocol;
|
||||
@@ -19,7 +17,7 @@ class MockScmProtocol implements ScmProtocol {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(URI baseUri) {
|
||||
public String getUrl() {
|
||||
return protocol;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user