Merge pull request #23431 from owncloud/use-dav-sabre-plugin-for-browser-2

Fix display of vcard and calendar object details page in browser plugin
This commit is contained in:
Thomas Müller 2016-03-23 11:03:55 +01:00
commit 24331be991
3 changed files with 30 additions and 15 deletions

View File

@ -27,10 +27,13 @@
namespace OCA\DAV\Connector\Sabre; namespace OCA\DAV\Connector\Sabre;
use OC\Files\View;
use Sabre\DAV\Exception\Forbidden;
use Sabre\DAV\Exception\NotFound; use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\IFile; use Sabre\DAV\IFile;
use \Sabre\DAV\PropFind; use \Sabre\DAV\PropFind;
use \Sabre\DAV\PropPatch; use \Sabre\DAV\PropPatch;
use Sabre\DAV\Tree;
use \Sabre\HTTP\RequestInterface; use \Sabre\HTTP\RequestInterface;
use \Sabre\HTTP\ResponseInterface; use \Sabre\HTTP\ResponseInterface;
use OCP\Files\StorageNotAvailableException; use OCP\Files\StorageNotAvailableException;
@ -58,7 +61,7 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
private $server; private $server;
/** /**
* @var \Sabre\DAV\Tree * @var Tree
*/ */
private $tree; private $tree;
@ -71,21 +74,29 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
private $isPublic; private $isPublic;
/** /**
* @var \OC\Files\View * @var View
*/ */
private $fileView; private $fileView;
/** /**
* @param \Sabre\DAV\Tree $tree * @var bool
* @param \OC\Files\View $view
* @param bool $isPublic
*/ */
public function __construct(\Sabre\DAV\Tree $tree, private $downloadAttachment;
\OC\Files\View $view,
$isPublic = false) { /**
* @param Tree $tree
* @param View $view
* @param bool $isPublic
* @param bool $downloadAttachment
*/
public function __construct(Tree $tree,
View $view,
$isPublic = false,
$downloadAttachment = true) {
$this->tree = $tree; $this->tree = $tree;
$this->fileView = $view; $this->fileView = $view;
$this->isPublic = $isPublic; $this->isPublic = $isPublic;
$this->downloadAttachment = $downloadAttachment;
} }
/** /**
@ -135,7 +146,7 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
* Plugin that checks if a move can actually be performed. * Plugin that checks if a move can actually be performed.
* @param string $source source path * @param string $source source path
* @param string $destination destination path * @param string $destination destination path
* @throws \Sabre\DAV\Exception\Forbidden * @throws Forbidden
*/ */
function checkMove($source, $destination) { function checkMove($source, $destination) {
list($sourceDir,) = \Sabre\HTTP\URLUtil::splitPath($source); list($sourceDir,) = \Sabre\HTTP\URLUtil::splitPath($source);
@ -145,11 +156,11 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
$sourceFileInfo = $this->fileView->getFileInfo($source); $sourceFileInfo = $this->fileView->getFileInfo($source);
if ($sourceFileInfo === false) { if ($sourceFileInfo === false) {
throw new \Sabre\DAV\Exception\NotFound($source . ' does not exist'); throw new NotFound($source . ' does not exist');
} }
if (!$sourceFileInfo->isDeletable()) { if (!$sourceFileInfo->isDeletable()) {
throw new \Sabre\DAV\Exception\Forbidden($source . " cannot be deleted"); throw new Forbidden($source . " cannot be deleted");
} }
} }
} }
@ -192,7 +203,9 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
if (!($node instanceof IFile)) return; if (!($node instanceof IFile)) return;
// adds a 'Content-Disposition: attachment' header // adds a 'Content-Disposition: attachment' header
$response->addHeader('Content-Disposition', 'attachment'); if ($this->downloadAttachment) {
$response->addHeader('Content-Disposition', 'attachment');
}
if ($node instanceof \OCA\DAV\Connector\Sabre\File) { if ($node instanceof \OCA\DAV\Connector\Sabre\File) {
//Add OC-Checksum header //Add OC-Checksum header
@ -233,7 +246,7 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
}); });
$propFind->handle(self::GETETAG_PROPERTYNAME, function() use ($node) { $propFind->handle(self::GETETAG_PROPERTYNAME, function() use ($node) {
return $node->getEtag(); return $node->getETag();
}); });
$propFind->handle(self::OWNER_ID_PROPERTYNAME, function() use ($node) { $propFind->handle(self::OWNER_ID_PROPERTYNAME, function() use ($node) {

View File

@ -132,7 +132,8 @@ class ServerFactory {
} }
$objectTree->init($root, $view, $this->mountManager); $objectTree->init($root, $view, $this->mountManager);
$server->addPlugin(new \OCA\DAV\Connector\Sabre\FilesPlugin($objectTree, $view)); $server->addPlugin(new \OCA\DAV\Connector\Sabre\FilesPlugin($objectTree, $view, false,
!$this->config->getSystemValue('debug', false)));
$server->addPlugin(new \OCA\DAV\Connector\Sabre\QuotaPlugin($view)); $server->addPlugin(new \OCA\DAV\Connector\Sabre\QuotaPlugin($view));
if($this->userSession->isLoggedIn()) { if($this->userSession->isLoggedIn()) {

View File

@ -125,7 +125,8 @@ class Server {
$user = \OC::$server->getUserSession()->getUser(); $user = \OC::$server->getUserSession()->getUser();
if (!is_null($user)) { if (!is_null($user)) {
$view = \OC\Files\Filesystem::getView(); $view = \OC\Files\Filesystem::getView();
$this->server->addPlugin(new FilesPlugin($this->server->tree, $view)); $this->server->addPlugin(new FilesPlugin($this->server->tree, $view, false,
!\OC::$server->getConfig()->getSystemValue('debug', false)));
$this->server->addPlugin( $this->server->addPlugin(
new \Sabre\DAV\PropertyStorage\Plugin( new \Sabre\DAV\PropertyStorage\Plugin(