diff options
author | Robin Appelman <robin@icewind.nl> | 2023-08-31 15:21:16 +0200 |
---|---|---|
committer | backportbot-nextcloud[bot] <backportbot-nextcloud[bot]@users.noreply.github.com> | 2023-09-18 17:33:43 +0000 |
commit | 02a50bd99c725b70a29c98a66037fc7534b67ea0 (patch) | |
tree | 1aa1df45c8e19bab638ecb21491d2e7940bd6d56 /apps/files_external | |
parent | 6ab32b00ee236394008572ce2aa48b9bd1051dd8 (diff) | |
download | nextcloud-server-02a50bd99c725b70a29c98a66037fc7534b67ea0.tar.gz nextcloud-server-02a50bd99c725b70a29c98a66037fc7534b67ea0.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 c5a77d25a6d..d41963de82c 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)); + } + + } |