Exemplo n.º 1
0
 /**
  * Determine permissions for a given file path
  * @param string $path
  * @return int
  */
 function getPermissions($path)
 {
     // add read permissions
     $permissions = \OCP\PERMISSION_READ;
     // get directory
     $fileInfo = pathinfo($path);
     $dir = $fileInfo['dirname'] . '/';
     // add update permissions
     if (Filesystem::isUpdatable($dir)) {
         $permissions |= \OCP\PERMISSION_UPDATE;
     }
     // add delete permissions
     if (Filesystem::isDeletable($dir)) {
         $permissions |= \OCP\PERMISSION_DELETE;
     }
     // add share permissions
     if (Filesystem::isSharable($dir)) {
         $permissions |= \OCP\PERMISSION_SHARE;
     }
     // return
     return $permissions;
 }
Exemplo n.º 2
0
 /**
  * Share an item with a user, group, or via private link
  * @param string $itemType
  * @param string $itemSource
  * @param int $shareType SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK
  * @param string $shareWith User or group the item is being shared with
  * @param int $permissions CRUDS
  * @param string $itemSourceName
  * @param \DateTime $expirationDate
  * @param bool $passwordChanged
  * @return boolean|string Returns true on success or false on failure, Returns token on success for links
  * @throws \OC\HintException when the share type is remote and the shareWith is invalid
  * @throws \Exception
  */
 public static function shareItem($itemType, $itemSource, $shareType, $shareWith, $permissions, $itemSourceName = null, \DateTime $expirationDate = null, $passwordChanged = null)
 {
     $backend = self::getBackend($itemType);
     $l = \OC::$server->getL10N('lib');
     if ($backend->isShareTypeAllowed($shareType) === false) {
         $message = 'Sharing %s failed, because the backend does not allow shares from type %i';
         $message_t = $l->t('Sharing %s failed, because the backend does not allow shares from type %i', array($itemSourceName, $shareType));
         \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName, $shareType), \OCP\Util::DEBUG);
         throw new \Exception($message_t);
     }
     $uidOwner = \OC_User::getUser();
     $shareWithinGroupOnly = self::shareWithGroupMembersOnly();
     if (is_null($itemSourceName)) {
         $itemSourceName = $itemSource;
     }
     $itemName = $itemSourceName;
     // check if file can be shared
     if ($itemType === 'file' or $itemType === 'folder') {
         $path = \OC\Files\Filesystem::getPath($itemSource);
         $itemName = $path;
         // verify that the file exists before we try to share it
         if (!$path) {
             $message = 'Sharing %s failed, because the file does not exist';
             $message_t = $l->t('Sharing %s failed, because the file does not exist', array($itemSourceName));
             \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName), \OCP\Util::DEBUG);
             throw new \Exception($message_t);
         }
         // verify that the user has share permission
         if (!\OC\Files\Filesystem::isSharable($path)) {
             $message = 'You are not allowed to share %s';
             $message_t = $l->t('You are not allowed to share %s', [$path]);
             \OCP\Util::writeLog('OCP\\Share', sprintf($message, $path), \OCP\Util::DEBUG);
             throw new \Exception($message_t);
         }
     }
     //verify that we don't share a folder which already contains a share mount point
     if ($itemType === 'folder') {
         $path = '/' . $uidOwner . '/files' . \OC\Files\Filesystem::getPath($itemSource) . '/';
         $mountManager = \OC\Files\Filesystem::getMountManager();
         $mounts = $mountManager->findIn($path);
         foreach ($mounts as $mount) {
             if ($mount->getStorage()->instanceOfStorage('\\OCA\\Files_Sharing\\ISharedStorage')) {
                 $message = 'Sharing "' . $itemSourceName . '" failed, because it contains files shared with you!';
                 \OCP\Util::writeLog('OCP\\Share', $message, \OCP\Util::DEBUG);
                 throw new \Exception($message);
             }
         }
     }
     // single file shares should never have delete permissions
     if ($itemType === 'file') {
         $permissions = (int) $permissions & ~\OCP\Constants::PERMISSION_DELETE;
     }
     //Validate expirationDate
     if ($expirationDate !== null) {
         try {
             /*
              * Reuse the validateExpireDate.
              * We have to pass time() since the second arg is the time
              * the file was shared, since it is not shared yet we just use
              * the current time.
              */
             $expirationDate = self::validateExpireDate($expirationDate->format('Y-m-d'), time(), $itemType, $itemSource);
         } catch (\Exception $e) {
             throw new \OC\HintException($e->getMessage(), $e->getMessage(), 404);
         }
     }
     // Verify share type and sharing conditions are met
     if ($shareType === self::SHARE_TYPE_USER) {
         if ($shareWith == $uidOwner) {
             $message = 'Sharing %s failed, because you can not share with yourself';
             $message_t = $l->t('Sharing %s failed, because you can not share with yourself', [$itemName]);
             \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName), \OCP\Util::DEBUG);
             throw new \Exception($message_t);
         }
         if (!\OC_User::userExists($shareWith)) {
             $message = 'Sharing %s failed, because the user %s does not exist';
             $message_t = $l->t('Sharing %s failed, because the user %s does not exist', array($itemSourceName, $shareWith));
             \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OCP\Util::DEBUG);
             throw new \Exception($message_t);
         }
         if ($shareWithinGroupOnly) {
             $inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith));
             if (empty($inGroup)) {
                 $message = 'Sharing %s failed, because the user ' . '%s is not a member of any groups that %s is a member of';
                 $message_t = $l->t('Sharing %s failed, because the user %s is not a member of any groups that %s is a member of', array($itemName, $shareWith, $uidOwner));
                 \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemName, $shareWith, $uidOwner), \OCP\Util::DEBUG);
                 throw new \Exception($message_t);
             }
         }
         // Check if the item source is already shared with the user, either from the same owner or a different user
         if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
             // Only allow the same share to occur again if it is the same
             // owner and is not a user share, this use case is for increasing
             // permissions for a specific user
             if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
                 $message = 'Sharing %s failed, because this item is already shared with %s';
                 $message_t = $l->t('Sharing %s failed, because this item is already shared with %s', array($itemSourceName, $shareWith));
                 \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OCP\Util::DEBUG);
                 throw new \Exception($message_t);
             }
         }
         if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_USER, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
             // Only allow the same share to occur again if it is the same
             // owner and is not a user share, this use case is for increasing
             // permissions for a specific user
             if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
                 $message = 'Sharing %s failed, because this item is already shared with user %s';
                 $message_t = $l->t('Sharing %s failed, because this item is already shared with user %s', array($itemSourceName, $shareWith));
                 \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OCP\Util::ERROR);
                 throw new \Exception($message_t);
             }
         }
     } else {
         if ($shareType === self::SHARE_TYPE_GROUP) {
             if (!\OC_Group::groupExists($shareWith)) {
                 $message = 'Sharing %s failed, because the group %s does not exist';
                 $message_t = $l->t('Sharing %s failed, because the group %s does not exist', array($itemSourceName, $shareWith));
                 \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OCP\Util::DEBUG);
                 throw new \Exception($message_t);
             }
             if ($shareWithinGroupOnly && !\OC_Group::inGroup($uidOwner, $shareWith)) {
                 $message = 'Sharing %s failed, because ' . '%s is not a member of the group %s';
                 $message_t = $l->t('Sharing %s failed, because %s is not a member of the group %s', array($itemSourceName, $uidOwner, $shareWith));
                 \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName, $uidOwner, $shareWith), \OCP\Util::DEBUG);
                 throw new \Exception($message_t);
             }
             // Check if the item source is already shared with the group, either from the same owner or a different user
             // The check for each user in the group is done inside the put() function
             if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
                 // Only allow the same share to occur again if it is the same
                 // owner and is not a group share, this use case is for increasing
                 // permissions for a specific user
                 if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
                     $message = 'Sharing %s failed, because this item is already shared with %s';
                     $message_t = $l->t('Sharing %s failed, because this item is already shared with %s', array($itemSourceName, $shareWith));
                     \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OCP\Util::DEBUG);
                     throw new \Exception($message_t);
                 }
             }
             // Convert share with into an array with the keys group and users
             $group = $shareWith;
             $shareWith = array();
             $shareWith['group'] = $group;
             $shareWith['users'] = array_diff(\OC_Group::usersInGroup($group), array($uidOwner));
         } else {
             if ($shareType === self::SHARE_TYPE_LINK) {
                 $updateExistingShare = false;
                 if (\OC::$server->getAppConfig()->getValue('core', 'shareapi_allow_links', 'yes') == 'yes') {
                     // when updating a link share
                     // FIXME Don't delete link if we update it
                     if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1)) {
                         // remember old token
                         $oldToken = $checkExists['token'];
                         $oldPermissions = $checkExists['permissions'];
                         //delete the old share
                         Helper::delete($checkExists['id']);
                         $updateExistingShare = true;
                     }
                     if ($passwordChanged === null) {
                         // Generate hash of password - same method as user passwords
                         if (is_string($shareWith) && $shareWith !== '') {
                             self::verifyPassword($shareWith);
                             $shareWith = \OC::$server->getHasher()->hash($shareWith);
                         } else {
                             // reuse the already set password, but only if we change permissions
                             // otherwise the user disabled the password protection
                             if ($checkExists && (int) $permissions !== (int) $oldPermissions) {
                                 $shareWith = $checkExists['share_with'];
                             }
                         }
                     } else {
                         if ($passwordChanged === true) {
                             if (is_string($shareWith) && $shareWith !== '') {
                                 self::verifyPassword($shareWith);
                                 $shareWith = \OC::$server->getHasher()->hash($shareWith);
                             }
                         } else {
                             if ($updateExistingShare) {
                                 $shareWith = $checkExists['share_with'];
                             }
                         }
                     }
                     if (\OCP\Util::isPublicLinkPasswordRequired() && empty($shareWith)) {
                         $message = 'You need to provide a password to create a public link, only protected links are allowed';
                         $message_t = $l->t('You need to provide a password to create a public link, only protected links are allowed');
                         \OCP\Util::writeLog('OCP\\Share', $message, \OCP\Util::DEBUG);
                         throw new \Exception($message_t);
                     }
                     if ($updateExistingShare === false && self::isDefaultExpireDateEnabled() && empty($expirationDate)) {
                         $expirationDate = Helper::calcExpireDate();
                     }
                     // Generate token
                     if (isset($oldToken)) {
                         $token = $oldToken;
                     } else {
                         $token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(self::TOKEN_LENGTH, \OCP\Security\ISecureRandom::CHAR_LOWER . \OCP\Security\ISecureRandom::CHAR_UPPER . \OCP\Security\ISecureRandom::CHAR_DIGITS);
                     }
                     $result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token, $itemSourceName, $expirationDate);
                     if ($result) {
                         return $token;
                     } else {
                         return false;
                     }
                 }
                 $message = 'Sharing %s failed, because sharing with links is not allowed';
                 $message_t = $l->t('Sharing %s failed, because sharing with links is not allowed', array($itemSourceName));
                 \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName), \OCP\Util::DEBUG);
                 throw new \Exception($message_t);
             } else {
                 if ($shareType === self::SHARE_TYPE_REMOTE) {
                     /*
                      * Check if file is not already shared with the remote user
                      */
                     if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_REMOTE, $shareWith, $uidOwner, self::FORMAT_NONE, null, 1, true, true)) {
                         $message = 'Sharing %s failed, because this item is already shared with %s';
                         $message_t = $l->t('Sharing %s failed, because this item is already shared with %s', array($itemSourceName, $shareWith));
                         \OCP\Util::writeLog('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OCP\Util::DEBUG);
                         throw new \Exception($message_t);
                     }
                     $token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(self::TOKEN_LENGTH, \OCP\Security\ISecureRandom::CHAR_LOWER . \OCP\Security\ISecureRandom::CHAR_UPPER . \OCP\Security\ISecureRandom::CHAR_DIGITS);
                     list($user, $remote) = Helper::splitUserRemote($shareWith);
                     $shareWith = $user . '@' . $remote;
                     $shareId = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token, $itemSourceName);
                     $send = false;
                     if ($shareId) {
                         $send = self::sendRemoteShare($token, $shareWith, $itemSourceName, $shareId, $uidOwner);
                     }
                     if ($send === false) {
                         $currentUser = \OC::$server->getUserSession()->getUser()->getUID();
                         self::unshare($itemType, $itemSource, $shareType, $shareWith, $currentUser);
                         $message_t = $l->t('Sharing %s failed, could not find %s, maybe the server is currently unreachable.', array($itemSourceName, $shareWith));
                         throw new \Exception($message_t);
                     }
                     return $send;
                 } else {
                     // Future share types need to include their own conditions
                     $message = 'Share type %s is not valid for %s';
                     $message_t = $l->t('Share type %s is not valid for %s', array($shareType, $itemSource));
                     \OCP\Util::writeLog('OCP\\Share', sprintf($message, $shareType, $itemSource), \OCP\Util::DEBUG);
                     throw new \Exception($message_t);
                 }
             }
         }
     }
     // Put the item into the database
     $result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, null, $itemSourceName, $expirationDate);
     return $result ? true : false;
 }
Exemplo n.º 3
0
 /**
  * Share an item with a user, group, or via private link
  * @param string $itemType
  * @param string $itemSource
  * @param int $shareType SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK
  * @param string $shareWith User or group the item is being shared with
  * @param int $permissions CRUDS
  * @param string $itemSourceName
  * @param \DateTime $expirationDate
  * @return boolean|string Returns true on success or false on failure, Returns token on success for links
  * @throws \Exception
  */
 public static function shareItem($itemType, $itemSource, $shareType, $shareWith, $permissions, $itemSourceName = null, \DateTime $expirationDate = null)
 {
     $uidOwner = \OC_User::getUser();
     $shareWithinGroupOnly = self::shareWithGroupMembersOnly();
     $l = \OC_L10N::get('lib');
     if (is_null($itemSourceName)) {
         $itemSourceName = $itemSource;
     }
     // check if file can be shared
     if ($itemType === 'file' or $itemType === 'folder') {
         $path = \OC\Files\Filesystem::getPath($itemSource);
         // verify that the file exists before we try to share it
         if (!$path) {
             $message = 'Sharing %s failed, because the file does not exist';
             $message_t = $l->t('Sharing %s failed, because the file does not exist', array($itemSourceName));
             \OC_Log::write('OCP\\Share', sprintf($message, $itemSourceName), \OC_Log::ERROR);
             throw new \Exception($message_t);
         }
         // verify that the user has share permission
         if (!\OC\Files\Filesystem::isSharable($path)) {
             $message = 'You are not allowed to share %s';
             $message_t = $l->t('You are not allowed to share %s', array($itemSourceName));
             \OC_Log::write('OCP\\Share', sprintf($message, $itemSourceName), \OC_Log::ERROR);
             throw new \Exception($message_t);
         }
     }
     //verify that we don't share a folder which already contains a share mount point
     if ($itemType === 'folder') {
         $path = '/' . $uidOwner . '/files' . \OC\Files\Filesystem::getPath($itemSource) . '/';
         $mountManager = \OC\Files\Filesystem::getMountManager();
         $mounts = $mountManager->findIn($path);
         foreach ($mounts as $mount) {
             if ($mount->getStorage()->instanceOfStorage('\\OCA\\Files_Sharing\\ISharedStorage')) {
                 $message = 'Sharing "' . $itemSourceName . '" failed, because it contains files shared with you!';
                 \OC_Log::write('OCP\\Share', $message, \OC_Log::ERROR);
                 throw new \Exception($message);
             }
         }
     }
     // single file shares should never have delete permissions
     if ($itemType === 'file') {
         $permissions = (int) $permissions & ~\OCP\PERMISSION_DELETE;
     }
     // Verify share type and sharing conditions are met
     if ($shareType === self::SHARE_TYPE_USER) {
         if ($shareWith == $uidOwner) {
             $message = 'Sharing %s failed, because the user %s is the item owner';
             $message_t = $l->t('Sharing %s failed, because the user %s is the item owner', array($itemSourceName, $shareWith));
             \OC_Log::write('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OC_Log::ERROR);
             throw new \Exception($message_t);
         }
         if (!\OC_User::userExists($shareWith)) {
             $message = 'Sharing %s failed, because the user %s does not exist';
             $message_t = $l->t('Sharing %s failed, because the user %s does not exist', array($itemSourceName, $shareWith));
             \OC_Log::write('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OC_Log::ERROR);
             throw new \Exception($message_t);
         }
         if ($shareWithinGroupOnly) {
             $inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith));
             if (empty($inGroup)) {
                 $message = 'Sharing %s failed, because the user ' . '%s is not a member of any groups that %s is a member of';
                 $message_t = $l->t('Sharing %s failed, because the user %s is not a member of any groups that %s is a member of', array($itemSourceName, $shareWith, $uidOwner));
                 \OC_Log::write('OCP\\Share', sprintf($message, $itemSourceName, $shareWith, $uidOwner), \OC_Log::ERROR);
                 throw new \Exception($message_t);
             }
         }
         // Check if the item source is already shared with the user, either from the same owner or a different user
         if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
             // Only allow the same share to occur again if it is the same
             // owner and is not a user share, this use case is for increasing
             // permissions for a specific user
             if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
                 $message = 'Sharing %s failed, because this item is already shared with %s';
                 $message_t = $l->t('Sharing %s failed, because this item is already shared with %s', array($itemSourceName, $shareWith));
                 \OC_Log::write('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OC_Log::ERROR);
                 throw new \Exception($message_t);
             }
         }
     } else {
         if ($shareType === self::SHARE_TYPE_GROUP) {
             if (!\OC_Group::groupExists($shareWith)) {
                 $message = 'Sharing %s failed, because the group %s does not exist';
                 $message_t = $l->t('Sharing %s failed, because the group %s does not exist', array($itemSourceName, $shareWith));
                 \OC_Log::write('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OC_Log::ERROR);
                 throw new \Exception($message_t);
             }
             if ($shareWithinGroupOnly && !\OC_Group::inGroup($uidOwner, $shareWith)) {
                 $message = 'Sharing %s failed, because ' . '%s is not a member of the group %s';
                 $message_t = $l->t('Sharing %s failed, because %s is not a member of the group %s', array($itemSourceName, $uidOwner, $shareWith));
                 \OC_Log::write('OCP\\Share', sprintf($message, $itemSourceName, $uidOwner, $shareWith), \OC_Log::ERROR);
                 throw new \Exception($message_t);
             }
             // Check if the item source is already shared with the group, either from the same owner or a different user
             // The check for each user in the group is done inside the put() function
             if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
                 // Only allow the same share to occur again if it is the same
                 // owner and is not a group share, this use case is for increasing
                 // permissions for a specific user
                 if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
                     $message = 'Sharing %s failed, because this item is already shared with %s';
                     $message_t = $l->t('Sharing %s failed, because this item is already shared with %s', array($itemSourceName, $shareWith));
                     \OC_Log::write('OCP\\Share', sprintf($message, $itemSourceName, $shareWith), \OC_Log::ERROR);
                     throw new \Exception($message_t);
                 }
             }
             // Convert share with into an array with the keys group and users
             $group = $shareWith;
             $shareWith = array();
             $shareWith['group'] = $group;
             $shareWith['users'] = array_diff(\OC_Group::usersInGroup($group), array($uidOwner));
         } else {
             if ($shareType === self::SHARE_TYPE_LINK) {
                 $updateExistingShare = false;
                 if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') == 'yes') {
                     // when updating a link share
                     // FIXME Don't delete link if we update it
                     if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1)) {
                         // remember old token
                         $oldToken = $checkExists['token'];
                         $oldPermissions = $checkExists['permissions'];
                         //delete the old share
                         Helper::delete($checkExists['id']);
                         $updateExistingShare = true;
                     }
                     // Generate hash of password - same method as user passwords
                     if (!empty($shareWith)) {
                         $forcePortable = CRYPT_BLOWFISH != 1;
                         $hasher = new \PasswordHash(8, $forcePortable);
                         $shareWith = $hasher->HashPassword($shareWith . \OC_Config::getValue('passwordsalt', ''));
                     } else {
                         // reuse the already set password, but only if we change permissions
                         // otherwise the user disabled the password protection
                         if ($checkExists && (int) $permissions !== (int) $oldPermissions) {
                             $shareWith = $checkExists['share_with'];
                         }
                     }
                     if (\OCP\Util::isPublicLinkPasswordRequired() && empty($shareWith)) {
                         $message = 'You need to provide a password to create a public link, only protected links are allowed';
                         $message_t = $l->t('You need to provide a password to create a public link, only protected links are allowed');
                         \OC_Log::write('OCP\\Share', $message, \OC_Log::ERROR);
                         throw new \Exception($message_t);
                     }
                     if ($updateExistingShare === false && self::isDefaultExpireDateEnabled() && empty($expirationDate)) {
                         $expirationDate = Helper::calcExpireDate();
                     }
                     // Generate token
                     if (isset($oldToken)) {
                         $token = $oldToken;
                     } else {
                         $token = \OC_Util::generateRandomBytes(self::TOKEN_LENGTH);
                     }
                     $result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token, $itemSourceName, $expirationDate);
                     if ($result) {
                         return $token;
                     } else {
                         return false;
                     }
                 }
                 $message = 'Sharing %s failed, because sharing with links is not allowed';
                 $message_t = $l->t('Sharing %s failed, because sharing with links is not allowed', array($itemSourceName));
                 \OC_Log::write('OCP\\Share', sprintf($message, $itemSourceName), \OC_Log::ERROR);
                 throw new \Exception($message_t);
                 return false;
             } else {
                 // Future share types need to include their own conditions
                 $message = 'Share type %s is not valid for %s';
                 $message_t = $l->t('Share type %s is not valid for %s', array($shareType, $itemSource));
                 \OC_Log::write('OCP\\Share', sprintf($message, $shareType, $itemSource), \OC_Log::ERROR);
                 throw new \Exception($message_t);
             }
         }
     }
     // Put the item into the database
     return self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, null, $itemSourceName, $expirationDate);
 }
Exemplo n.º 4
0
 /**
  * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
  */
 public static function isSharable($path)
 {
     return \OC\Files\Filesystem::isSharable($path);
 }
Exemplo n.º 5
0
 /**
  * Returns the numeric permissions for the given directory.
  * @param string $dir directory without trailing slash
  * @return numeric permissions
  */
 public static function getDirPermissions($dir)
 {
     $permissions = \OCP\PERMISSION_READ;
     if (\OC\Files\Filesystem::isCreatable($dir . '/')) {
         $permissions |= \OCP\PERMISSION_CREATE;
     }
     if (\OC\Files\Filesystem::isUpdatable($dir . '/')) {
         $permissions |= \OCP\PERMISSION_UPDATE;
     }
     if (\OC\Files\Filesystem::isDeletable($dir . '/')) {
         $permissions |= \OCP\PERMISSION_DELETE;
     }
     if (\OC\Files\Filesystem::isSharable($dir . '/')) {
         $permissions |= \OCP\PERMISSION_SHARE;
     }
     return $permissions;
 }
Exemplo n.º 6
0
$list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/')));
$list->assign('disableSharing', false);
$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb);
$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
$permissions = OCP\PERMISSION_READ;
if (\OC\Files\Filesystem::isCreatable($dir . '/')) {
    $permissions |= OCP\PERMISSION_CREATE;
}
if (\OC\Files\Filesystem::isUpdatable($dir . '/')) {
    $permissions |= OCP\PERMISSION_UPDATE;
}
if (\OC\Files\Filesystem::isDeletable($dir . '/')) {
    $permissions |= OCP\PERMISSION_DELETE;
}
if (\OC\Files\Filesystem::isSharable($dir . '/')) {
    $permissions |= OCP\PERMISSION_SHARE;
}
if ($needUpgrade) {
    OCP\Util::addscript('files', 'upgrade');
    $tmpl = new OCP\Template('files', 'upgrade', 'user');
    $tmpl->printPage();
} else {
    // information about storage capacities
    $storageInfo = OC_Helper::getStorageInfo();
    $maxUploadFilesize = OCP\Util::maxUploadFilesize($dir);
    OCP\Util::addscript('files', 'fileactions');
    OCP\Util::addscript('files', 'files');
    OCP\Util::addscript('files', 'keyboardshortcuts');
    $tmpl = new OCP\Template('files', 'index', 'user');
    $tmpl->assign('fileList', $list->fetchPage());
 /**
  * @NoAdminRequired
  * @NoCSRFRequired
  * @SSOCORS
  */
 public function shareLinks($files, $password = null, $expiration = null)
 {
     $shareLinkUrls = array();
     for ($i = 0; $i < sizeof($files); $i++) {
         $type = $files[$i]['type'];
         $id = $files[$i]['id'];
         $name = $files[$i]['name'];
         $permissions = 1;
         $path = \OC\Files\Filesystem::getPath($id);
         if ($path === null) {
             $shareLinkUrls[$i]['name'] = $name;
             $shareLinkUrls[$i]['url'] = null;
             $shareLinkUrls[$i]['id'] = $id;
             $shareLinkUrls[$i]['type'] = $type;
             if ($type == 'file') {
                 $shareLinkUrls[$i]['message'] = self::msg_idNotExist;
             } else {
                 $replacement = '${1}folder${3}';
                 $msg_idNotExist = preg_replace($this->fileTypePattern, $replacement, self::msg_idNotExist);
                 $shareLinkUrls[$i]['message'] = $msg_idNotExist;
             }
             continue;
         }
         if (\OC\Files\Filesystem::filetype($path) !== $type) {
             $shareLinkUrls[$i]['name'] = $name;
             $shareLinkUrls[$i]['url'] = null;
             $shareLinkUrls[$i]['id'] = $id;
             $shareLinkUrls[$i]['type'] = $type;
             $replacement = '${1}\'' . $type . '\'${3}' . $name . '(' . $id . ')';
             $msg_errorType = preg_replace($this->errorTypePattern, $replacement, self::msg_errorType);
             $shareLinkUrls[$i]['message'] = $msg_errorType;
             continue;
         }
         if (!\OC\Files\Filesystem::isSharable($path)) {
             $shareLinkUrls[$i]['name'] = $name;
             $shareLinkUrls[$i]['url'] = null;
             $shareLinkUrls[$i]['id'] = $id;
             $shareLinkUrls[$i]['type'] = $type;
             if ($type == 'file') {
                 $shareLinkUrls[$i]['message'] = self::msg_unreshareable;
             } else {
                 $replacement = '${1}folder${3}';
                 $msg_unreshareable = preg_replace($this->fileTypePattern, $replacement, self::msg_unreshareable);
                 $shareLinkUrls[$i]['message'] = $msg_unreshareable;
             }
             continue;
         }
         if ($type == 'dir') {
             $type = 'folder';
         }
         $passwordChanged = $password !== null;
         $token = \OCP\Share::shareItem($type, $id, $this->shareType, $password, $permissions, $name, !empty($expiration) ? new \DateTime((string) $expiration) : null, $passwordChanged);
         if ($type == 'folder') {
             $type = 'dir';
         }
         $url = self::generateShareLink($token);
         $shareLinkUrls[$i]['name'] = $name;
         $shareLinkUrls[$i]['url'] = $url;
         $shareLinkUrls[$i]['id'] = $id;
         $shareLinkUrls[$i]['type'] = $type;
     }
     json_encode($shareLinkUrls, JSON_PRETTY_PRINT);
     return new DataResponse(array('data' => $shareLinkUrls, 'status' => 'success'));
 }