From 0d17230c280d2752a14735052173ff2bfa4e4e21 Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Fri, 27 Oct 2023 22:51:22 +0200 Subject: [PATCH] Download plugin --- .../playwall/controller/PluginController.java | 11 +++++++++++ .../playwall/service/ArtifactoryClient.java | 17 +++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/de/tobias/playwall/controller/PluginController.java b/src/main/java/de/tobias/playwall/controller/PluginController.java index fa39bc7..24f4d67 100644 --- a/src/main/java/de/tobias/playwall/controller/PluginController.java +++ b/src/main/java/de/tobias/playwall/controller/PluginController.java @@ -1,14 +1,17 @@ package de.tobias.playwall.controller; import de.tobias.playwall.model.Plugin; +import de.tobias.playwall.service.ArtifactoryClient; import de.tobias.playwall.service.PluginService; import lombok.AllArgsConstructor; +import org.springframework.core.io.Resource; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ResponseStatusException; +import reactor.core.publisher.Mono; import java.util.List; @@ -18,6 +21,7 @@ import java.util.List; public class PluginController { private final PluginService service; + private final ArtifactoryClient artifactoryClient; @GetMapping List<Plugin> getAllPlugins() @@ -30,4 +34,11 @@ public class PluginController { return service.getPlugin(id).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND)); } + + @GetMapping("/raw/{id}") + Mono<byte[]> getPluginExecutable(@PathVariable Integer id) + { + final Plugin plugin = service.getPlugin(id).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND)); + return artifactoryClient.downloadArtifact(plugin); + } } diff --git a/src/main/java/de/tobias/playwall/service/ArtifactoryClient.java b/src/main/java/de/tobias/playwall/service/ArtifactoryClient.java index 0680ed3..3fd4983 100644 --- a/src/main/java/de/tobias/playwall/service/ArtifactoryClient.java +++ b/src/main/java/de/tobias/playwall/service/ArtifactoryClient.java @@ -3,6 +3,7 @@ package de.tobias.playwall.service; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import de.tobias.playwall.infrastructure.ArtifactoryConfigurationProperties; +import de.tobias.playwall.model.Plugin; import de.tobias.playwall.model.PluginDescription; import de.tobias.playwall.model.PluginManifest; import de.tobias.playwall.model.artifactory.Folder; @@ -13,6 +14,7 @@ import lombok.SneakyThrows; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; import java.util.Comparator; import java.util.List; @@ -89,4 +91,19 @@ public class ArtifactoryClient } return mapper.readValue(response.getBody().source(), PluginManifest.class); } + + public Mono<byte[]> downloadArtifact(Plugin plugin) + { + return webClient.get() + .uri("/artifactory/%s/%s/%s/%s/%s-%s.jar".formatted( + configurationProperties.getRepository(), + configurationProperties.getGroupId().replace(".", "/"), + plugin.getName(), + plugin.getVersion(), + plugin.getName(), + plugin.getVersion() + )) + .retrieve() + .bodyToMono(byte[].class); + } } -- GitLab