summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/private/connector/sabre/filesplugin.php18
-rw-r--r--lib/private/connector/sabre/node.php32
-rw-r--r--lib/private/files/fileinfo.php24
-rw-r--r--lib/public/files/fileinfo.php14
4 files changed, 84 insertions, 4 deletions
diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php
index f8495b40524..25d7fd53343 100644
--- a/lib/private/connector/sabre/filesplugin.php
+++ b/lib/private/connector/sabre/filesplugin.php
@@ -37,6 +37,7 @@ class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin
$server->xmlNamespaces[self::NS_OWNCLOUD] = 'oc';
$server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}id';
+ $server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}perm';
$this->server = $server;
$this->server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties'));
@@ -57,15 +58,24 @@ class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin
if ($node instanceof OC_Connector_Sabre_Node) {
- $fileid_propertyname = '{' . self::NS_OWNCLOUD . '}id';
- if (array_search($fileid_propertyname, $requestedProperties)) {
- unset($requestedProperties[array_search($fileid_propertyname, $requestedProperties)]);
+ $fileIdPropertyName = '{' . self::NS_OWNCLOUD . '}id';
+ $permissionsPropertyName = '{' . self::NS_OWNCLOUD . '}permissions';
+ if (array_search($fileIdPropertyName, $requestedProperties)) {
+ unset($requestedProperties[array_search($fileIdPropertyName, $requestedProperties)]);
+ }
+ if (array_search($permissionsPropertyName, $requestedProperties)) {
+ unset($requestedProperties[array_search($permissionsPropertyName, $requestedProperties)]);
}
/** @var $node OC_Connector_Sabre_Node */
$fileId = $node->getFileId();
if (!is_null($fileId)) {
- $returnedProperties[200][$fileid_propertyname] = $fileId;
+ $returnedProperties[200][$fileIdPropertyName] = $fileId;
+ }
+
+ $permissions = $node->getDavPermissions();
+ if (!is_null($fileId)) {
+ $returnedProperties[200][$permissionsPropertyName] = $permissions;
}
}
diff --git a/lib/private/connector/sabre/node.php b/lib/private/connector/sabre/node.php
index eede39cba8b..ee38dfc8642 100644
--- a/lib/private/connector/sabre/node.php
+++ b/lib/private/connector/sabre/node.php
@@ -237,4 +237,36 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
return null;
}
+
+ /**
+ * @return string|null
+ */
+ public function getDavPermissions() {
+ $p ='';
+ if ($this->info->isShared()) {
+ $p .= 'S';
+ }
+ if ($this->info->isShareable()) {
+ $p .= 'R';
+ }
+ if ($this->info->isMounted()) {
+ $p .= 'M';
+ }
+ if ($this->info->isDeletable()) {
+ $p .= 'D';
+ }
+ if ($this->info->isDeletable()) {
+ $p .= 'N';
+ }
+ if ($this->info->getType() === \OCP\Files\FileInfo::TYPE_FILE) {
+ if ($this->info->isUpdateable()) {
+ $p .= 'W';
+ }
+ } else {
+ if ($this->info->isUpdateable()) {
+ $p .= 'CK';
+ }
+ }
+ return $p;
+ }
}
diff --git a/lib/private/files/fileinfo.php b/lib/private/files/fileinfo.php
index b64c5d4e112..e7afeb4ccce 100644
--- a/lib/private/files/fileinfo.php
+++ b/lib/private/files/fileinfo.php
@@ -196,4 +196,28 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
public function isShareable() {
return $this->checkPermissions(\OCP\PERMISSION_SHARE);
}
+
+ /**
+ * Check if a file or folder is shared
+ * @return bool
+ */
+ public function isShared() {
+ $sid = $this->getStorage()->getId();
+ if (!is_null($sid)) {
+ $sid = explode(':', $sid);
+ return ($sid[0] === 'shared');
+ }
+
+ return false;
+ }
+
+ public function isMounted() {
+ $sid = $this->getStorage()->getId();
+ if (!is_null($sid)) {
+ $sid = explode(':', $sid);
+ return ($sid[0] !== 'local' and $sid[0] !== 'home');
+ }
+
+ return false;
+ }
}
diff --git a/lib/public/files/fileinfo.php b/lib/public/files/fileinfo.php
index bf0c31918cb..b9c8258f21e 100644
--- a/lib/public/files/fileinfo.php
+++ b/lib/public/files/fileinfo.php
@@ -135,4 +135,18 @@ interface FileInfo {
* @return bool
*/
public function isShareable();
+
+ /**
+ * Check if a file or folder is shared
+ *
+ * @return bool
+ */
+ public function isShared();
+
+ /**
+ * Check if a file or folder is mounted
+ *
+ * @return bool
+ */
+ public function isMounted();
}