diff --git a/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java b/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java index 2cb7d7d..ed895cc 100644 --- a/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java +++ b/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java @@ -326,6 +326,16 @@ public class FileUploadServiceImpl implements FileUploadService { fileSimilarityService.hasDuplicatesByHash(finalFilePath ,session.getFileType()); File file = new File(finalFilePath); + + if (session.getFileType().startsWith("audio") && !isWavFile(file)) { + session.setStatus(UploadStatus.FAILED); + session.setLastError("wav file not have RIFF header"); + + sessionRepository.save(session); + + throw new FileUploadException("Failed to upload chunk: .wav file not have RIFF header"); + } + FileProtector.Type type = "document".equals(session.getFileType()) ? FileProtector.Type.DOC : FileProtector.Type.valueOf(session.getFileType().toUpperCase()); @@ -403,6 +413,29 @@ public class FileUploadServiceImpl implements FileUploadService { } } + //TODO убрать когда научимся защищать другие типы + public boolean isWavFile(File file) { + if (file == null || !file.exists() || file.length() < 12) { + return false; + } + + try (FileInputStream fis = new FileInputStream(file)) { + byte[] header = new byte[4]; + int bytesRead = fis.read(header); + + if (bytesRead < 4) { + return false; + } + + return header[0] == 82 && header[1] == 73 && + header[2] == 70 && header[3] == 70; + + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + private int protectCost(String fileType) { int cost = 0;