]> source.dussan.org Git - nextcloud-server.git/commitdiff
Apply share permission mask to all files obtained via shareinfo 18058/head
authorRoeland Jago Douma <roeland@famdouma.nl>
Thu, 21 Nov 2019 11:57:54 +0000 (12:57 +0100)
committerRoeland Jago Douma <roeland@famdouma.nl>
Tue, 26 Nov 2019 10:07:01 +0000 (11:07 +0100)
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
apps/files_sharing/lib/Controller/ShareInfoController.php
apps/files_sharing/tests/Controller/ShareInfoControllerTest.php

index 5ecf00321fcfd1d25092ea779b3963e8532dcffa..5aea32fe0640a9f6a8e49566575655b229fc8c28 100644 (file)
@@ -81,11 +81,7 @@ class ShareInfoController extends ApiController {
                        return new JSONResponse([], Http::STATUS_FORBIDDEN);
                }
 
-               $isWritable = $share->getPermissions() & (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_CREATE);
-               if (!$isWritable) {
-                       $this->addROWrapper();
-               }
-
+               $permissionMask = $share->getPermissions();
                $node = $share->getNode();
 
                if ($dir !== null && $node instanceof Folder) {
@@ -96,34 +92,34 @@ class ShareInfoController extends ApiController {
                        }
                }
 
-               return new JSONResponse($this->parseNode($node));
+               return new JSONResponse($this->parseNode($node, $permissionMask));
        }
 
-       private function parseNode(Node $node) {
+       private function parseNode(Node $node, int $permissionMask) {
                if ($node instanceof File) {
-                       return $this->parseFile($node);
+                       return $this->parseFile($node, $permissionMask);
                }
-               return $this->parseFolder($node);
+               return $this->parseFolder($node, $permissionMask);
        }
 
-       private function parseFile(File $file) {
-               return $this->format($file);
+       private function parseFile(File $file, int $permissionMask) {
+               return $this->format($file, $permissionMask);
        }
 
-       private function parseFolder(Folder $folder) {
-               $data = $this->format($folder);
+       private function parseFolder(Folder $folder, int $permissionMask) {
+               $data = $this->format($folder, $permissionMask);
 
                $data['children'] = [];
 
                $nodes = $folder->getDirectoryListing();
                foreach ($nodes as $node) {
-                       $data['children'][] = $this->parseNode($node);
+                       $data['children'][] = $this->parseNode($node, $permissionMask);
                }
 
                return $data;
        }
 
-       private function format(Node $node) {
+       private function format(Node $node, int $permissionMask) {
                $entry = [];
 
                $entry['id'] = $node->getId();
@@ -131,7 +127,7 @@ class ShareInfoController extends ApiController {
                $entry['mtime'] = $node->getMTime();
 
                $entry['name'] = $node->getName();
-               $entry['permissions'] = $node->getPermissions();
+               $entry['permissions'] = $node->getPermissions() & $permissionMask;
                $entry['mimetype'] = $node->getMimetype();
                $entry['size'] = $node->getSize();
                $entry['type'] = $node->getType();
@@ -139,13 +135,4 @@ class ShareInfoController extends ApiController {
 
                return $entry;
        }
-
-       protected function addROWrapper() {
-               // FIXME: should not add storage wrappers outside of preSetup, need to find a better way
-               $previousLog = \OC\Files\Filesystem::logWarningWhenAddingStorageWrapper(false);
-               \OC\Files\Filesystem::addStorageWrapper('readonly', function ($mountPoint, $storage) {
-                       return new \OC\Files\Storage\Wrapper\PermissionsMask(array('storage' => $storage, 'mask' => \OCP\Constants::PERMISSION_READ + \OCP\Constants::PERMISSION_SHARE));
-               });
-               \OC\Files\Filesystem::logWarningWhenAddingStorageWrapper($previousLog);
-       }
 }
index cd548ecfa21580e6f8838bc75abf0a54c2c9009c..627990a2f905ddb996d88304ae8fc586750582c6 100644 (file)
@@ -173,9 +173,6 @@ class ShareInfoControllerTest extends TestCase {
                        ->with($share, 'pass')
                        ->willReturn(true);
 
-               $this->controller->expects($this->once())
-                       ->method('addROWrapper');
-
                $expected = new JSONResponse([
                        'id' => 42,
                        'parentId' => 41,
@@ -285,7 +282,7 @@ class ShareInfoControllerTest extends TestCase {
                                                        'parentId' => 43,
                                                        'mtime' => 1339,
                                                        'name' => 'file',
-                                                       'permissions' => 9,
+                                                       'permissions' => 1,
                                                        'mimetype' => 'mime/type',
                                                        'size' => 3,
                                                        'type' => 'file',