Inject uri info for http protocol url computation

This commit is contained in:
René Pfeuffer
2018-09-10 14:48:22 +02:00
parent ce518ad784
commit a490a20ac9
9 changed files with 25 additions and 19 deletions

View File

@@ -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();
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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