mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 00:15:44 +01:00
Compute base url in webapp
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user