this way we only have to determine the share permissions once Signed-off-by: Robin Appelman <robin@icewind.nl>tags/v28.0.0beta1
@@ -36,6 +36,8 @@ | |||
namespace OCA\Files_Sharing\Tests; | |||
use OC\Files\Cache\Scanner; | |||
use OC\Files\Filesystem; | |||
use OC\Files\SetupManager; | |||
use OCA\Files_Sharing\Controller\ShareAPIController; | |||
use OCP\App\IAppManager; | |||
use OCP\AppFramework\OCS\OCSBadRequestException; | |||
@@ -74,6 +76,8 @@ class ApiTest extends TestCase { | |||
\OC::$server->getConfig()->setAppValue('core', 'shareapi_exclude_groups', 'no'); | |||
\OC::$server->getConfig()->setAppValue('core', 'shareapi_expire_after_n_days', '7'); | |||
Filesystem::getLoader()->removeStorageWrapper('sharing_mask'); | |||
$this->folder = self::TEST_FOLDER_NAME; | |||
$this->subfolder = '/subfolder_share_api_test'; | |||
$this->subsubfolder = '/subsubfolder_share_api_test'; |
@@ -231,7 +231,7 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { | |||
} | |||
/** | |||
* Return the currently version used for the HMAC in the encryption app | |||
* Return the current version used for the HMAC in the encryption app | |||
*/ | |||
public function getEncryptedVersion(): int { | |||
return isset($this->data['encryptedVersion']) ? (int) $this->data['encryptedVersion'] : 1; | |||
@@ -241,11 +241,7 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { | |||
* @return int | |||
*/ | |||
public function getPermissions() { | |||
$perms = (int) $this->data['permissions']; | |||
if (\OCP\Util::isSharingDisabledForUser() || ($this->isShared() && !\OC\Share\Share::isResharingAllowed())) { | |||
$perms = $perms & ~\OCP\Constants::PERMISSION_SHARE; | |||
} | |||
return $perms; | |||
return (int) $this->data['permissions']; | |||
} | |||
/** |
@@ -26,6 +26,7 @@ | |||
namespace OC\Files\ObjectStore; | |||
use OC\User\User; | |||
use OCP\IUser; | |||
class HomeObjectStoreStorage extends ObjectStoreStorage implements \OCP\Files\IHomeStorage { | |||
/** | |||
@@ -61,7 +62,7 @@ class HomeObjectStoreStorage extends ObjectStoreStorage implements \OCP\Files\IH | |||
* @param string $path, optional | |||
* @return \OC\User\User | |||
*/ | |||
public function getUser($path = null) { | |||
public function getUser($path = null): IUser { | |||
return $this->user; | |||
} | |||
} |
@@ -34,9 +34,11 @@ use OC\Files\Storage\Wrapper\Encoding; | |||
use OC\Files\Storage\Wrapper\PermissionsMask; | |||
use OC\Files\Storage\Wrapper\Quota; | |||
use OC\Lockdown\Filesystem\NullStorage; | |||
use OC\Share\Share; | |||
use OC_App; | |||
use OC_Hook; | |||
use OC_Util; | |||
use OCA\Files_Sharing\ISharedStorage; | |||
use OCP\Constants; | |||
use OCP\Diagnostics\IEventLogger; | |||
use OCP\EventDispatcher\IEventDispatcher; | |||
@@ -60,6 +62,7 @@ use OCP\IUserManager; | |||
use OCP\IUserSession; | |||
use OCP\Lockdown\ILockdownManager; | |||
use OCP\Share\Events\ShareCreatedEvent; | |||
use OCP\Share\IManager; | |||
use Psr\Log\LoggerInterface; | |||
class SetupManager { | |||
@@ -139,8 +142,17 @@ class SetupManager { | |||
return $storage; | |||
}); | |||
Filesystem::addStorageWrapper('enable_sharing', function ($mountPoint, IStorage $storage, IMountPoint $mount) { | |||
if (!$mount->getOption('enable_sharing', true)) { | |||
Filesystem::addStorageWrapper('sharing_mask', function ($mountPoint, IStorage $storage, IMountPoint $mount) { | |||
$reSharingEnabled = Share::isResharingAllowed(); | |||
$sharingEnabledForMount = $mount->getOption('enable_sharing', true); | |||
/** @var IUserSession $userSession */ | |||
$userSession = \OC::$server->get(IUserSession::class); | |||
$user = $userSession->getUser(); | |||
/** @var IManager $shareManager */ | |||
$shareManager = \OC::$server->get(IManager::class); | |||
$sharingEnabledForUser = $user ? !$shareManager->sharingDisabledForUser($user->getUID()) : true; | |||
$isShared = $storage->instanceOfStorage(ISharedStorage::class); | |||
if (!$sharingEnabledForMount || !$sharingEnabledForUser || (!$reSharingEnabled && $isShared)) { | |||
return new PermissionsMask([ | |||
'storage' => $storage, | |||
'mask' => Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE, |
@@ -26,6 +26,7 @@ | |||
namespace OC\Files\Storage; | |||
use OC\Files\Cache\HomePropagator; | |||
use OCP\IUser; | |||
/** | |||
* Specialized version of Local storage for home directory usage | |||
@@ -94,7 +95,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage { | |||
* | |||
* @return \OC\User\User owner of this home storage | |||
*/ | |||
public function getUser() { | |||
public function getUser(): IUser { | |||
return $this->user; | |||
} | |||
@@ -27,6 +27,7 @@ | |||
namespace OCP\Files; | |||
use OCP\Files\Storage\IStorage; | |||
use OCP\IUser; | |||
/** | |||
* Interface IHomeStorage | |||
@@ -34,4 +35,11 @@ use OCP\Files\Storage\IStorage; | |||
* @since 7.0.0 | |||
*/ | |||
interface IHomeStorage extends IStorage { | |||
/** | |||
* Get the user for this home storage | |||
* | |||
* @return IUser | |||
* @since 28.0.0 | |||
*/ | |||
public function getUser(): IUser; | |||
} |