Esempio n. 1
0
 /**
  * unshare complete storage, also the grouped shares
  *
  * @return bool
  */
 public function unshareStorage()
 {
     $result = true;
     if (!empty($this->share['grouped'])) {
         foreach ($this->share['grouped'] as $share) {
             $result = $result && \OCP\Share::unshareFromSelf($share['item_type'], $share['file_target']);
         }
     }
     $result = $result && \OCP\Share::unshareFromSelf($this->getItemType(), $this->getMountPoint());
     return $result;
 }
Esempio n. 2
0
 public function testShareWithUser()
 {
     // Invalid shares
     $message = 'Sharing test.txt failed, because you can not share with yourself';
     try {
         \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user1, \OCP\Constants::PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (\Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     $message = 'Sharing test.txt failed, because the user foobar does not exist';
     try {
         \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, 'foobar', \OCP\Constants::PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (\Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     $message = 'Sharing foobar failed, because the sharing backend for test could not find its source';
     try {
         \OCP\Share::shareItem('test', 'foobar', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (\Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     // Valid share
     $this->shareUserOneTestFileWithUserTwo();
     // Attempt to share again
     \OC_User::setUserId($this->user1);
     $message = 'Sharing test.txt failed, because this item is already shared with ' . $this->user2;
     try {
         \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (\Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     // Attempt to share back
     \OC_User::setUserId($this->user2);
     $message = 'Sharing 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\Constants::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_USER, $this->user2));
     // Attempt reshare without share permission
     $this->assertTrue(\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
     \OC_User::setUserId($this->user2);
     $message = 'Sharing test.txt failed, because resharing is not allowed';
     try {
         \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ);
         $this->fail('Exception was expected: ' . $message);
     } catch (\Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     // Owner grants share and update permission
     \OC_User::setUserId($this->user1);
     $this->assertTrue(\OCP\Share::setPermissions('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_SHARE));
     // Attempt reshare with escalated permissions
     \OC_User::setUserId($this->user2);
     $message = 'Sharing test.txt failed, because the permissions exceed permissions granted to ' . $this->user2;
     try {
         \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE);
         $this->fail('Exception was expected: ' . $message);
     } catch (\Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     // Valid reshare
     $this->assertTrue(\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE));
     $this->assertEquals(array('test.txt'), \OCP\Share::getItemShared('test', 'test.txt', Backend::FORMAT_SOURCE));
     \OC_User::setUserId($this->user3);
     $this->assertEquals(array('test.txt'), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_SOURCE));
     $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_PERMISSIONS));
     // Attempt to escalate permissions
     \OC_User::setUserId($this->user2);
     $message = 'Setting permissions for test.txt failed, because the permissions exceed permissions granted to ' . $this->user2;
     try {
         \OCP\Share::setPermissions('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE);
         $this->fail('Exception was expected: ' . $message);
     } catch (\Exception $exception) {
         $this->assertEquals($message, $exception->getMessage());
     }
     // Remove update permission
     \OC_User::setUserId($this->user1);
     $this->assertTrue(\OCP\Share::setPermissions('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
     \OC_User::setUserId($this->user2);
     $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_PERMISSIONS));
     \OC_User::setUserId($this->user3);
     $this->assertEquals(array(\OCP\Constants::PERMISSION_READ), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_PERMISSIONS));
     // Remove share permission
     \OC_User::setUserId($this->user1);
     $this->assertTrue(\OCP\Share::setPermissions('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
     \OC_User::setUserId($this->user2);
     $this->assertEquals(array(\OCP\Constants::PERMISSION_READ), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_PERMISSIONS));
     \OC_User::setUserId($this->user3);
     $this->assertSame(array(), \OCP\Share::getItemSharedWith('test', 'test.txt'));
     // Reshare again, and then have owner unshare
     \OC_User::setUserId($this->user1);
     $this->assertTrue(\OCP\Share::setPermissions('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
     \OC_User::setUserId($this->user2);
     $this->assertTrue(\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ));
     \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->assertSame(array(), \OCP\Share::getItemSharedWith('test', 'test.txt'));
     \OC_User::setUserId($this->user3);
     $this->assertSame(array(), \OCP\Share::getItemSharedWith('test', 'test.txt'));
     // Attempt target conflict
     \OC_User::setUserId($this->user1);
     $this->assertTrue(\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
     \OC_User::setUserId($this->user3);
     $this->assertTrue(\OCP\Share::shareItem('test', 'share.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
     \OC_User::setUserId($this->user2);
     $to_test = \OCP\Share::getItemsSharedWith('test', 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));
     // Unshare from self
     $this->assertTrue(\OCP\Share::unshareFromSelf('test', 'test.txt'));
     $this->assertEquals(array('test1.txt'), \OCP\Share::getItemsSharedWith('test', Backend::FORMAT_TARGET));
     // Unshare from self via source
     $this->assertTrue(\OCP\Share::unshareFromSelf('test', 'share.txt', true));
     $this->assertEquals(array(), \OCP\Share::getItemsSharedWith('test', Backend::FORMAT_TARGET));
     \OC_User::setUserId($this->user1);
     $this->assertTrue(\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
     \OC_User::setUserId($this->user3);
     $this->assertTrue(\OCP\Share::shareItem('test', 'share.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
     \OC_User::setUserId($this->user2);
     $to_test = \OCP\Share::getItemsSharedWith('test', 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));
     // Remove user
     \OC_User::setUserId($this->user1);
     $user = \OC::$server->getUserManager()->get($this->user1);
     if ($user !== null) {
         $user->delete();
     }
     \OC_User::setUserId($this->user2);
     $this->assertEquals(array('test1.txt'), \OCP\Share::getItemsSharedWith('test', Backend::FORMAT_TARGET));
 }
Esempio n. 3
0
 /**
  * {@inheritDoc}
  */
 public function delete($privateUri, $userId)
 {
     list($itemType, $itemTarget) = explode('::', $privateUri, 1);
     if ($itemType === 'calendar') {
         return Share::unshareFromSelf('calendar', $itemTarget);
     } elseif ($itemType === 'object') {
         $calendars = Share::getItemsShared($itemType, ShareTypes::GROUPED);
         /** @var ICalendar $calendar */
         foreach ($calendars as $calendar) {
             if ($calendar->getPrivateUri() !== $privateUri) {
                 continue;
             }
             $objects = $calendar['objects'];
             foreach ($objects as $object) {
                 Share::unshareFromSelf('object', $object['shareItem']['item_source']);
             }
         }
         return true;
     } else {
         throw new BackendUtils\DoesNotExistException();
     }
 }
Esempio n. 4
0
 public function unlink($path)
 {
     // Delete the file if DELETE permission is granted
     if ($source = $this->getSourcePath($path)) {
         if ($this->isDeletable($path)) {
             list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
             return $storage->unlink($internalPath);
         } else {
             if (dirname($path) == '/' || dirname($path) == '.') {
                 // Unshare the file from the user if in the root of the Shared folder
                 if ($this->is_dir($path)) {
                     $itemType = 'folder';
                 } else {
                     $itemType = 'file';
                 }
                 return \OCP\Share::unshareFromSelf($itemType, $path);
             }
         }
     }
     return false;
 }
Esempio n. 5
0
 /**
  * Remove the mount points
  *
  * @return bool
  */
 public function removeMount()
 {
     $mountManager = \OC\Files\Filesystem::getMountManager();
     $storage = $this->getStorage();
     $result = \OCP\Share::unshareFromSelf($storage->getItemType(), $storage->getMountPoint());
     $mountManager->removeMount($this->mountPoint);
     return $result;
 }