diff --git a/apps/dav/lib/Files/Sharing/FilesDropPlugin.php b/apps/dav/lib/Files/Sharing/FilesDropPlugin.php index b364c4ebbfc10..69328d42272c6 100644 --- a/apps/dav/lib/Files/Sharing/FilesDropPlugin.php +++ b/apps/dav/lib/Files/Sharing/FilesDropPlugin.php @@ -62,14 +62,12 @@ public function beforeMethod(RequestInterface $request, ResponseInterface $respo $path = array_pop($path); // Extract the attributes for the file request + $isFileRequest = false; $attributes = $this->share->getAttributes(); - if ($attributes === null) { - return; - } - - // Prepare file request $nickName = $request->getHeader('X-NC-Nickname'); - $isFileRequest = $attributes->getAttribute('fileRequest', 'enabled') === true; + if ($attributes !== null) { + $isFileRequest = $attributes->getAttribute('fileRequest', 'enabled') === true; + } // We need a valid nickname for file requests if ($isFileRequest && ($nickName == null || trim($nickName) === '')) { diff --git a/build/integration/features/bootstrap/FilesDropContext.php b/build/integration/features/bootstrap/FilesDropContext.php index b611e55ea0f21..1b9d598645fa1 100644 --- a/build/integration/features/bootstrap/FilesDropContext.php +++ b/build/integration/features/bootstrap/FilesDropContext.php @@ -15,7 +15,7 @@ class FilesDropContext implements Context, SnippetAcceptingContext { /** * @When Dropping file :path with :content */ - public function droppingFileWith($path, $content) { + public function droppingFileWith($path, $content, $nickName = null) { $client = new Client(); $options = []; if (count($this->lastShareData->data->element) > 0) { @@ -25,11 +25,16 @@ public function droppingFileWith($path, $content) { } $base = substr($this->baseUrl, 0, -4); - $fullUrl = $base . "/public.php/dav/files/$token/$path"; + $fullUrl = str_replace('//', '/', $base . "/public.php/dav/files/$token/$path"); $options['headers'] = [ 'X-REQUESTED-WITH' => 'XMLHttpRequest' ]; + + if ($nickName) { + $options['headers']['X-NC-NICKNAME'] = $nickName; + } + $options['body'] = \GuzzleHttp\Psr7\Utils::streamFor($content); try { @@ -38,6 +43,15 @@ public function droppingFileWith($path, $content) { $this->response = $e->getResponse(); } } + + + /** + * @When Dropping file :path with :content as :nickName + */ + public function droppingFileWithAs($path, $content, $nickName) { + $this->droppingFileWith($path, $content, $nickName); + } + /** * @When Creating folder :folder in drop @@ -52,7 +66,7 @@ public function creatingFolderInDrop($folder) { } $base = substr($this->baseUrl, 0, -4); - $fullUrl = $base . "/public.php/dav/files/$token/$folder"; + $fullUrl = str_replace('//', '/', $base . "/public.php/dav/files/$token/$folder"); $options['headers'] = [ 'X-REQUESTED-WITH' => 'XMLHttpRequest' diff --git a/build/integration/filesdrop_features/filesdrop.feature b/build/integration/filesdrop_features/filesdrop.feature index 211f780fb1c66..2c9156dea0268 100644 --- a/build/integration/filesdrop_features/filesdrop.feature +++ b/build/integration/filesdrop_features/filesdrop.feature @@ -59,3 +59,34 @@ Feature: FilesDrop | permissions | 4 | When Creating folder "folder" in drop Then the HTTP status code should be "405" + + Scenario: Files request drop + Given user "user0" exists + And As an "user0" + And user "user0" created a folder "/drop" + And as "user0" creating a share with + | path | drop | + | shareType | 4 | + | permissions | 4 | + | attributes | [{"scope":"fileRequest","key":"enabled","value":true}] | + | shareWith | | + When Dropping file "/folder/a.txt" with "abc" as "Alice" + And Downloading file "/drop/Alice/a.txt" + Then Downloaded content should be "abc" + + Scenario: Put file same file multiple times via files drop + Given user "user0" exists + And As an "user0" + And user "user0" created a folder "/drop" + And as "user0" creating a share with + | path | drop | + | shareType | 4 | + | permissions | 4 | + | attributes | [{"scope":"fileRequest","key":"enabled","value":true}] | + | shareWith | | + When Dropping file "/folder/a.txt" with "abc" as "Mallory" + And Dropping file "/folder/a.txt" with "def" as "Mallory" + And Downloading file "/drop/Mallory/a.txt" + Then Downloaded content should be "abc" + And Downloading file "/drop/Mallory/a (2).txt" + Then Downloaded content should be "def"