From 8d6dcd6b2b59708e2cc2583666f703b509d0aa15 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Mon, 15 Jul 2019 16:23:15 +0200 Subject: [PATCH] fix permissions for dry-run --- .../scm/repository/api/RepositoryService.java | 1 - .../sonia/scm/api/v2/resources/MergeResource.java | 15 +++++++++++---- 2 files changed, 11 insertions(+), 5 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 e11afa4be9..90978d75ea 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 @@ -379,7 +379,6 @@ public final class RepositoryService implements Closeable { * @since 2.0.0 */ public MergeCommandBuilder getMergeCommand() { - RepositoryPermissions.push(getRepository()).check(); LOG.debug("create merge command for repository {}", repository.getNamespaceAndName()); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MergeResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MergeResource.java index 2214b258c6..df59ba2abc 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MergeResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MergeResource.java @@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpStatus; import sonia.scm.ConcurrentModificationException; import sonia.scm.repository.NamespaceAndName; +import sonia.scm.repository.RepositoryPermissions; import sonia.scm.repository.api.MergeCommandBuilder; import sonia.scm.repository.api.MergeCommandResult; import sonia.scm.repository.api.MergeDryRunCommandResult; @@ -49,6 +50,7 @@ public class MergeResource { NamespaceAndName namespaceAndName = new NamespaceAndName(namespace, name); log.info("Merge in Repository {}/{} from {} to {}", namespace, name, mergeCommand.getSourceRevision(), mergeCommand.getTargetRevision()); try (RepositoryService repositoryService = serviceFactory.create(namespaceAndName)) { + RepositoryPermissions.push(repositoryService.getRepository()).check(); MergeCommandResult mergeCommandResult = createMergeCommand(mergeCommand, repositoryService).executeMerge(); if (mergeCommandResult.isSuccess()) { return Response.noContent().build(); @@ -67,14 +69,19 @@ public class MergeResource { @ResponseCode(code = 500, condition = "internal server error") }) public Response dryRun(@PathParam("namespace") String namespace, @PathParam("name") String name, @Valid MergeCommandDto mergeCommand) { + NamespaceAndName namespaceAndName = new NamespaceAndName(namespace, name); log.info("Merge in Repository {}/{} from {} to {}", namespace, name, mergeCommand.getSourceRevision(), mergeCommand.getTargetRevision()); try (RepositoryService repositoryService = serviceFactory.create(namespaceAndName)) { - MergeDryRunCommandResult mergeCommandResult = createMergeCommand(mergeCommand, repositoryService).dryRun(); - if (mergeCommandResult.isMergeable()) { - return Response.noContent().build(); + if (RepositoryPermissions.push(repositoryService.getRepository()).isPermitted()) { + MergeDryRunCommandResult mergeCommandResult = createMergeCommand(mergeCommand, repositoryService).dryRun(); + if (mergeCommandResult.isMergeable()) { + return Response.noContent().build(); + } else { + throw new ConcurrentModificationException("revision", mergeCommand.getTargetRevision()); + } } else { - throw new ConcurrentModificationException("revision", mergeCommand.getTargetRevision()); + return Response.noContent().build(); } } }