mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-08-27 06:39:24 +00:00
extra fixes
This commit is contained in:
parent
0d967aa5ea
commit
bb9f1d4f8b
@ -153,9 +153,23 @@ public class FileStorage {
|
|||||||
*
|
*
|
||||||
* @param fileId The ID of the file
|
* @param fileId The ID of the file
|
||||||
* @return The path to the file
|
* @return The path to the file
|
||||||
|
* @throws IllegalArgumentException if fileId contains path traversal characters or resolves outside base directory
|
||||||
*/
|
*/
|
||||||
private Path getFilePath(String fileId) {
|
private Path getFilePath(String fileId) {
|
||||||
return Path.of(tempDirPath).resolve(fileId);
|
// Validate fileId to prevent path traversal
|
||||||
|
if (fileId.contains("..") || fileId.contains("/") || fileId.contains("\\")) {
|
||||||
|
throw new IllegalArgumentException("Invalid file ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
Path basePath = Path.of(tempDirPath).normalize().toAbsolutePath();
|
||||||
|
Path resolvedPath = basePath.resolve(fileId).normalize();
|
||||||
|
|
||||||
|
// Ensure resolved path is within the base directory
|
||||||
|
if (!resolvedPath.startsWith(basePath)) {
|
||||||
|
throw new IllegalArgumentException("File ID resolves to an invalid path");
|
||||||
|
}
|
||||||
|
|
||||||
|
return resolvedPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -5,6 +5,7 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@ -85,7 +86,7 @@ public class JobController {
|
|||||||
// Handle multiple files - return metadata for client to download individually
|
// Handle multiple files - return metadata for client to download individually
|
||||||
if (result.hasMultipleFiles()) {
|
if (result.hasMultipleFiles()) {
|
||||||
return ResponseEntity.ok()
|
return ResponseEntity.ok()
|
||||||
.header("Content-Type", "application/json")
|
.contentType(MediaType.APPLICATION_JSON)
|
||||||
.body(Map.of(
|
.body(Map.of(
|
||||||
"jobId", jobId,
|
"jobId", jobId,
|
||||||
"hasMultipleFiles", true,
|
"hasMultipleFiles", true,
|
||||||
@ -229,7 +230,7 @@ public class JobController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Find the file metadata from any job that contains this file
|
// Find the file metadata from any job that contains this file
|
||||||
ResultFile resultFile = findResultFileByFileId(fileId);
|
ResultFile resultFile = taskManager.findResultFileByFileId(fileId);
|
||||||
|
|
||||||
if (resultFile != null) {
|
if (resultFile != null) {
|
||||||
return ResponseEntity.ok(resultFile);
|
return ResponseEntity.ok(resultFile);
|
||||||
@ -269,7 +270,7 @@ public class JobController {
|
|||||||
|
|
||||||
// Find the file metadata from any job that contains this file
|
// Find the file metadata from any job that contains this file
|
||||||
// This is for getting the original filename and content type
|
// This is for getting the original filename and content type
|
||||||
ResultFile resultFile = findResultFileByFileId(fileId);
|
ResultFile resultFile = taskManager.findResultFileByFileId(fileId);
|
||||||
|
|
||||||
String fileName = resultFile != null ? resultFile.getFileName() : "download";
|
String fileName = resultFile != null ? resultFile.getFileName() : "download";
|
||||||
String contentType = resultFile != null ? resultFile.getContentType() : "application/octet-stream";
|
String contentType = resultFile != null ? resultFile.getContentType() : "application/octet-stream";
|
||||||
@ -285,20 +286,6 @@ public class JobController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Find ResultFile metadata by fileId from any job
|
|
||||||
* This is a helper method to get original filename and content type
|
|
||||||
*
|
|
||||||
* @param fileId The file ID to search for
|
|
||||||
* @return ResultFile if found, null otherwise
|
|
||||||
*/
|
|
||||||
private ResultFile findResultFileByFileId(String fileId) {
|
|
||||||
// Since we don't have a direct way to map fileId to ResultFile,
|
|
||||||
// this would need to be implemented by searching through job results
|
|
||||||
// For now, we'll return null and use defaults
|
|
||||||
// TODO: Consider adding a fileId -> ResultFile mapping in TaskManager
|
|
||||||
return taskManager.findResultFileByFileId(fileId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create Content-Disposition header with UTF-8 filename support
|
* Create Content-Disposition header with UTF-8 filename support
|
||||||
|
Loading…
x
Reference in New Issue
Block a user