diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigInIndexResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigInIndexResource.java new file mode 100644 index 0000000000..59cd79c13b --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigInIndexResource.java @@ -0,0 +1,45 @@ +package sonia.scm.api.v2.resources; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import sonia.scm.config.ConfigurationPermissions; +import sonia.scm.plugin.Extension; +import sonia.scm.web.JsonEnricher; +import sonia.scm.web.JsonEnricherContext; +import sonia.scm.web.VndMediaType; + +import javax.inject.Inject; +import javax.inject.Provider; + +@Extension +public class GitConfigInIndexResource implements JsonEnricher { + + private final Provider scmPathInfoStore; + private final ObjectMapper objectMapper; + + @Inject + public GitConfigInIndexResource(Provider scmPathInfoStore, ObjectMapper objectMapper) { + this.scmPathInfoStore = scmPathInfoStore; + this.objectMapper = objectMapper; + } + + @Override + public void enrich(JsonEnricherContext context) { + if (isIndexRequest(context) && ConfigurationPermissions.list().isPermitted()) { + String gitConfigUrl = new LinkBuilder(scmPathInfoStore.get().get(), GitConfigResource.class) + .method("get") + .parameters() + .href(); + + ObjectNode gitConfigRefNode = objectMapper.createObjectNode(); + gitConfigRefNode.set("href", objectMapper.convertValue(gitConfigUrl, JsonNode.class)); + + ((ObjectNode) context.getResponseEntity().get("_links")).put("gitConfig", gitConfigRefNode); + } + } + + private boolean isIndexRequest(JsonEnricherContext context) { + return VndMediaType.INDEX.equals(context.getResponseMediaType().toString()); + } +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigInIndexResource.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigInIndexResource.java new file mode 100644 index 0000000000..131caad0c0 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigInIndexResource.java @@ -0,0 +1,45 @@ +package sonia.scm.api.v2.resources; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import sonia.scm.config.ConfigurationPermissions; +import sonia.scm.plugin.Extension; +import sonia.scm.web.JsonEnricher; +import sonia.scm.web.JsonEnricherContext; +import sonia.scm.web.VndMediaType; + +import javax.inject.Inject; +import javax.inject.Provider; + +@Extension +public class HgConfigInIndexResource implements JsonEnricher { + + private final Provider scmPathInfoStore; + private final ObjectMapper objectMapper; + + @Inject + public HgConfigInIndexResource(Provider scmPathInfoStore, ObjectMapper objectMapper) { + this.scmPathInfoStore = scmPathInfoStore; + this.objectMapper = objectMapper; + } + + @Override + public void enrich(JsonEnricherContext context) { + if (isIndexRequest(context) && ConfigurationPermissions.list().isPermitted()) { + String gitConfigUrl = new LinkBuilder(scmPathInfoStore.get().get(), HgConfigResource.class) + .method("get") + .parameters() + .href(); + + ObjectNode gitConfigRefNode = objectMapper.createObjectNode(); + gitConfigRefNode.set("href", objectMapper.convertValue(gitConfigUrl, JsonNode.class)); + + ((ObjectNode) context.getResponseEntity().get("_links")).put("hgConfig", gitConfigRefNode); + } + } + + private boolean isIndexRequest(JsonEnricherContext context) { + return VndMediaType.INDEX.equals(context.getResponseMediaType().toString()); + } +} diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigInIndexResource.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigInIndexResource.java new file mode 100644 index 0000000000..68c169834d --- /dev/null +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigInIndexResource.java @@ -0,0 +1,45 @@ +package sonia.scm.api.v2.resources; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import sonia.scm.config.ConfigurationPermissions; +import sonia.scm.plugin.Extension; +import sonia.scm.web.JsonEnricher; +import sonia.scm.web.JsonEnricherContext; +import sonia.scm.web.VndMediaType; + +import javax.inject.Inject; +import javax.inject.Provider; + +@Extension +public class SvnConfigInIndexResource implements JsonEnricher { + + private final Provider scmPathInfoStore; + private final ObjectMapper objectMapper; + + @Inject + public SvnConfigInIndexResource(Provider scmPathInfoStore, ObjectMapper objectMapper) { + this.scmPathInfoStore = scmPathInfoStore; + this.objectMapper = objectMapper; + } + + @Override + public void enrich(JsonEnricherContext context) { + if (isIndexRequest(context) && ConfigurationPermissions.list().isPermitted()) { + String gitConfigUrl = new LinkBuilder(scmPathInfoStore.get().get(), SvnConfigResource.class) + .method("get") + .parameters() + .href(); + + ObjectNode gitConfigRefNode = objectMapper.createObjectNode(); + gitConfigRefNode.set("href", objectMapper.convertValue(gitConfigUrl, JsonNode.class)); + + ((ObjectNode) context.getResponseEntity().get("_links")).put("svnConfig", gitConfigRefNode); + } + } + + private boolean isIndexRequest(JsonEnricherContext context) { + return VndMediaType.INDEX.equals(context.getResponseMediaType().toString()); + } +}