Fix mimetype detection on public uploads for the workflow engine

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2017-03-06 12:04:54 +01:00
parent d2687a0f1b
commit 2203bdb4ff
No known key found for this signature in database
GPG Key ID: E166FD8976B3BAC8
1 changed files with 20 additions and 1 deletions

View File

@ -76,13 +76,22 @@ class FileMimeType extends AbstractStringCheck {
return $this->mimeType[$this->storage->getId()][$this->path]; return $this->mimeType[$this->storage->getId()][$this->path];
} }
$this->mimeType[$this->storage->getId()][$this->path] = '';
if ($this->isWebDAVRequest()) { if ($this->isWebDAVRequest()) {
if ($this->request->getMethod() === 'PUT') { if ($this->request->getMethod() === 'PUT') {
$path = $this->request->getPathInfo(); $path = $this->request->getPathInfo();
$this->mimeType[$this->storage->getId()][$this->path] = $this->mimeTypeDetector->detectPath($path); $this->mimeType[$this->storage->getId()][$this->path] = $this->mimeTypeDetector->detectPath($path);
return $this->mimeType[$this->storage->getId()][$this->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'])) { if (in_array($this->request->getMethod(), ['POST', 'PUT'])) {
@ -159,4 +168,14 @@ class FileMimeType extends AbstractStringCheck {
strpos($this->request->getPathInfo(), '/dav/files/') === 0 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
);
}
} }