Fix related logic
This commit is contained in:
parent
6123badbfa
commit
afa37d363f
|
@ -224,7 +224,7 @@ abstract class Node implements \Sabre\DAV\INode {
|
||||||
|
|
||||||
if ($storage->instanceOfStorage('\OC\Files\Storage\Shared')) {
|
if ($storage->instanceOfStorage('\OC\Files\Storage\Shared')) {
|
||||||
/** @var \OC\Files\Storage\Shared $storage */
|
/** @var \OC\Files\Storage\Shared $storage */
|
||||||
$permissions = (int)$storage->getShare()['permissions'];
|
$permissions = (int)$storage->getShare()->getPermissions();
|
||||||
} else {
|
} else {
|
||||||
$permissions = $storage->getPermissions($path);
|
$permissions = $storage->getPermissions($path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,6 +237,17 @@ class Manager implements IManager {
|
||||||
if (($share->getPermissions() & \OCP\Constants::PERMISSION_READ) === 0) {
|
if (($share->getPermissions() & \OCP\Constants::PERMISSION_READ) === 0) {
|
||||||
throw new \InvalidArgumentException('Shares need at least read permissions');
|
throw new \InvalidArgumentException('Shares need at least read permissions');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($share->getNode() instanceof \OCP\Files\File) {
|
||||||
|
if ($share->getPermissions() & \OCP\Constants::PERMISSION_DELETE) {
|
||||||
|
$message_t = $this->l->t('Files can\'t be shared with delete permissions');
|
||||||
|
throw new GenericShareException($message_t);
|
||||||
|
}
|
||||||
|
if ($share->getPermissions() & \OCP\Constants::PERMISSION_CREATE) {
|
||||||
|
$message_t = $this->l->t('Files can\'t be shared with create permissions');
|
||||||
|
throw new GenericShareException($message_t);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -505,6 +516,24 @@ class Manager implements IManager {
|
||||||
|
|
||||||
$this->generalCreateChecks($share);
|
$this->generalCreateChecks($share);
|
||||||
|
|
||||||
|
// Verify if there are any issues with the path
|
||||||
|
$this->pathCreateChecks($share->getNode());
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On creation of a share the owner is always the owner of the path
|
||||||
|
* Except for mounted federated shares.
|
||||||
|
*/
|
||||||
|
$storage = $share->getNode()->getStorage();
|
||||||
|
if ($storage->instanceOfStorage('OCA\Files_Sharing\External\Storage')) {
|
||||||
|
$parent = $share->getNode()->getParent();
|
||||||
|
while($parent->getStorage()->instanceOfStorage('OCA\Files_Sharing\External\Storage')) {
|
||||||
|
$parent = $parent->getParent();
|
||||||
|
}
|
||||||
|
$share->setShareOwner($parent->getOwner()->getUID());
|
||||||
|
} else {
|
||||||
|
$share->setShareOwner($share->getNode()->getOwner()->getUID());
|
||||||
|
}
|
||||||
|
|
||||||
//Verify share type
|
//Verify share type
|
||||||
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER) {
|
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER) {
|
||||||
$this->userCreateChecks($share);
|
$this->userCreateChecks($share);
|
||||||
|
@ -538,24 +567,6 @@ class Manager implements IManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify if there are any issues with the path
|
|
||||||
$this->pathCreateChecks($share->getNode());
|
|
||||||
|
|
||||||
/*
|
|
||||||
* On creation of a share the owner is always the owner of the path
|
|
||||||
* Except for mounted federated shares.
|
|
||||||
*/
|
|
||||||
$storage = $share->getNode()->getStorage();
|
|
||||||
if ($storage->instanceOfStorage('OCA\Files_Sharing\External\Storage')) {
|
|
||||||
$parent = $share->getNode()->getParent();
|
|
||||||
while($parent->getStorage()->instanceOfStorage('OCA\Files_Sharing\External\Storage')) {
|
|
||||||
$parent = $parent->getParent();
|
|
||||||
}
|
|
||||||
$share->setShareOwner($parent->getOwner()->getUID());
|
|
||||||
} else {
|
|
||||||
$share->setShareOwner($share->getNode()->getOwner()->getUID());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cannot share with the owner
|
// Cannot share with the owner
|
||||||
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER &&
|
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER &&
|
||||||
$share->getSharedWith() === $share->getShareOwner()) {
|
$share->getSharedWith() === $share->getShareOwner()) {
|
||||||
|
@ -818,7 +829,7 @@ class Manager implements IManager {
|
||||||
* @param string $recipientId
|
* @param string $recipientId
|
||||||
*/
|
*/
|
||||||
public function deleteFromSelf(\OCP\Share\IShare $share, $recipientId) {
|
public function deleteFromSelf(\OCP\Share\IShare $share, $recipientId) {
|
||||||
list($providerId, ) = $this->splitFullId($share->getId());
|
list($providerId, ) = $this->splitFullId($share->getFullId());
|
||||||
$provider = $this->factory->getProvider($providerId);
|
$provider = $this->factory->getProvider($providerId);
|
||||||
|
|
||||||
$provider->deleteFromSelf($share, $recipientId);
|
$provider->deleteFromSelf($share, $recipientId);
|
||||||
|
@ -844,7 +855,7 @@ class Manager implements IManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
list($providerId, ) = $this->splitFullId($share->getId());
|
list($providerId, ) = $this->splitFullId($share->getFullId());
|
||||||
$provider = $this->factory->getProvider($providerId);
|
$provider = $this->factory->getProvider($providerId);
|
||||||
|
|
||||||
$provider->move($share, $recipientId);
|
$provider->move($share, $recipientId);
|
||||||
|
|
|
@ -82,7 +82,7 @@ class UserMountCache implements IUserMountCache {
|
||||||
$newMounts = array_map(function (IMountPoint $mount) use ($user) {
|
$newMounts = array_map(function (IMountPoint $mount) use ($user) {
|
||||||
$storage = $mount->getStorage();
|
$storage = $mount->getStorage();
|
||||||
if ($storage->instanceOfStorage('\OC\Files\Storage\Shared')) {
|
if ($storage->instanceOfStorage('\OC\Files\Storage\Shared')) {
|
||||||
$rootId = (int)$storage->getShare()['file_source'];
|
$rootId = (int)$storage->getShare()->getNodeId();
|
||||||
} else {
|
} else {
|
||||||
$rootId = (int)$storage->getCache()->getId('');
|
$rootId = (int)$storage->getCache()->getId('');
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ class Jail extends Wrapper {
|
||||||
$this->rootPath = $arguments['root'];
|
$this->rootPath = $arguments['root'];
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getSourcePath($path) {
|
public function getSourcePath($path) {
|
||||||
if ($path === '') {
|
if ($path === '') {
|
||||||
return $this->rootPath;
|
return $this->rootPath;
|
||||||
} else {
|
} else {
|
||||||
|
@ -415,6 +415,14 @@ class Jail extends Wrapper {
|
||||||
return $this->storage->getETag($this->getSourcePath($path));
|
return $this->storage->getETag($this->getSourcePath($path));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $path
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getMetaData($path) {
|
||||||
|
return $this->storage->getMetaData($this->getSourcePath($path));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE
|
* @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE
|
||||||
|
@ -442,4 +450,9 @@ class Jail extends Wrapper {
|
||||||
public function changeLock($path, $type, ILockingProvider $provider) {
|
public function changeLock($path, $type, ILockingProvider $provider) {
|
||||||
$this->storage->changeLock($this->getSourcePath($path), $type, $provider);
|
$this->storage->changeLock($this->getSourcePath($path), $type, $provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function resolvePath($path) {
|
||||||
|
$path = $this->getSourcePath($path);
|
||||||
|
return \OC\Files\Filesystem::resolvePath($path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -628,7 +628,7 @@ class OC_Helper {
|
||||||
/** @var \OC\Files\Storage\Wrapper\Quota $storage */
|
/** @var \OC\Files\Storage\Wrapper\Quota $storage */
|
||||||
$quota = $sourceStorage->getQuota();
|
$quota = $sourceStorage->getQuota();
|
||||||
}
|
}
|
||||||
$free = $storage->free_space('');
|
$free = $sourceStorage->free_space('');
|
||||||
if ($free >= 0) {
|
if ($free >= 0) {
|
||||||
$total = $free + $used;
|
$total = $free + $used;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue