Add "enable file search" flag on global config.

Make the repository file search deactivatable
via the global config. This feature could
overwhelm the server on repositories with
millions of file therefore it now can be turned off.

Committed-by: Rene Pfeuffer <rene.pfeuffer@cloudogu.com>
Co-authored-by: Konstantin Schaper <konstantin.schaper@cloudogu.com>
This commit is contained in:
Eduard Heimbuch
2023-07-06 08:47:51 +02:00
parent 84fbe7ea35
commit c1d7230fbd
25 changed files with 246 additions and 82 deletions

View File

@@ -59,6 +59,7 @@ public class ConfigDto extends HalRepresentation implements UpdateConfigDto {
private boolean enabledXsrfProtection;
private boolean enabledUserConverter;
private boolean enabledApiKeys;
private boolean enabledFileSearch;
private String namespaceStrategy;
private String loginInfoUrl;
private String alertsUrl;

View File

@@ -33,6 +33,7 @@ import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.ObjectFactory;
import sonia.scm.SCMContextProvider;
import sonia.scm.admin.ScmConfigurationStore;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.repository.DefaultRepositoryExportingCheck;
import sonia.scm.repository.Feature;
@@ -51,6 +52,7 @@ import sonia.scm.web.EdisonHalAppender;
import sonia.scm.web.api.RepositoryToHalMapper;
import javax.inject.Inject;
import javax.inject.Provider;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -69,7 +71,7 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Reposit
@Inject
private ResourceLinks resourceLinks;
@Inject
private ScmConfiguration scmConfiguration;
private ScmConfigurationStore scmConfigurationStore;
@Inject
private RepositoryServiceFactory serviceFactory;
@Inject
@@ -171,7 +173,9 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Reposit
linksBuilder.single(link("changesets", resourceLinks.changeset().all(repository.getNamespace(), repository.getName())));
linksBuilder.single(link("sources", resourceLinks.source().selfWithoutRevision(repository.getNamespace(), repository.getName())));
linksBuilder.single(link("content", resourceLinks.source().content(repository.getNamespace(), repository.getName())));
linksBuilder.single(link("paths", resourceLinks.repository().paths(repository.getNamespace(), repository.getName())));
if (scmConfigurationStore.get().isEnabledFileSearch()) {
linksBuilder.single(link("paths", resourceLinks.repository().paths(repository.getNamespace(), repository.getName())));
}
if (RepositoryPermissions.healthCheck(repository).isPermitted() && !healthCheckService.checkRunning(repository)) {
linksBuilder.single(link("runHealthCheck", resourceLinks.repository().runHealthCheck(repository.getNamespace(), repository.getName())));
}
@@ -198,7 +202,7 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Reposit
private boolean isRenameNamespacePossible() {
for (NamespaceStrategy strategy : strategies) {
if (strategy.getClass().getSimpleName().equals(scmConfiguration.getNamespaceStrategy())) {
if (strategy.getClass().getSimpleName().equals(scmConfigurationStore.get().getNamespaceStrategy())) {
return strategy.canBeChanged();
}
}

View File

@@ -29,6 +29,7 @@ import de.otto.edison.hal.Links;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ObjectFactory;
import sonia.scm.admin.ScmConfigurationStore;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.group.GroupPermissions;
import sonia.scm.security.PermissionPermissions;
@@ -51,7 +52,7 @@ public abstract class UserToUserDtoMapper extends BaseMapper<User, UserDto> {
@Inject
private UserManager userManager;
@Inject
private ScmConfiguration scmConfiguration;
private ScmConfigurationStore scmConfigurationStore;
@Override
@Mapping(target = "attributes", ignore = true)
@@ -70,7 +71,7 @@ public abstract class UserToUserDtoMapper extends BaseMapper<User, UserDto> {
if (UserPermissions.modify(user).isPermitted()) {
linksBuilder.single(link("update", resourceLinks.user().update(user.getName())));
linksBuilder.single(link("publicKeys", resourceLinks.user().publicKeys(user.getName())));
if (scmConfiguration.isEnabledApiKeys()) {
if (scmConfigurationStore.get().isEnabledApiKeys()) {
linksBuilder.single(link("apiKeys", resourceLinks.user().apiKeys(user.getName())));
}
if (user.isExternal()) {