Compute base url in webapp

This commit is contained in:
René Pfeuffer
2018-09-10 11:59:21 +02:00
parent 6bc41cee0a
commit 8c675f5dd8
8 changed files with 21 additions and 10 deletions

View File

@@ -2,7 +2,7 @@ package sonia.scm.repository.api;
import sonia.scm.repository.Repository;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
/**
* An ScmProtocol represents a concrete protocol provided by the SCM-Manager instance
@@ -19,5 +19,5 @@ public interface ScmProtocol {
/**
* The URL to access the repository providing this protocol.
*/
String getUrl(Repository repository, UriInfo uriInfo);
String getUrl(Repository repository, URI baseUri);
}

View File

@@ -7,7 +7,6 @@ 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;
@@ -18,8 +17,8 @@ public interface HttpScmProtocol extends ScmProtocol {
}
@Override
default String getUrl(Repository repository, UriInfo uriInfo) {
return uriInfo.getBaseUri().resolve(URI.create("../../repo/" + repository.getNamespace() + "/" + repository.getName())).toASCIIString();
default String getUrl(Repository repository, URI baseUri) {
return baseUri.resolve(URI.create("/repo" + "/" + repository.getNamespace() + "/" + repository.getName())).toASCIIString();
}
void serve(HttpServletRequest request, HttpServletResponse response, ServletConfig config) throws ServletException, IOException;

View File

@@ -114,6 +114,7 @@ import sonia.scm.web.cgi.CGIExecutorFactory;
import sonia.scm.web.cgi.DefaultCGIExecutorFactory;
import sonia.scm.web.filter.AuthenticationFilter;
import sonia.scm.web.filter.LoggingFilter;
import sonia.scm.web.protocol.HttpProtocolServlet;
import sonia.scm.web.security.AdministrationContext;
import sonia.scm.web.security.DefaultAdministrationContext;
@@ -322,7 +323,7 @@ public class ScmServletModule extends ServletModule
bind(TemplateEngineFactory.class);
bind(ObjectMapper.class).toProvider(ObjectMapperProvider.class);
filter("/repo/*").through(AuthenticationFilter.class);
filter(HttpProtocolServlet.PATTERN).through(AuthenticationFilter.class);
// bind events
// bind(LastModifiedUpdateListener.class);

View File

@@ -67,6 +67,6 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Reposit
}
private Link createProtocolLink(ScmProtocol protocol, Repository repository) {
return Link.linkBuilder("protocol", protocol.getUrl(repository, uriInfoStore.get())).withName(protocol.getType()).build();
return Link.linkBuilder("protocol", protocol.getUrl(repository, uriInfoStore.get().getBaseUri().resolve("../.."))).withName(protocol.getType()).build();
}
}

View File

@@ -28,7 +28,8 @@ import java.util.Optional;
@Slf4j
public class HttpProtocolServlet extends HttpServlet {
public static final String PATTERN = "/repo/*";
public static final String PATH = "/repo";
public static final String PATTERN = PATH + "/*";
private final RepositoryServiceFactory serviceFactory;

View File

@@ -3,7 +3,7 @@ package sonia.scm.api.v2.resources;
import sonia.scm.repository.Repository;
import sonia.scm.repository.api.ScmProtocol;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
class MockScmProtocol implements ScmProtocol {
private final String type;
@@ -20,7 +20,7 @@ class MockScmProtocol implements ScmProtocol {
}
@Override
public String getUrl(Repository repository, UriInfo uriInfo) {
public String getUrl(Repository repository, URI baseUri) {
return protocol;
}
}

View File

@@ -24,6 +24,7 @@ import sonia.scm.repository.api.RepositoryServiceFactory;
import sonia.scm.web.VndMediaType;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.UriInfo;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -71,6 +72,8 @@ public class RepositoryRootResourceTest {
private RepositoryService service;
@Mock
private UriInfoStore uriInfoStore;
@Mock
private UriInfo uriInfo;
private final URI baseUri = URI.create("/");
@@ -89,6 +92,8 @@ public class RepositoryRootResourceTest {
RepositoryCollectionResource repositoryCollectionResource = new RepositoryCollectionResource(repositoryManager, repositoryCollectionToDtoMapper, dtoToRepositoryMapper, resourceLinks);
RepositoryRootResource repositoryRootResource = new RepositoryRootResource(MockProvider.of(repositoryResource), MockProvider.of(repositoryCollectionResource));
when(serviceFactory.create(any(Repository.class))).thenReturn(service);
when(uriInfoStore.get()).thenReturn(uriInfo);
when(uriInfo.getBaseUri()).thenReturn(URI.create("/x/y"));
dispatcher = createDispatcher(repositoryRootResource);
}

View File

@@ -18,6 +18,7 @@ import sonia.scm.repository.api.RepositoryService;
import sonia.scm.repository.api.RepositoryServiceFactory;
import sonia.scm.repository.api.ScmProtocol;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import static java.util.Arrays.asList;
@@ -49,6 +50,8 @@ public class RepositoryToRepositoryDtoMapperTest {
private RepositoryService repositoryService;
@Mock
private UriInfoStore uriInfoStore;
@Mock
private UriInfo uriInfo;
@InjectMocks
private RepositoryToRepositoryDtoMapperImpl mapper;
@@ -59,6 +62,8 @@ public class RepositoryToRepositoryDtoMapperTest {
when(serviceFactory.create(any(Repository.class))).thenReturn(repositoryService);
when(repositoryService.isSupported(any(Command.class))).thenReturn(true);
when(repositoryService.getSupportedProtocols()).thenReturn(emptySet());
when(uriInfoStore.get()).thenReturn(uriInfo);
when(uriInfo.getBaseUri()).thenReturn(URI.create("/x/y"));
}
@After