diff --git a/build.gradle b/build.gradle index f7926a3..a32b42e 100644 --- a/build.gradle +++ b/build.gradle @@ -59,7 +59,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.3.1' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - implementation name: 'testlib-fat-0.2.1-all' + implementation name: 'testlib-fat-0.3.0-all' implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.12.0' diff --git a/libs/testlib-fat-0.2.1-all.jar b/libs/testlib-fat-0.3.0-all.jar similarity index 94% rename from libs/testlib-fat-0.2.1-all.jar rename to libs/testlib-fat-0.3.0-all.jar index c911c08..c9f3df5 100644 Binary files a/libs/testlib-fat-0.2.1-all.jar and b/libs/testlib-fat-0.3.0-all.jar differ diff --git a/src/main/java/ru/soune/nocopy/configuration/ApplicationConfig.java b/src/main/java/ru/soune/nocopy/configuration/ApplicationConfig.java index cce0f0d..df4b7e1 100644 --- a/src/main/java/ru/soune/nocopy/configuration/ApplicationConfig.java +++ b/src/main/java/ru/soune/nocopy/configuration/ApplicationConfig.java @@ -3,9 +3,9 @@ package ru.soune.nocopy.configuration; import com.vrt.AudioFilePathProvider; import com.vrt.fileprotection.FileProtector; import com.vrt.fileprotection.audio.AudioLocalSearch; +import com.vrt.fileprotection.documents.DocumentLocalSearch; import com.vrt.fileprotection.image.ImageLocalSearch; import com.vrt.fileprotection.image.ImageUniqueCheck; -import com.vrt.fileprotection.image.phash.PerceptualHashHelper; import lombok.AllArgsConstructor; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; @@ -33,7 +33,8 @@ public class ApplicationConfig { ImageUniqueCheck imageUniqueCheck, ImageLocalSearch imageLocalSearch, AudioLocalSearch audioLocalSearch, - AudioFilePathProvider audioFilePathProvider) { + AudioFilePathProvider audioFilePathProvider, + DocumentLocalSearch documentLocalSearch) { return new com.vrt.NoCopyFileService( Collections.emptyList(), @@ -42,7 +43,8 @@ public class ApplicationConfig { imageUniqueCheck, imageLocalSearch, audioLocalSearch, - audioFilePathProvider + audioFilePathProvider, + documentLocalSearch ); } } diff --git a/src/main/java/ru/soune/nocopy/entity/file/FileType.java b/src/main/java/ru/soune/nocopy/entity/file/FileType.java index f01d38f..c79f61d 100644 --- a/src/main/java/ru/soune/nocopy/entity/file/FileType.java +++ b/src/main/java/ru/soune/nocopy/entity/file/FileType.java @@ -11,7 +11,7 @@ public enum FileType { VIDEO("video", Arrays.asList("mp4", "avi", "mov", "wmv", "flv", "mkv", "webm", "m4v", "mpg", "mpeg", "3gp", "3g2", "f4v", "m2ts", "mts", "vob", "ogv", "divx")), AUDIO("audio", List.of("wav")), - DOCUMENT("document", Arrays.asList("pdf", "txt", "doc", "docx")); + DOCUMENT("document", Arrays.asList("pdf")); private final String displayName; diff --git a/src/main/java/ru/soune/nocopy/repository/FileEntityRepository.java b/src/main/java/ru/soune/nocopy/repository/FileEntityRepository.java index 3bee72a..2fd8655 100644 --- a/src/main/java/ru/soune/nocopy/repository/FileEntityRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/FileEntityRepository.java @@ -15,6 +15,8 @@ import java.util.Optional; public interface FileEntityRepository extends JpaRepository { List findByUserId(Long userId); + FileEntity findByIdAndUserId(String id, Long userId); + Optional findByUserIdAndChecksum(Long userId, String imageHash); List findByUserIdAndStatus(Long userId, FileStatus status); diff --git a/src/main/java/ru/soune/nocopy/service/file/impl/DocumentLocalSearchImpl.java b/src/main/java/ru/soune/nocopy/service/file/impl/DocumentLocalSearchImpl.java new file mode 100644 index 0000000..10df2bd --- /dev/null +++ b/src/main/java/ru/soune/nocopy/service/file/impl/DocumentLocalSearchImpl.java @@ -0,0 +1,29 @@ +package ru.soune.nocopy.service.file.impl; + +import com.vrt.fileprotection.FileProtector; +import com.vrt.fileprotection.documents.DocumentLocalSearch; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.springframework.stereotype.Service; +import ru.soune.nocopy.entity.file.FileEntity; +import ru.soune.nocopy.repository.FileEntityRepository; +import ru.soune.nocopy.util.FileUtil; + +@Slf4j +@Service +@RequiredArgsConstructor +public class DocumentLocalSearchImpl implements DocumentLocalSearch { + + private final FileUtil fileUtil; + + private final FileEntityRepository fileEntityRepository; + + @Override + public @Nullable FileProtector.FileInfo findByIds(@NotNull String ownerId, @NotNull String fileId) { + FileEntity fileEntity = fileEntityRepository.findByIdAndUserId(fileId, Long.valueOf(ownerId)); + + return fileUtil.createFileInfo(fileEntity); + } +} diff --git a/src/main/java/ru/soune/nocopy/service/file/impl/ProtectionFileProviderImpl.java b/src/main/java/ru/soune/nocopy/service/file/impl/ProtectionFileProviderImpl.java index ffb4883..9661001 100644 --- a/src/main/java/ru/soune/nocopy/service/file/impl/ProtectionFileProviderImpl.java +++ b/src/main/java/ru/soune/nocopy/service/file/impl/ProtectionFileProviderImpl.java @@ -42,6 +42,11 @@ public class ProtectionFileProviderImpl implements FileProtector.FileProvider { return fileEntityService.getFileById(id); } + @Override + public @Nullable File getDocument(@NotNull String id) { + return fileEntityService.getFileById(id); + } + @Override public @Nullable File getSignature() { File signatureFile = SIGNATURE_FILE_PATH.toFile(); @@ -105,4 +110,15 @@ public class ProtectionFileProviderImpl implements FileProtector.FileProvider { return OperationResult.Companion.failure("Failed to create protected file"); } } + + @Override + public @NotNull OperationResult writeDocumentFile(@NotNull String id, @NotNull byte[] data) { + try { + fileEntityService.writeProtectedFile(id, data, null); + return OperationResult.Companion.success(); + } catch (Exception e) { + log.error("Failed to create protected file: {}", id, e); + return OperationResult.Companion.failure("Failed to create protected file"); + } + } }