Beispiel #1
0
 /**
  * Adds shares to propfind response
  *
  * @param PropFind $propFind propfind object
  * @param \Sabre\DAV\INode $sabreNode sabre node
  */
 public function handleGetProperties(PropFind $propFind, \Sabre\DAV\INode $sabreNode)
 {
     if (!$sabreNode instanceof \OCA\DAV\Connector\Sabre\Node) {
         return;
     }
     // need prefetch ?
     if ($sabreNode instanceof \OCA\DAV\Connector\Sabre\Directory && $propFind->getDepth() !== 0 && !is_null($propFind->getStatus(self::SHARETYPES_PROPERTYNAME))) {
         $folderNode = $this->userFolder->get($propFind->getPath());
         $children = $folderNode->getDirectoryListing();
         $this->cachedShareTypes[$folderNode->getId()] = $this->getShareTypes($folderNode);
         foreach ($children as $childNode) {
             $this->cachedShareTypes[$childNode->getId()] = $this->getShareTypes($childNode);
         }
     }
     $propFind->handle(self::SHARETYPES_PROPERTYNAME, function () use($sabreNode) {
         if (isset($this->cachedShareTypes[$sabreNode->getId()])) {
             $shareTypes = $this->cachedShareTypes[$sabreNode->getId()];
         } else {
             $node = $this->userFolder->get($sabreNode->getPath());
             $shareTypes = $this->getShareTypes($node);
         }
         return new ShareTypeList($shareTypes);
     });
 }
Beispiel #2
0
 /**
  * Adds all ownCloud-specific properties
  *
  * @param PropFind $propFind
  * @param \Sabre\DAV\INode $node
  * @return void
  */
 public function handleGetProperties(PropFind $propFind, \Sabre\DAV\INode $node)
 {
     $httpRequest = $this->server->httpRequest;
     if ($node instanceof \OCA\DAV\Connector\Sabre\Node) {
         $propFind->handle(self::FILEID_PROPERTYNAME, function () use($node) {
             return $node->getFileId();
         });
         $propFind->handle(self::INTERNAL_FILEID_PROPERTYNAME, function () use($node) {
             return $node->getInternalFileId();
         });
         $propFind->handle(self::PERMISSIONS_PROPERTYNAME, function () use($node) {
             $perms = $node->getDavPermissions();
             if ($this->isPublic) {
                 // remove mount information
                 $perms = str_replace(['S', 'M'], '', $perms);
             }
             return $perms;
         });
         $propFind->handle(self::SHARE_PERMISSIONS_PROPERTYNAME, function () use($node, $httpRequest) {
             return $node->getSharePermissions($httpRequest->getRawServerValue('PHP_AUTH_USER'));
         });
         $propFind->handle(self::GETETAG_PROPERTYNAME, function () use($node) {
             return $node->getETag();
         });
         $propFind->handle(self::OWNER_ID_PROPERTYNAME, function () use($node) {
             $owner = $node->getOwner();
             return $owner->getUID();
         });
         $propFind->handle(self::OWNER_DISPLAY_NAME_PROPERTYNAME, function () use($node) {
             $owner = $node->getOwner();
             $displayName = $owner->getDisplayName();
             return $displayName;
         });
         $propFind->handle(self::DATA_FINGERPRINT_PROPERTYNAME, function () use($node) {
             if ($node->getPath() === '/') {
                 return $this->config->getSystemValue('data-fingerprint', '');
             }
         });
     }
     if ($node instanceof \OCA\DAV\Files\FilesHome) {
         $propFind->handle(self::DATA_FINGERPRINT_PROPERTYNAME, function () use($node) {
             return $this->config->getSystemValue('data-fingerprint', '');
         });
     }
     if ($node instanceof \OCA\DAV\Connector\Sabre\File) {
         $propFind->handle(self::DOWNLOADURL_PROPERTYNAME, function () use($node) {
             /** @var $node \OCA\DAV\Connector\Sabre\File */
             try {
                 $directDownloadUrl = $node->getDirectDownload();
                 if (isset($directDownloadUrl['url'])) {
                     return $directDownloadUrl['url'];
                 }
             } catch (StorageNotAvailableException $e) {
                 return false;
             } catch (ForbiddenException $e) {
                 return false;
             }
             return false;
         });
         $propFind->handle(self::CHECKSUMS_PROPERTYNAME, function () use($node) {
             $checksum = $node->getChecksum();
             if ($checksum === NULL || $checksum === '') {
                 return null;
             }
             return new ChecksumList($checksum);
         });
     }
     if ($node instanceof \OCA\DAV\Connector\Sabre\Directory) {
         $propFind->handle(self::SIZE_PROPERTYNAME, function () use($node) {
             return $node->getSize();
         });
     }
 }