SUPPORT-8841: check if file is password protected
This commit is contained in:
parent
1e4a9a234e
commit
c22fa63d15
4 changed files with 62 additions and 13 deletions
34
README.md
34
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
|
||||
```
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
file.upload.directory = /tmp/uploaded_files
|
||||
8
src/main/resources/application.yaml
Normal file
8
src/main/resources/application.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
file:
|
||||
upload:
|
||||
directory: '/tmp/uploaded_files'
|
||||
|
||||
password:
|
||||
protected:
|
||||
result:
|
||||
name: 'Объекты, защищенные паролем'
|
||||
Loading…
Add table
Add a link
Reference in a new issue