From 7a712f8d9e7a43cc9ff3d3ab91032457ec77eb57 Mon Sep 17 00:00:00 2001 From: Konstantin Schaper Date: Fri, 30 Oct 2020 10:58:36 +0100 Subject: [PATCH] add flag for anonymous mode availability to scm protocols and filter supported protocols accordingly --- .../java/sonia/scm/repository/api/RepositoryService.java | 4 +++- .../main/java/sonia/scm/repository/api/ScmProtocol.java | 7 +++++++ .../api/v2/resources/RepositoryToRepositoryDtoMapper.java | 6 +----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java b/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java index aa2a41782d..a6b4265239 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java @@ -34,6 +34,7 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryPermissions; import sonia.scm.repository.spi.RepositoryServiceProvider; import sonia.scm.repository.work.WorkdirProvider; +import sonia.scm.security.Authentications; import sonia.scm.user.EMail; import javax.annotation.Nullable; @@ -453,7 +454,8 @@ public final class RepositoryService implements Closeable { public Stream getSupportedProtocols() { return protocolProviders.stream() .filter(protocolProvider -> protocolProvider.getType().equals(getRepository().getType())) - .map(this::createProviderInstanceForRepository); + .map(this::createProviderInstanceForRepository) + .filter(protocol -> !Authentications.isAuthenticatedSubjectAnonymous() || protocol.isAnonymousEnabled()); } @SuppressWarnings({"rawtypes", "java:S3740"}) diff --git a/scm-core/src/main/java/sonia/scm/repository/api/ScmProtocol.java b/scm-core/src/main/java/sonia/scm/repository/api/ScmProtocol.java index 135191d5eb..ffdab2fc11 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/ScmProtocol.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/ScmProtocol.java @@ -40,4 +40,11 @@ public interface ScmProtocol { * The URL to access the repository providing this protocol. */ String getUrl(); + + /** + * Whether the protocol can be used as an anonymous user. + */ + default boolean isAnonymousEnabled() { + return true; + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java index 9147c65d1c..f5930da3c9 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java @@ -93,11 +93,7 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper supportedProtocols = repositoryService.getSupportedProtocols(); - if (Authentications.isAuthenticatedSubjectAnonymous()) { - supportedProtocols = supportedProtocols.filter(p -> !p.getType().equals("ssh")); - } - List protocolLinks = supportedProtocols + List protocolLinks = repositoryService.getSupportedProtocols() .map(this::createProtocolLink) .collect(toList()); linksBuilder.array(protocolLinks);