Use dao to prevent authentication issues

This commit is contained in:
Rene Pfeuffer
2019-07-03 12:41:46 +02:00
parent 3e653713c1
commit 226322d05e
2 changed files with 19 additions and 16 deletions

View File

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

View File

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