Index: /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/Connector.java
===================================================================
--- /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/Connector.java (revision 2487)
+++ /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/Connector.java (revision 2488)
@@ -122,3 +122,14 @@
public String fileUpload(final ResourceType type, final String currentFolder, final String fileName, final InputStream inputStream)
throws InvalidCurrentFolderException, SecurityIssueException;
+
+ /**
+ * Uploads a new file into the top of userFiles
. If there is
+ * already a file with the same name, the new one has to renamed.
+ *
+ * @param fileName
+ * @param inputStream Content of the file.
+ * @return
+ * @throws SecurityIssueException
+ */
+ public String quickUpload(final String fileName, final InputStream inputStream) throws SecurityIssueException;
}
Index: /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/Dispatcher.java
===================================================================
--- /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/Dispatcher.java (revision 2487)
+++ /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/Dispatcher.java (revision 2488)
@@ -39,4 +39,6 @@
import net.fckeditor.handlers.RequestCycleHandler;
import net.fckeditor.handlers.ResourceType;
+import net.fckeditor.requestcycle.Context;
+import net.fckeditor.requestcycle.ThreadLocalData;
import net.fckeditor.response.GetResponse;
import net.fckeditor.response.UploadResponse;
@@ -90,4 +92,5 @@
public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException {
logger.debug("Entering Dispatcher#doGet");
+ Context context = ThreadLocalData.getContext();
response.setCharacterEncoding("UTF-8");
@@ -96,24 +99,18 @@
PrintWriter out = response.getWriter();
- String commandStr = request.getParameter("Command");
- String typeStr = request.getParameter("Type");
- String currentFolderStr = request.getParameter("CurrentFolder");
-
- logger.debug("Parameter Command: {}", commandStr);
- logger.debug("Parameter Type: {}", typeStr);
- logger.debug("Parameter CurrentFolder: {}", currentFolderStr);
+ context.logBaseParameters();
GetResponse getResponse = null;
// check parameters
- if (!CommandHandler.isValidForGet(commandStr))
+ if (!CommandHandler.isValidForGet(context.getCommandStr()))
getResponse = GetResponse.getErrorInvalidCommand();
- else if (!ResourceType.isValid(typeStr))
+ else if (!ResourceType.isValid(context.getTypeStr()))
getResponse = GetResponse.getErrorInvalidType();
- else if (!UtilsFile.isValidPath(currentFolderStr))
+ else if (!UtilsFile.isValidPath(context.getCurrentFolderStr()))
getResponse = GetResponse.getErrorInvalidCurrentFolder();
else {
- ResourceType type = ResourceType.getDefaultResourceType(typeStr);
- CommandHandler command = CommandHandler.getCommand(commandStr);
+ ResourceType type = ResourceType.getDefaultResourceType(context.getTypeStr());
+ CommandHandler command = CommandHandler.getCommand(context.getCommandStr());
// check permissions for user action
@@ -134,5 +131,5 @@
else {
logger.debug("Parameter NewFolderName: {}", newFolderStr);
- connector.createFolder(type, currentFolderStr, newFolderStr);
+ connector.createFolder(type, context.getCurrentFolderStr(), newFolderStr);
getResponse = GetResponse.getOK();
}
@@ -141,6 +138,6 @@
String responseUrl = UtilsResponse.constructResponseUrl(
ConnectorHandler.getUserFilesPath(),
- "/".concat(typeStr.toLowerCase()), currentFolderStr);
- getResponse = getFoldersAndFiles(command, type, currentFolderStr, responseUrl);
+ "/".concat(context.getTypeStr().toLowerCase()), context.getCurrentFolderStr());
+ getResponse = getFoldersAndFiles(command, type, context.getCurrentFolderStr(), responseUrl);
} else
getResponse = GetResponse.getErrorUnknown();
@@ -200,4 +197,6 @@
public void doPost(final HttpServletRequest request, final HttpServletResponse response) throws IOException {
logger.debug("Entering Dispatcher#doPost");
+ Context context = ThreadLocalData.getContext();
+
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
@@ -205,18 +204,9 @@
PrintWriter out = response.getWriter();
- String commandStr = request.getParameter("Command");
- String typeStr = request.getParameter("Type");
- String currentFolderStr = request.getParameter("CurrentFolder");
-
- logger.debug("Parameter Command: {}", commandStr);
- logger.debug("Parameter Type: {}", typeStr);
- logger.debug("Parameter CurrentFolder: {}", currentFolderStr);
-
+ context.logBaseParameters();
+
// if this is a QuickUpload request, 'commandStr' and 'currentFolderStr'
// are empty
- if (Utils.isEmpty(commandStr) && Utils.isEmpty(currentFolderStr)) {
- commandStr = "QuickUpload";
- currentFolderStr = "/";
- }
+ boolean isQuickUpload = context.checkQuickUpload();
UploadResponse uploadResponse;
@@ -226,14 +216,14 @@
// check parameters
- else if (!CommandHandler.isValidForPost(commandStr))
+ else if (!CommandHandler.isValidForPost(context.getCommandStr()))
uploadResponse = UploadResponse.getErrorInvalidCommand();
- else if (!ResourceType.isValid(typeStr))
+ else if (!isQuickUpload && !ResourceType.isValid(context.getTypeStr()))
uploadResponse = UploadResponse.getErrorInvalidType();
- else if (!UtilsFile.isValidPath(currentFolderStr))
+ else if (!UtilsFile.isValidPath(context.getCurrentFolderStr()))
uploadResponse = UploadResponse.getErrorInvalidCurrentFolder();
else {
// call the Connector#fileUpload
- ResourceType type = ResourceType.getDefaultResourceType(typeStr);
+ ResourceType type = ResourceType.getDefaultResourceType(context.getTypeStr());
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
@@ -243,16 +233,22 @@
FileItem uplFile = items.get(0);
// check the extension
- if (!ExtensionsHandler.isAllowed(type, FilenameUtils.getExtension(uplFile.getName())))
+ if (!isQuickUpload && !ExtensionsHandler.isAllowed(type, FilenameUtils.getExtension(uplFile.getName())))
uploadResponse = UploadResponse.getErrorInvalidExtension();
- // Secure image check
- else if (type.equals(ResourceType.IMAGE) && ConnectorHandler.isSecureImageUploads() && !UtilsFile.isImage(uplFile.getInputStream())) {
+ // Secure image check (can't be done if QuickUpload)
+ else if (!isQuickUpload && type.equals(ResourceType.IMAGE) && ConnectorHandler.isSecureImageUploads() && !UtilsFile.isImage(uplFile.getInputStream())) {
uploadResponse = UploadResponse.getErrorInvalidExtension();
} else {
String fileName = FilenameUtils.getName(UtilsFile.sanitizeFileName(uplFile.getName()));
- String newFileName = connector.fileUpload(type, currentFolderStr, fileName, uplFile.getInputStream());
+ String newFileName;
+ if (isQuickUpload) {
+ newFileName = connector.quickUpload(fileName, uplFile.getInputStream());
+ } else {
+ newFileName = connector.fileUpload(type, context.getCurrentFolderStr(), fileName, uplFile.getInputStream());
+ }
// TODO I don't like this either
String responseUrl = UtilsResponse.constructResponseUrl(
- ConnectorHandler.getUserFilesPath(),
- "/".concat(typeStr.toLowerCase()), currentFolderStr);
+ ConnectorHandler.getUserFilesPath(),
+ (type == null) ? null : "/".concat(context.getTypeStr().toLowerCase()),
+ context.getCurrentFolderStr().concat("/").concat(newFileName));
if (fileName.equals(newFileName))
uploadResponse = new UploadResponse(UploadResponse.SC_OK, responseUrl);
Index: /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/impl/SimpleFileSystemConnector.java
===================================================================
--- /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/impl/SimpleFileSystemConnector.java (revision 2487)
+++ /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/impl/SimpleFileSystemConnector.java (revision 2488)
@@ -81,9 +81,21 @@
public String fileUpload(final ResourceType type, final String currentFolder, final String fileName, final InputStream inputStream)
throws InvalidCurrentFolderException, SecurityIssueException {
- String baseDir = ConnectorHandler.getDefaultUserFilesPath();
+ String baseDir = ConnectorHandler.getUserFilesPath();
File typeDir = getAndCreateResourceTypeDir(baseDir, type);
File currentDir = new File(typeDir, currentFolder);
if (!currentDir.exists())
- throw new InvalidCurrentFolderException();
+ throw new InvalidCurrentFolderException();
+ return upload(currentDir, fileName, inputStream);
+ }
+
+ /* (non-Javadoc)
+ * @see net.fckeditor.connector.Connector#quickUpload(java.lang.String, java.io.InputStream)
+ */
+ public String quickUpload(String fileName, final InputStream inputStream) throws SecurityIssueException {
+ File currentDir = new File(servletContext.getRealPath(ConnectorHandler.getUserFilesPath()));
+ return upload(currentDir, fileName, inputStream);
+ }
+
+ private String upload(final File currentDir, final String fileName, final InputStream inputStream) throws SecurityIssueException {
File newFile = new File(currentDir, fileName);
File fileToSave = UtilsFile.getUniqueFile(newFile.getAbsoluteFile());
@@ -96,5 +108,5 @@
return fileToSave.getName();
}
-
+
/* (non-Javadoc)
* @see net.fckeditor.connector.Connector#createFolder(net.fckeditor.handlers.ResourceType, java.lang.String, java.lang.String)
@@ -102,5 +114,5 @@
public void createFolder(final ResourceType type, final String currentFolder, final String newFolder)
throws InvalidCurrentFolderException, SecurityIssueException, InvalidFolderNameException, FolderAlreadyExistsException {
- String baseDir = ConnectorHandler.getDefaultUserFilesPath();
+ String baseDir = ConnectorHandler.getUserFilesPath();
File typeDir = getAndCreateResourceTypeDir(baseDir, type);
File currentDir = new File(typeDir, currentFolder);
@@ -123,5 +135,5 @@
public List