/** * 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(); }); } }
/** * Adds all ownCloud-specific properties * * @param PropFind $propFind * @param \Sabre\DAV\INode $node * @return void */ public function handleGetProperties(PropFind $propFind, \Sabre\DAV\INode $node) { 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::GETETAG_PROPERTYNAME, function () use($node) { return $node->getEtag(); }); } 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; } return false; }); $propFind->handle(self::CHECKSUMS_PROPERTYNAME, function () use($node) { $checksum = $node->getChecksum(); return new ChecksumList($checksum); }); } if ($node instanceof \OCA\DAV\Connector\Sabre\Directory) { $propFind->handle(self::SIZE_PROPERTYNAME, function () use($node) { return $node->getSize(); }); } $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; }); }