Пример #1
0
 /**
  * @brief Get the source file path and the permissions granted for a shared file
  * @param string Shared target file path
  * @return Returns array with the keys path and permissions or false if not found
  */
 private function getFile($target)
 {
     $target = '/' . $target;
     $target = rtrim($target, '/');
     if (isset($this->files[$target])) {
         return $this->files[$target];
     } else {
         $pos = strpos($target, '/', 1);
         // Get shared folder name
         if ($pos !== false) {
             $folder = substr($target, 0, $pos);
             if (isset($this->files[$folder])) {
                 $file = $this->files[$folder];
             } else {
                 $file = OCP\Share::getItemSharedWith('folder', $folder, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
             }
             if ($file) {
                 $this->files[$target]['path'] = $file['path'] . substr($target, strlen($folder));
                 $this->files[$target]['permissions'] = $file['permissions'];
                 return $this->files[$target];
             }
         } else {
             $file = OCP\Share::getItemSharedWith('file', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
             if ($file) {
                 $this->files[$target] = $file;
                 return $this->files[$target];
             }
         }
         OCP\Util::writeLog('files_sharing', 'File source not found for: ' . $target, OCP\Util::ERROR);
         return false;
     }
 }
Пример #2
0
 /**
  * get the content of a directory
  * @param dir $directory path under datadirectory
  */
 public static function getDirectoryContent($directory, $mimetype_filter = '')
 {
     $directory = OC_Filesystem::normalizePath($directory);
     if ($directory == '/') {
         $directory = '';
     }
     $files = array();
     if (($directory == '/Shared' || substr($directory, 0, 8) == '/Shared/') && OC_App::isEnabled('files_sharing')) {
         if ($directory == '/Shared') {
             $files = OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP, array('folder' => $directory, 'mimetype_filter' => $mimetype_filter));
         } else {
             $pos = strpos($directory, '/', 8);
             // Get shared folder name
             if ($pos !== false) {
                 $itemTarget = substr($directory, 7, $pos - 7);
             } else {
                 $itemTarget = substr($directory, 7);
             }
             $files = OCP\Share::getItemSharedWith('folder', $itemTarget, OC_Share_Backend_File::FORMAT_FILE_APP, array('folder' => $directory, 'mimetype_filter' => $mimetype_filter));
         }
     } else {
         $files = OC_FileCache::getFolderContent($directory, false, $mimetype_filter);
         foreach ($files as &$file) {
             $file['directory'] = $directory;
             $file['type'] = $file['mimetype'] == 'httpd/unix-directory' ? 'dir' : 'file';
             $permissions = OCP\Share::PERMISSION_READ;
             // NOTE: Remove check when new encryption is merged
             if (!$file['encrypted']) {
                 $permissions |= OCP\Share::PERMISSION_SHARE;
             }
             if ($file['type'] == 'dir' && $file['writable']) {
                 $permissions |= OCP\Share::PERMISSION_CREATE;
             }
             if ($file['writable']) {
                 $permissions |= OCP\Share::PERMISSION_UPDATE | OCP\Share::PERMISSION_DELETE;
             }
             $file['permissions'] = $permissions;
         }
         if ($directory == '' && OC_App::isEnabled('files_sharing')) {
             // Add 'Shared' folder
             $files = array_merge($files, OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP_ROOT));
         }
     }
     usort($files, "fileCmp");
     //TODO: remove this once ajax is merged
     return $files;
 }
Пример #3
0
 public function testShareWithGroupAndUserBothHaveTheSameId()
 {
     $this->shareUserTestFileWithUser($this->user1, $this->groupAndUser);
     OC_User::setUserId($this->groupAndUser);
     $this->assertEquals(array('test.txt'), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), '"groupAndUser"-User does not see the file but it was shared with him');
     OC_User::setUserId($this->user2);
     $this->assertEquals(array(), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), 'User2 sees test.txt but it was only shared with the user "groupAndUser" and not with group');
     OC_User::setUserId($this->user1);
     $this->assertTrue(OCP\Share::unshareAll('test', 'test.txt'));
     $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->groupAndUser, \OCP\Constants::PERMISSION_READ), 'Failed asserting that user 1 successfully shared text.txt with group 1.');
     OC_User::setUserId($this->groupAndUser);
     $this->assertEquals(array(), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), '"groupAndUser"-User sees test.txt but it was only shared with the group "groupAndUser" and not with the user');
     OC_User::setUserId($this->user2);
     $this->assertEquals(array('test.txt'), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), 'User2 does not see test.txt but it was shared with the group "groupAndUser"');
     OC_User::setUserId($this->user1);
     $this->assertTrue(OCP\Share::unshareAll('test', 'test.txt'));
 }
Пример #4
0
 * later.
 * See the COPYING-README file.
 */
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('gallery');
session_write_close();
list($owner, $img) = explode('/', $_GET['file'], 2);
if ($owner !== OC_User::getUser()) {
    \OC\Files\Filesystem::initMountPoints($owner);
    $parts = explode('/', $img, 3);
    if (count($parts) === 3) {
        list($shareId, , $img) = $parts;
    } else {
        $shareId = $parts[0];
        $img = '';
    }
    if (OCP\Share::getItemSharedWith('gallery', $shareId)) {
        $ownerView = new \OC\Files\View('/' . $owner . '/files');
        $sharedGallery = $ownerView->getPath($shareId);
        if ($img) {
            $img = $sharedGallery . '/' . $img;
        } else {
            $img = $sharedGallery;
        }
    } else {
        OC_JSON::error('no such file');
        die;
    }
}
$image = new \OCA\Gallery\AlbumThumbnail('/' . $img, $owner);
$image->show();
Пример #5
0
/**
 * Copyright (c) 2012 Robin Appelman <*****@*****.**>
 * This file is licensed under the Affero General Public License version 3 or
 * later.
 * See the COPYING-README file.
 */
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('gallery');
$split = explode('/', $_GET['gallery'], 2);
$owner = $split[0];
$gallery = array_key_exists(1, $split) ? $split[1] : NULL;
$ownerView = new \OC\Files\View('/' . $owner . '/files');
if ($owner !== OCP\User::getUser()) {
    \OC\Files\Filesystem::initMountPoints($owner);
    list($shareId, , $gallery) = explode('/', $gallery, 3);
    if (OCP\Share::getItemSharedWith('file', $shareId)) {
        $sharedGallery = $ownerView->getPath($shareId);
        if ($gallery) {
            $gallery = $sharedGallery . '/' . $gallery;
        } else {
            $gallery = $sharedGallery;
        }
    } else {
        OCP\JSON::error(array('message' => 'no such file'));
    }
}
$meta = $ownerView->getFileInfo($gallery);
$data = array();
$data['fileid'] = $meta['fileid'];
$data['permissions'] = $meta['permissions'];
OCP\JSON::setContentTypeHeader();
Пример #6
0
 public function getOwner($target)
 {
     $shared_item = OCP\Share::getItemSharedWith('folder', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
     if ($shared_item) {
         return $shared_item[0]["uid_owner"];
     }
     return null;
 }
Пример #7
0
 public function testShareWithGroup()
 {
     // Invalid shares
     $message = 'Sharing test.txt failed, because the group foobar does not exist';
     try {
         OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, 'foobar', OCP\PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     $policy = OC_Appconfig::getValue('core', 'shareapi_only_share_with_group_members', 'no');
     OC_Appconfig::setValue('core', 'shareapi_only_share_with_group_members', 'yes');
     $message = 'Sharing test.txt failed, because ' . $this->user1 . ' is not a member of the group ' . $this->group2;
     try {
         OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group2, OCP\PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     OC_Appconfig::setValue('core', 'shareapi_only_share_with_group_members', $policy);
     // Valid share
     $this->shareUserOneTestFileWithGroupOne();
     // Attempt to share again
     OC_User::setUserId($this->user1);
     $message = 'Sharing test.txt failed, because this item is already shared with ' . $this->group1;
     try {
         OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     // Attempt to share back to owner of group share
     OC_User::setUserId($this->user2);
     $message = 'Sharing test.txt failed, because the user ' . $this->user1 . ' is the original sharer';
     try {
         OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     // Attempt to share back to group
     $message = 'Sharing test.txt failed, because this item is already shared with ' . $this->group1;
     try {
         OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     // Attempt to share back to member of group
     $message = 'Sharing test.txt failed, because this item is already shared with ' . $this->user3;
     try {
         OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     // Unshare
     OC_User::setUserId($this->user1);
     $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
     // Valid share with same person - user then group
     $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_DELETE | OCP\PERMISSION_SHARE));
     $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE));
     OC_User::setUserId($this->user2);
     $this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE | OCP\PERMISSION_DELETE | OCP\PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
     OC_User::setUserId($this->user3);
     $this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
     // Valid reshare
     OC_User::setUserId($this->user2);
     $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\PERMISSION_READ));
     OC_User::setUserId($this->user4);
     $this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     // Unshare from user only
     OC_User::setUserId($this->user1);
     $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
     OC_User::setUserId($this->user2);
     $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
     OC_User::setUserId($this->user4);
     $this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     // Valid share with same person - group then user
     OC_User::setUserId($this->user1);
     $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_DELETE));
     OC_User::setUserId($this->user2);
     $this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE | OCP\PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
     // Unshare from group only
     OC_User::setUserId($this->user1);
     $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
     OC_User::setUserId($this->user2);
     $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
     // Attempt user specific target conflict
     OC_User::setUserId($this->user3);
     $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE));
     OC_User::setUserId($this->user2);
     $to_test = OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET);
     $this->assertEquals(2, count($to_test));
     $this->assertTrue(in_array('test.txt', $to_test));
     $this->assertTrue(in_array('test1.txt', $to_test));
     // Valid reshare
     $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE));
     OC_User::setUserId($this->user4);
     $this->assertEquals(array('test1.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     // Remove user from group
     OC_Group::removeFromGroup($this->user2, $this->group1);
     OC_User::setUserId($this->user2);
     $this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     OC_User::setUserId($this->user4);
     $this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     // Add user to group
     OC_Group::addToGroup($this->user4, $this->group1);
     $this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     // Unshare from self
     $this->assertTrue(OCP\Share::unshareFromSelf('test', 'test.txt'));
     $this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     OC_User::setUserId($this->user2);
     $this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     // Unshare from self via source
     OC_User::setUserId($this->user1);
     $this->assertTrue(OCP\Share::unshareFromSelf('test', 'share.txt', true));
     $this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     // Remove group
     OC_Group::deleteGroup($this->group1);
     OC_User::setUserId($this->user4);
     $this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
     OC_User::setUserId($this->user3);
     $this->assertEquals(array(), OCP\Share::getItemsShared('test'));
 }