|
|
|
|
@ -32,6 +32,7 @@ namespace OC\Files\Storage;
|
|
|
|
|
|
|
|
|
|
use OC\Files\Filesystem;
|
|
|
|
|
use OCA\Files_Sharing\ISharedStorage;
|
|
|
|
|
use OCP\Constants;
|
|
|
|
|
use OCP\Files\Cache\ICacheEntry;
|
|
|
|
|
use OCP\Files\Storage\IStorage;
|
|
|
|
|
use OCP\Lock\ILockingProvider;
|
|
|
|
|
@ -83,6 +84,10 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
|
|
|
|
|
$this->sourceRootInfo = $this->sourceStorage->getCache()->get($sourceInternalPath);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function isValid() {
|
|
|
|
|
return ($this->sourceRootInfo->getPermissions() & Constants::PERMISSION_SHARE) === Constants::PERMISSION_SHARE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* get id of the mount point
|
|
|
|
|
*
|
|
|
|
|
@ -133,6 +138,9 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
|
|
|
|
|
* @return string|false source file path or false if not found
|
|
|
|
|
*/
|
|
|
|
|
public function getSourcePath($target) {
|
|
|
|
|
if (!$this->isValid()){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
$source = $this->getFile($target);
|
|
|
|
|
if ($source) {
|
|
|
|
|
if (!isset($source['fullPath'])) {
|
|
|
|
|
@ -157,6 +165,9 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
|
|
|
|
|
* @return int CRUDS permissions granted
|
|
|
|
|
*/
|
|
|
|
|
public function getPermissions($target = '') {
|
|
|
|
|
if (!$this->isValid()) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
$permissions = $this->share['permissions'];
|
|
|
|
|
// part files and the mount point always have delete permissions
|
|
|
|
|
if ($target === '' || pathinfo($target, PATHINFO_EXTENSION) === 'part') {
|
|
|
|
|
@ -253,13 +264,14 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function isReadable($path) {
|
|
|
|
|
$isReadable = false;
|
|
|
|
|
if ($source = $this->getSourcePath($path)) {
|
|
|
|
|
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
|
|
|
|
|
$isReadable = $storage->isReadable($internalPath);
|
|
|
|
|
if (!$this->isValid()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $isReadable && $this->file_exists($path);
|
|
|
|
|
if (!$this->file_exists($path)) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
list($storage, $internalPath) = $this->resolvePath($path);
|
|
|
|
|
return $storage->isReadable($internalPath);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function isUpdatable($path) {
|
|
|
|
|
|