From 77aca0531e016df7776de9fea2e892d95ba2de25 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Thu, 11 Jul 2019 13:13:03 +0200 Subject: [PATCH] Small fixes --- .../scm/api/v2/resources/IndexDtoGenerator.java | 2 +- .../sonia/scm/api/v2/resources/PluginDto.java | 6 ++---- .../scm/api/v2/resources/PluginDtoMapper.java | 17 ++++++----------- .../scm/api/v2/resources/PluginResource.java | 14 ++++++++------ .../main/resources/META-INF/scm/permissions.xml | 5 +++-- .../src/main/resources/locales/de/plugins.json | 12 ++++-------- .../src/main/resources/locales/en/plugins.json | 12 ++++-------- 7 files changed, 28 insertions(+), 40 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java index cccef51422..c7b52861dc 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java @@ -41,7 +41,7 @@ public class IndexDtoGenerator extends HalAppenderMapper { link("me", resourceLinks.me().self()), link("logout", resourceLinks.authentication().logout()) ); - if (PluginPermissions.custom(PluginPermissions.ACTION_READ).isPermitted()) { + if (PluginPermissions.read().isPermitted()) { builder.single(link("plugins", resourceLinks.pluginCollection().self())); } if (UserPermissions.list().isPermitted()) { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDto.java index 0d686b237b..d119eca711 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDto.java @@ -18,9 +18,7 @@ public class PluginDto extends HalRepresentation { private String author; private String description; - @Override - protected HalRepresentation add(Links links) { - return super.add(links); + public PluginDto(Links links) { + add(links); } - } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDtoMapper.java index fe940e2c8a..23ecbe4ad8 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDtoMapper.java @@ -3,35 +3,30 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; import sonia.scm.plugin.PluginWrapper; import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; import static de.otto.edison.hal.Links.linkingTo; public class PluginDtoMapper { private final ResourceLinks resourceLinks; - private final HttpServletRequest request; @Inject - public PluginDtoMapper(ResourceLinks resourceLinks, HttpServletRequest request) { + public PluginDtoMapper(ResourceLinks resourceLinks) { this.resourceLinks = resourceLinks; - this.request = request; } public PluginDto map(PluginWrapper plugin) { - PluginDto pluginDto = new PluginDto(); + Links.Builder linksBuilder = linkingTo() + .self(resourceLinks.plugin() + .self(plugin.getId())); + + PluginDto pluginDto = new PluginDto(linksBuilder.build()); pluginDto.setName(plugin.getPlugin().getInformation().getName()); pluginDto.setType(plugin.getPlugin().getInformation().getCategory() != null ? plugin.getPlugin().getInformation().getCategory() : "Miscellaneous"); pluginDto.setVersion(plugin.getPlugin().getInformation().getVersion()); pluginDto.setAuthor(plugin.getPlugin().getInformation().getAuthor()); pluginDto.setDescription(plugin.getPlugin().getInformation().getDescription()); - Links.Builder linksBuilder = linkingTo() - .self(resourceLinks.uiPlugin() - .self(plugin.getId())); - - pluginDto.add(linksBuilder.build()); - return pluginDto; } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginResource.java index 6da204ea6c..3cf0528dd3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginResource.java @@ -3,6 +3,7 @@ package sonia.scm.api.v2.resources; import com.webcohesion.enunciate.metadata.rs.ResponseCode; import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; +import sonia.scm.plugin.Plugin; import sonia.scm.plugin.PluginLoader; import sonia.scm.plugin.PluginPermissions; import sonia.scm.plugin.PluginWrapper; @@ -14,9 +15,12 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; +import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; + +import static sonia.scm.ContextEntry.ContextBuilder.entity; +import static sonia.scm.NotFoundException.notFound; public class PluginResource { @@ -45,10 +49,8 @@ public class PluginResource { @TypeHint(CollectionDto.class) @Produces(VndMediaType.PLUGIN_COLLECTION) public Response getInstalledPlugins() { - List plugins = pluginLoader.getInstalledPlugins() - .stream() - .collect(Collectors.toList()); PluginPermissions.read().check(); + List plugins = new ArrayList<>(pluginLoader.getInstalledPlugins()); return Response.ok(collectionMapper.map(plugins)).build(); } @@ -69,16 +71,16 @@ public class PluginResource { @TypeHint(PluginDto.class) @Produces(VndMediaType.PLUGIN) public Response getInstalledPlugin(@PathParam("id") String id) { + PluginPermissions.read().check(); Optional pluginDto = pluginLoader.getInstalledPlugins() .stream() .filter(plugin -> id.equals(plugin.getId())) .map(mapper::map) .findFirst(); - PluginPermissions.read().check(); if (pluginDto.isPresent()) { return Response.ok(pluginDto.get()).build(); } else { - return Response.status(Response.Status.NOT_FOUND).build(); + throw notFound(entity(Plugin.class, id)); } } diff --git a/scm-webapp/src/main/resources/META-INF/scm/permissions.xml b/scm-webapp/src/main/resources/META-INF/scm/permissions.xml index a8bc21973b..6a718e4d01 100644 --- a/scm-webapp/src/main/resources/META-INF/scm/permissions.xml +++ b/scm-webapp/src/main/resources/META-INF/scm/permissions.xml @@ -70,9 +70,10 @@ repositoryRole:read,write - plugin:read:* + plugin:read - plugin:read,write:* + plugin:read,write + diff --git a/scm-webapp/src/main/resources/locales/de/plugins.json b/scm-webapp/src/main/resources/locales/de/plugins.json index 1e46b5aeac..92b81c5772 100644 --- a/scm-webapp/src/main/resources/locales/de/plugins.json +++ b/scm-webapp/src/main/resources/locales/de/plugins.json @@ -68,16 +68,12 @@ }, "plugin": { "read": { - "*": { - "displayName": "Alle Plugins lesen", - "description": "Darf alle installierten und verfügbaren Plugins lesen" - } + "displayName": "Alle Plugins lesen", + "description": "Darf alle installierten und verfügbaren Plugins lesen" }, "read,write": { - "*": { - "displayName": "Alle Plugins lesen und verwalten", - "description": "Darf alle installierten und verfügbaren Plugins lesen und verwalten" - } + "displayName": "Alle Plugins lesen und verwalten", + "description": "Darf alle installierten und verfügbaren Plugins lesen und verwalten" } }, "unknown": "Unbekannte Berechtigung" diff --git a/scm-webapp/src/main/resources/locales/en/plugins.json b/scm-webapp/src/main/resources/locales/en/plugins.json index 77c1534fed..3f70000624 100644 --- a/scm-webapp/src/main/resources/locales/en/plugins.json +++ b/scm-webapp/src/main/resources/locales/en/plugins.json @@ -68,16 +68,12 @@ }, "plugin": { "read": { - "*": { - "displayName": "Read all plugins", - "description": "May see all installed and available plugins" - } + "displayName": "Read all plugins", + "description": "May see all installed and available plugins" }, "read,write": { - "*": { - "displayName": "Read and manage all plugins", - "description": "May see and manage all installed and available plugins" - } + "displayName": "Read and manage all plugins", + "description": "May see and manage all installed and available plugins" } }, "unknown": "Unknown permission"