From e8be73f485a43e7a293a4878388a10e06f692e97 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 6 Mar 2017 12:04:54 +0100 Subject: [PATCH] Fix mimetype detection on public uploads for the workflow engine Signed-off-by: Joas Schilling --- .../workflowengine/lib/Check/FileMimeType.php | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/apps/workflowengine/lib/Check/FileMimeType.php b/apps/workflowengine/lib/Check/FileMimeType.php index 4a985840e6..8608fffd4e 100644 --- a/apps/workflowengine/lib/Check/FileMimeType.php +++ b/apps/workflowengine/lib/Check/FileMimeType.php @@ -76,13 +76,22 @@ class FileMimeType extends AbstractStringCheck { return $this->mimeType[$this->storage->getId()][$this->path]; } - $this->mimeType[$this->storage->getId()][$this->path] = ''; if ($this->isWebDAVRequest()) { if ($this->request->getMethod() === 'PUT') { $path = $this->request->getPathInfo(); $this->mimeType[$this->storage->getId()][$this->path] = $this->mimeTypeDetector->detectPath($path); return $this->mimeType[$this->storage->getId()][$this->path]; } + } else if ($this->isPublicWebDAVRequest()) { + if ($this->request->getMethod() === 'PUT') { + $path = $this->request->getPathInfo(); + if (strpos($path, '/webdav/') === 0) { + $path = substr($path, strlen('/webdav')); + } + $path = $this->path . $path; + $this->mimeType[$this->storage->getId()][$path] = $this->mimeTypeDetector->detectPath($path); + return $this->mimeType[$this->storage->getId()][$path]; + } } if (in_array($this->request->getMethod(), ['POST', 'PUT'])) { @@ -159,4 +168,14 @@ class FileMimeType extends AbstractStringCheck { strpos($this->request->getPathInfo(), '/dav/files/') === 0 ); } + + /** + * @return bool + */ + protected function isPublicWebDAVRequest() { + return substr($this->request->getScriptName(), 0 - strlen('/public.php')) === '/public.php' && ( + $this->request->getPathInfo() === '/webdav' || + strpos($this->request->getPathInfo(), '/webdav/') === 0 + ); + } }