diff --git a/README.md b/README.md index a6561fc..de7ce7d 100644 --- a/README.md +++ b/README.md @@ -22,14 +22,34 @@ ## **Конфигурация и запуск** ### **1. Конфигурация параметров для сервиса** -Для корректного запуска сервиса добавьте следующие параметры в файл `application.properties`: -```properties -file.upload.directory=/tmp/uploaded_files # Путь для хранения временных файлов -spring.servlet.multipart.max-file-size=10MB # Максимальный размер загружаемого файла -spring.servlet.multipart.max-request-size=10MB # Максимальный размер запроса -server.port=8080 # Порт, на котором работает сервис +Для корректного запуска сервиса добавьте следующие параметры в файл `application.yaml`: +```yaml +file: + upload: + directory: '/tmp/uploaded_files' # Путь для хранения временных файлов +spring: + servlet: + multipart: + max-file-size: 10MB # Максимальный размер загружаемого файла + max-request-size: 10MB # Максимальный размер запроса +server: + port: 8080 # Порт, на котором работает сервис +``` +Если KESL использует русскую локализацию, то следует в файл `application.yaml` добавить следующий параметр: +```yaml +password: + protected: + result: + name: 'Объекты, защищенные паролем' +``` +Для английской локализации: +```yaml +password: + protected: + result: + name: 'Password-protected objects' ``` ### **2. Запуск JAR-файла с конфигурационным файлом** ```bash -java -jar app.jar --spring.config.location=file:/path/to/your/application.properties +java -jar app.jar --spring.config.location=file:/path/to/your/application.yaml ``` \ No newline at end of file diff --git a/src/main/java/ru/micord/av/service/service/FileScanService.java b/src/main/java/ru/micord/av/service/service/FileScanService.java index cb77634..ac5b9b6 100644 --- a/src/main/java/ru/micord/av/service/service/FileScanService.java +++ b/src/main/java/ru/micord/av/service/service/FileScanService.java @@ -2,6 +2,7 @@ package ru.micord.av.service.service; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -23,6 +24,8 @@ public class FileScanService { private static final Logger LOGGER = LoggerFactory.getLogger(FileScanService.class); @Value("${file.upload.directory}") private String uploadDirectory; + @Value("${password.protected.result.name:Объекты, защищенные паролем}") + private String passwordProtectedResultName; public int scanFile(MultipartFile file) { File tempFile = null; @@ -60,11 +63,30 @@ public class FileScanService { ); processBuilder.redirectErrorStream(true); Process process = processBuilder.start(); - int exitCode = process.waitFor(); - if (exitCode != 0 && exitCode != 72) { - throw new AvException( - "KESL error scanning file: " + originalFileName + ", exit code: " + exitCode); + + try (InputStream inputStream = process.getInputStream()) { + String result = new String(inputStream.readAllBytes()); + + int exitCode = process.waitFor(); + if (exitCode != 0 && exitCode != 72) { + throw new AvException( + "KESL error scanning file: " + originalFileName + ", exit code: " + exitCode); + } + checkScanResult(result, originalFileName); + + return exitCode; + } + } + + private void checkScanResult(String result, String originalFileName) { + for (String line : result.split("\n")) { + String[] lineParts = line.split(":"); + if (lineParts.length > 1) { + if (lineParts[0].startsWith(passwordProtectedResultName) + && Integer.parseInt(lineParts[1].trim()) > 0) { + throw new AvException("Detected password-protected file: " + originalFileName); + } + } } - return exitCode; } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index ee7a3e8..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -file.upload.directory = /tmp/uploaded_files diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml new file mode 100644 index 0000000..be42268 --- /dev/null +++ b/src/main/resources/application.yaml @@ -0,0 +1,8 @@ +file: + upload: + directory: '/tmp/uploaded_files' + +password: + protected: + result: + name: 'Объекты, защищенные паролем' \ No newline at end of file