Add config links for git, hg and svn

This commit is contained in:
René Pfeuffer
2018-09-28 14:17:48 +02:00
parent b7ce1ae433
commit 6361ae35c1
3 changed files with 135 additions and 0 deletions

View File

@@ -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> scmPathInfoStore;
private final ObjectMapper objectMapper;
@Inject
public SvnConfigInIndexResource(Provider<ScmPathInfoStore> 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());
}
}