Merge remote-tracking branch 'origin/feature/SUPPORT-9156' into develop

# Conflicts:
#	src/main/java/ru/micord/av/service/service/FileScanService.java
This commit is contained in:
adel.kalimullin 2025-05-15 12:24:28 +03:00
commit 11cd7856cc

View file

@ -26,6 +26,9 @@ import ru.micord.av.service.property.PasswordProtectedResultNamesProperty;
public class FileScanService { public class FileScanService {
private static final String KESL_CONTROL = "kesl-control"; private static final String KESL_CONTROL = "kesl-control";
private static final String KESL_SCAN = "--scan-file"; private static final String KESL_SCAN = "--scan-file";
private static final int CLEAN_CODE = 0;
private static final int INFECTED_CODE = 72;
private static final int PASS_PROTECTED_CODE = 73;
private static final Logger LOGGER = LoggerFactory.getLogger(FileScanService.class); private static final Logger LOGGER = LoggerFactory.getLogger(FileScanService.class);
private final String uploadDirectory; private final String uploadDirectory;
private final PasswordProtectedResultNamesProperty passwordProtectedResultNamesProperty; private final PasswordProtectedResultNamesProperty passwordProtectedResultNamesProperty;
@ -77,16 +80,22 @@ public class FileScanService {
String processOutput = processResult.outputUTF8(); String processOutput = processResult.outputUTF8();
int exitCode = processResult.getExitValue(); int exitCode = processResult.getExitValue();
if (exitCode != 0 && exitCode != 72) { if (exitCode != CLEAN_CODE && exitCode != INFECTED_CODE) {
throw new AvException( throw new AvException(
"KESL error scanning file: " + originalFileName + ", exit code: " + exitCode); "KESL error scanning file: " + originalFileName + ", exit code: " + exitCode);
} }
checkScanResult(processOutput, originalFileName);
if (isPasswordProtectedFile(processOutput)) {
LOGGER.warn("File: {} is identified as password protected. Please review the file.",
originalFileName
);
exitCode = PASS_PROTECTED_CODE;
}
return exitCode; return exitCode;
} }
private void checkScanResult(String result, String originalFileName) { private boolean isPasswordProtectedFile(String result) {
boolean isResultNotContains = passwordProtectedResultNamesProperty.getNames().stream() boolean isResultNotContains = passwordProtectedResultNamesProperty.getNames().stream()
.filter(result::contains) .filter(result::contains)
.toList() .toList()
@ -108,10 +117,11 @@ public class FileScanService {
.toList() .toList()
.isEmpty(); .isEmpty();
if (isLinePartStartWith && Integer.parseInt(lineParts[1].trim()) > 0) { if (isLinePartStartWith) {
throw new AvException("Detected password-protected file: " + originalFileName); return Integer.parseInt(lineParts[1].trim()) > 0;
} }
} }
} }
return true;
} }
} }