From ef9569f9aca0f86620a01bfd4d91db04d68bf530 Mon Sep 17 00:00:00 2001 From: anda-ren Date: Thu, 19 Oct 2023 20:00:14 +0800 Subject: [PATCH] unify sign link api for dataset and evaluation --- .../mlops/api/DatasetController.java | 4 +++ .../mlops/api/EvaluationController.java | 4 +++ .../mlops/api/FileStorageController.java | 30 +++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/server/controller/src/main/java/ai/starwhale/mlops/api/DatasetController.java b/server/controller/src/main/java/ai/starwhale/mlops/api/DatasetController.java index a458879cb4..e071207e51 100644 --- a/server/controller/src/main/java/ai/starwhale/mlops/api/DatasetController.java +++ b/server/controller/src/main/java/ai/starwhale/mlops/api/DatasetController.java @@ -431,12 +431,16 @@ void pullUriContent( } } + /** + * legacy sign links api, use {@link FileStorageController} instead + */ @Operation(summary = "Sign SWDS uris to get a batch of temporarily accessible links", description = "Sign SWDS uris to get a batch of temporarily accessible links") @PostMapping( value = "/project/{projectName}/dataset/{datasetName}/uri/sign-links", produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasAnyRole('OWNER', 'MAINTAINER', 'GUEST')") + @Deprecated(since = "0.6.2") ResponseEntity> signLinks( @PathVariable String projectName, @PathVariable String datasetName, diff --git a/server/controller/src/main/java/ai/starwhale/mlops/api/EvaluationController.java b/server/controller/src/main/java/ai/starwhale/mlops/api/EvaluationController.java index 49a3250a93..86ca62f4d1 100644 --- a/server/controller/src/main/java/ai/starwhale/mlops/api/EvaluationController.java +++ b/server/controller/src/main/java/ai/starwhale/mlops/api/EvaluationController.java @@ -216,6 +216,9 @@ void getHashedBlob( } + /** + * legacy sign links api, use {@link FileStorageController} instead + */ @Operation(summary = "Sign uris to get a batch of temporarily accessible links", description = "Sign uris to get a batch of temporarily accessible links") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "ok")}) @@ -223,6 +226,7 @@ void getHashedBlob( value = "/project/{projectUrl}/evaluation/{version}/uri/sign-links", produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasAnyRole('OWNER', 'MAINTAINER', 'GUEST')") + @Deprecated(since = "0.6.2") ResponseEntity>> signLinks( @PathVariable(name = "projectUrl") String projectUrl, @PathVariable(name = "version") String version, diff --git a/server/controller/src/main/java/ai/starwhale/mlops/api/FileStorageController.java b/server/controller/src/main/java/ai/starwhale/mlops/api/FileStorageController.java index cc2d94a8f6..81b0739f0e 100644 --- a/server/controller/src/main/java/ai/starwhale/mlops/api/FileStorageController.java +++ b/server/controller/src/main/java/ai/starwhale/mlops/api/FileStorageController.java @@ -26,15 +26,22 @@ import ai.starwhale.mlops.exception.SwProcessException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import java.io.IOException; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -105,4 +112,27 @@ void pullUriContent( throw new SwProcessException(SwProcessException.ErrorType.NETWORK, "error write data to response", e); } } + + @Operation(summary = "Sign uris to get a batch of temporarily accessible links", + description = "Sign uris to get a batch of temporarily accessible links") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "ok")}) + @PostMapping( + value = "/filestorage/sign-links", + produces = MediaType.APPLICATION_JSON_VALUE) + ResponseEntity>> signLinks( + @RequestBody Set uris, + @Parameter(name = "expTimeMillis", description = "the link will be expired after expTimeMillis") + @RequestParam(name = "expTimeMillis") + Long expTimeMillis + ) { + return ResponseEntity.ok( + Code.success.asResponse( + uris.stream().collect(Collectors.toMap( + u -> u, + u -> uriAccessor.linkOf( + u, + expTimeMillis + ) + )))); + } }