mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-07-08 13:52:25 +02:00
Use dao to prevent authentication issues
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package sonia.scm.legacy;
|
||||
|
||||
import sonia.scm.Priority;
|
||||
import sonia.scm.filter.Filters;
|
||||
import sonia.scm.migration.MigrationDAO;
|
||||
import sonia.scm.migration.MigrationInfo;
|
||||
import sonia.scm.repository.RepositoryManager;
|
||||
import sonia.scm.repository.RepositoryDAO;
|
||||
import sonia.scm.web.filter.HttpFilter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -23,16 +25,17 @@ import static java.util.Optional.empty;
|
||||
import static java.util.Optional.of;
|
||||
import static org.apache.commons.lang.StringUtils.isEmpty;
|
||||
|
||||
@Priority(Filters.PRIORITY_BASEURL)
|
||||
@Singleton
|
||||
public class RepositoryLegacyProtocolRedirectFilter extends HttpFilter {
|
||||
|
||||
private final ProtocolBasedLegacyRepositoryInfo info;
|
||||
private final RepositoryManager repositoryManager;
|
||||
private final RepositoryDAO repositoryDao;
|
||||
|
||||
@Inject
|
||||
public RepositoryLegacyProtocolRedirectFilter(MigrationDAO migrationDAO, RepositoryManager repositoryManager) {
|
||||
public RepositoryLegacyProtocolRedirectFilter(MigrationDAO migrationDAO, RepositoryDAO repositoryDao) {
|
||||
this.info = load(migrationDAO);
|
||||
this.repositoryManager = repositoryManager;
|
||||
this.repositoryDao = repositoryDao;
|
||||
}
|
||||
|
||||
private static ProtocolBasedLegacyRepositoryInfo load(MigrationDAO migrationDAO) {
|
||||
@@ -75,7 +78,7 @@ public class RepositoryLegacyProtocolRedirectFilter extends HttpFilter {
|
||||
}
|
||||
|
||||
private void doRedirect(String servletPath, MigrationInfo migrationInfo) throws IOException, ServletException {
|
||||
if (repositoryManager.get(migrationInfo.getId()) == null) {
|
||||
if (repositoryDao.get(migrationInfo.getId()) == null) {
|
||||
noRedirect();
|
||||
} else {
|
||||
String furtherPath = servletPath.substring(migrationInfo.getProtocol().length() + 1 + migrationInfo.getOriginalRepositoryName().length());
|
||||
|
||||
@@ -8,7 +8,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import sonia.scm.migration.MigrationDAO;
|
||||
import sonia.scm.migration.MigrationInfo;
|
||||
import sonia.scm.repository.Repository;
|
||||
import sonia.scm.repository.RepositoryManager;
|
||||
import sonia.scm.repository.RepositoryDAO;
|
||||
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
@@ -29,7 +29,7 @@ class RepositoryLegacyProtocolRedirectFilterTest {
|
||||
@Mock
|
||||
MigrationDAO migrationDAO;
|
||||
@Mock
|
||||
RepositoryManager repositoryManager;
|
||||
RepositoryDAO repositoryDao;
|
||||
@Mock
|
||||
HttpServletRequest request;
|
||||
@Mock
|
||||
@@ -47,7 +47,7 @@ class RepositoryLegacyProtocolRedirectFilterTest {
|
||||
void shouldNotRedirectForEmptyMigrationList() throws IOException, ServletException {
|
||||
when(request.getServletPath()).thenReturn("/git/old/name");
|
||||
|
||||
new RepositoryLegacyProtocolRedirectFilter(migrationDAO, repositoryManager).doFilter(request, response, filterChain);
|
||||
new RepositoryLegacyProtocolRedirectFilter(migrationDAO, repositoryDao).doFilter(request, response, filterChain);
|
||||
|
||||
verify(filterChain).doFilter(request, response);
|
||||
}
|
||||
@@ -55,10 +55,10 @@ class RepositoryLegacyProtocolRedirectFilterTest {
|
||||
@Test
|
||||
void shouldRedirectForExistingRepository() throws IOException, ServletException {
|
||||
when(migrationDAO.getAll()).thenReturn(singletonList(new MigrationInfo("id", "git", "old/name", "namespace", "name")));
|
||||
when(repositoryManager.get("id")).thenReturn(new Repository());
|
||||
when(repositoryDao.get("id")).thenReturn(new Repository());
|
||||
when(request.getServletPath()).thenReturn("/git/old/name");
|
||||
|
||||
new RepositoryLegacyProtocolRedirectFilter(migrationDAO, repositoryManager).doFilter(request, response, filterChain);
|
||||
new RepositoryLegacyProtocolRedirectFilter(migrationDAO, repositoryDao).doFilter(request, response, filterChain);
|
||||
|
||||
verify(response).sendRedirect("/scm/repo/namespace/name");
|
||||
verify(filterChain, never()).doFilter(request, response);
|
||||
@@ -67,10 +67,10 @@ class RepositoryLegacyProtocolRedirectFilterTest {
|
||||
@Test
|
||||
void shouldRedirectForExistingRepositoryWithFurtherPathElements() throws IOException, ServletException {
|
||||
when(migrationDAO.getAll()).thenReturn(singletonList(new MigrationInfo("id", "git", "old/name", "namespace", "name")));
|
||||
when(repositoryManager.get("id")).thenReturn(new Repository());
|
||||
when(repositoryDao.get("id")).thenReturn(new Repository());
|
||||
when(request.getServletPath()).thenReturn("/git/old/name/info/refs");
|
||||
|
||||
new RepositoryLegacyProtocolRedirectFilter(migrationDAO, repositoryManager).doFilter(request, response, filterChain);
|
||||
new RepositoryLegacyProtocolRedirectFilter(migrationDAO, repositoryDao).doFilter(request, response, filterChain);
|
||||
|
||||
verify(response).sendRedirect("/scm/repo/namespace/name/info/refs");
|
||||
verify(filterChain, never()).doFilter(request, response);
|
||||
@@ -79,11 +79,11 @@ class RepositoryLegacyProtocolRedirectFilterTest {
|
||||
@Test
|
||||
void shouldRedirectWithQueryParameters() throws IOException, ServletException {
|
||||
when(migrationDAO.getAll()).thenReturn(singletonList(new MigrationInfo("id", "git", "old/name", "namespace", "name")));
|
||||
when(repositoryManager.get("id")).thenReturn(new Repository());
|
||||
when(repositoryDao.get("id")).thenReturn(new Repository());
|
||||
when(request.getServletPath()).thenReturn("/git/old/name/info/refs");
|
||||
when(request.getQueryString()).thenReturn("parameter=value");
|
||||
|
||||
new RepositoryLegacyProtocolRedirectFilter(migrationDAO, repositoryManager).doFilter(request, response, filterChain);
|
||||
new RepositoryLegacyProtocolRedirectFilter(migrationDAO, repositoryDao).doFilter(request, response, filterChain);
|
||||
|
||||
verify(response).sendRedirect("/scm/repo/namespace/name/info/refs?parameter=value");
|
||||
verify(filterChain, never()).doFilter(request, response);
|
||||
@@ -92,10 +92,10 @@ class RepositoryLegacyProtocolRedirectFilterTest {
|
||||
@Test
|
||||
void shouldNotRedirectWhenRepositoryHasBeenDeleted() throws IOException, ServletException {
|
||||
when(migrationDAO.getAll()).thenReturn(singletonList(new MigrationInfo("id", "git", "old/name", "namespace", "name")));
|
||||
when(repositoryManager.get("id")).thenReturn(null);
|
||||
when(repositoryDao.get("id")).thenReturn(null);
|
||||
when(request.getServletPath()).thenReturn("/git/old/name");
|
||||
|
||||
new RepositoryLegacyProtocolRedirectFilter(migrationDAO, repositoryManager).doFilter(request, response, filterChain);
|
||||
new RepositoryLegacyProtocolRedirectFilter(migrationDAO, repositoryDao).doFilter(request, response, filterChain);
|
||||
|
||||
verify(response, never()).sendRedirect(any());
|
||||
verify(filterChain).doFilter(request, response);
|
||||
|
||||
Reference in New Issue
Block a user