From 6ad5e0c0e74e49dbb89ca1a23ab04489f5b1c22c Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Wed, 11 May 2022 01:24:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BE=20SHA1=20=D0=BA=D0=B0=D0=BA=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=B0=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=BA=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mirror-core/build.gradle | 1 + .../di9/mirror/core/handler/MavenHandler.java | 21 ++++++++++++++----- .../di9/mirror/core/storage/FileStorage.java | 2 ++ .../mirror/minio/storage/MinioStorage.java | 14 +++++++++++++ versions.gradle | 1 + 5 files changed, 34 insertions(+), 5 deletions(-) diff --git a/mirror-core/build.gradle b/mirror-core/build.gradle index c5d6b4c..bd0d622 100644 --- a/mirror-core/build.gradle +++ b/mirror-core/build.gradle @@ -2,4 +2,5 @@ apply plugin: 'java-library' dependencies { api("com.squareup.okhttp3:okhttp:${okhttpVersion}") + implementation("commons-io:commons-io:${commonsIoVersion}") } diff --git a/mirror-core/src/main/java/ru/di9/mirror/core/handler/MavenHandler.java b/mirror-core/src/main/java/ru/di9/mirror/core/handler/MavenHandler.java index 0fc735b..dc4c927 100644 --- a/mirror-core/src/main/java/ru/di9/mirror/core/handler/MavenHandler.java +++ b/mirror-core/src/main/java/ru/di9/mirror/core/handler/MavenHandler.java @@ -2,6 +2,7 @@ package ru.di9.mirror.core.handler; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; import ru.di9.mirror.core.domain.FileInfo; import ru.di9.mirror.core.entity.ArtifactEntity; import ru.di9.mirror.core.handler.response.GetFileResponse; @@ -10,6 +11,7 @@ import ru.di9.mirror.core.storage.FileStorage; import ru.di9.mirror.core.service.ExternalMavenService; import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Optional; @@ -37,11 +39,11 @@ public class MavenHandler { return optionalInputStream .map(inputStream -> new GetFileResponse(fileInfo.name(), inputStream)); } else { - return findInMirrors(path, fileInfo.name(), artifactEntity); + return findInMirrors(path, fileInfo, artifactEntity); } } - private Optional findInMirrors(String path, String fileName, ArtifactEntity artifactEntity) { + private Optional findInMirrors(String path, FileInfo fileInfo, ArtifactEntity artifactEntity) { Optional result; for (ExternalMavenService externalMavenService : externalMavenServices) { final String nameForStore = "/" + externalMavenService.getId() + "/" + path; @@ -49,7 +51,7 @@ public class MavenHandler { result = fileStorage.findByName(nameForStore); if (result.isPresent()) { return result - .map(inputStream -> new GetFileResponse(fileName, inputStream)); + .map(inputStream -> new GetFileResponse(fileInfo.name(), inputStream)); } else { result = externalMavenService.getFile(path); if (result.isPresent()) { @@ -57,9 +59,18 @@ public class MavenHandler { repository.save(artifactEntity); } - fileStorage.save(nameForStore, result.get()); + if (fileInfo.ext().equalsIgnoreCase("sha1")) { + try { + String sha1str = IOUtils.toString(result.get(), StandardCharsets.UTF_8); + fileStorage.setMetadata(nameForStore.substring(0, nameForStore.lastIndexOf(".")), "sha1", sha1str); + } catch (Exception e) { + throw new RuntimeException(e); + } + } else { + fileStorage.save(nameForStore, result.get()); + } return fileStorage.findByName(nameForStore) - .map(inputStream -> new GetFileResponse(fileName, inputStream)); + .map(inputStream -> new GetFileResponse(fileInfo.name(), inputStream)); } } } diff --git a/mirror-core/src/main/java/ru/di9/mirror/core/storage/FileStorage.java b/mirror-core/src/main/java/ru/di9/mirror/core/storage/FileStorage.java index 875e69d..ace9896 100644 --- a/mirror-core/src/main/java/ru/di9/mirror/core/storage/FileStorage.java +++ b/mirror-core/src/main/java/ru/di9/mirror/core/storage/FileStorage.java @@ -12,5 +12,7 @@ public interface FileStorage { void save(String name, InputStream inputStream); + void setMetadata(String name, String key, String value); + List list(String prefix); } diff --git a/mirror-minio/src/main/java/ru/di9/mirror/minio/storage/MinioStorage.java b/mirror-minio/src/main/java/ru/di9/mirror/minio/storage/MinioStorage.java index 2fc736a..e678442 100644 --- a/mirror-minio/src/main/java/ru/di9/mirror/minio/storage/MinioStorage.java +++ b/mirror-minio/src/main/java/ru/di9/mirror/minio/storage/MinioStorage.java @@ -12,6 +12,7 @@ import ru.di9.mirror.minio.exception.MinioException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Optional; @RequiredArgsConstructor @@ -35,6 +36,19 @@ public class MinioStorage implements FileStorage { } } + @Override + public void setMetadata(String name, String key, String value) { + try { + minioClient.setObjectTags(SetObjectTagsArgs.builder() + .bucket(bucket) + .object(name) + .tags(Map.of(key, value)) + .build()); + } catch (Exception e) { + throw new MinioException("Error set tags file", e); + } + } + @Override public Optional findByName(String name) { try { diff --git a/versions.gradle b/versions.gradle index 1e25210..5f43384 100644 --- a/versions.gradle +++ b/versions.gradle @@ -5,6 +5,7 @@ ext { springBootVerson = '2.6.6' mongoDriver = '4.6.0' okhttpVersion = '4.8.1' + commonsIoVersion = '2.11.0' // for tests only junitJupiterVersion = '5.5.2'