aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_external
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2023-08-31 15:21:16 +0200
committerRobin Appelman <robin@icewind.nl>2023-09-04 16:30:10 +0200
commitb41c8e0ef52d7fdd491d19b13d04c5d5a9546478 (patch)
tree87d8b8e9de19a31057bc859a2ceb007b96e7016f /apps/files_external
parent1dfef9fccf52bd8c2a6c2e13580c7d5b0e66ec30 (diff)
downloadnextcloud-server-b41c8e0ef52d7fdd491d19b13d04c5d5a9546478.tar.gz
nextcloud-server-b41c8e0ef52d7fdd491d19b13d04c5d5a9546478.zip
more optimized getPermissions/getMetaData
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'apps/files_external')
-rw-r--r--apps/files_external/lib/Lib/Storage/SFTP.php44
1 files changed, 44 insertions, 0 deletions
diff --git a/apps/files_external/lib/Lib/Storage/SFTP.php b/apps/files_external/lib/Lib/Storage/SFTP.php
index 9bcb624c410..5dd11b2fe53 100644
--- a/apps/files_external/lib/Lib/Storage/SFTP.php
+++ b/apps/files_external/lib/Lib/Storage/SFTP.php
@@ -41,6 +41,8 @@ use Icewind\Streams\IteratorDirectory;
use Icewind\Streams\RetryWrapper;
use OC\Files\Filesystem;
use OC\Files\Storage\Common;
+use OCP\Constants;
+use OCP\Files\FileInfo;
use phpseclib\Net\SFTP\Stream;
/**
@@ -532,4 +534,46 @@ class SFTP extends Common {
return true;
}
}
+
+ public function getPermissions($path) {
+ $stat = $this->getConnection()->stat($this->absPath($path));
+ if (!$stat) {
+ return 0;
+ }
+ if ($stat['type'] === NET_SFTP_TYPE_DIRECTORY) {
+ return Constants::PERMISSION_ALL;
+ } else {
+ return Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE;
+ }
+ }
+
+ public function getMetaData($path) {
+ $stat = $this->getConnection()->stat($this->absPath($path));
+ if (!$stat) {
+ return null;
+ }
+
+ if ($stat['type'] === NET_SFTP_TYPE_DIRECTORY) {
+ $permissions = Constants::PERMISSION_ALL;
+ } else {
+ $permissions = Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE;
+ }
+
+ if ($stat['type'] === NET_SFTP_TYPE_DIRECTORY) {
+ $stat['size'] = -1;
+ $stat['mimetype'] = FileInfo::MIMETYPE_FOLDER;
+ } else {
+ $stat['mimetype'] = \OC::$server->getMimeTypeDetector()->detectPath($path);
+ }
+
+ $stat['etag'] = $this->getETag($path);
+ $stat['storage_mtime'] = $stat['mtime'];
+ $stat['permissions'] = $permissions;
+ $stat['name'] = basename($path);
+
+ $keys = ['size', 'mtime', 'mimetype', 'etag', 'storage_mtime', 'permissions', 'name'];
+ return array_intersect_key($stat, array_flip($keys));
+ }
+
+
}