From 226322d05e25d81d284f6ed36f42709b738ceb23 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 3 Jul 2019 12:41:46 +0200 Subject: [PATCH] Use dao to prevent authentication issues --- ...epositoryLegacyProtocolRedirectFilter.java | 13 ++++++----- ...itoryLegacyProtocolRedirectFilterTest.java | 22 +++++++++---------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilter.java b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilter.java index b95d374245..6319af04f6 100644 --- a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilter.java +++ b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilter.java @@ -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()); diff --git a/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilterTest.java b/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilterTest.java index c54193f455..bd70cb9dfc 100644 --- a/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilterTest.java +++ b/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilterTest.java @@ -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);