diff options
author | Robin Appelman <robin@icewind.nl> | 2023-08-31 15:21:16 +0200 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2023-09-04 16:30:10 +0200 |
commit | b41c8e0ef52d7fdd491d19b13d04c5d5a9546478 (patch) | |
tree | 87d8b8e9de19a31057bc859a2ceb007b96e7016f /apps/files_external | |
parent | 1dfef9fccf52bd8c2a6c2e13580c7d5b0e66ec30 (diff) | |
download | nextcloud-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.php | 44 |
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)); + } + + } |