Correctly react to bad configuration

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
This commit is contained in:
Côme Chilliet 2023-06-08 14:52:30 +02:00
父節點 b234b9637e
當前提交 c4281fe135
沒有發現已知的金鑰在資料庫的簽署中
GPG Key ID: A3E2F658B28C760A

查看文件

@ -59,6 +59,7 @@ use OCP\Files\File;
use OCP\Files\Folder;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OCP\IConfig;
use OCP\Lock\ILockingProvider;
use OCP\Lock\LockedException;
use Psr\Log\LoggerInterface;
@ -304,10 +305,7 @@ class Trashbin {
$trashStorage->unlink($trashInternalPath);
}
$config = \OC::$server->getConfig();
$systemTrashbinSize = \OCP\Util::numericToNumber($config->getAppValue('files_trashbin', 'trashbin_size', '-1'));
$userTrashbinSize = \OCP\Util::numericToNumber($config->getUserValue($owner, 'files_trashbin', 'trashbin_size', '-1'));
$configuredTrashbinSize = ($userTrashbinSize < 0) ? $systemTrashbinSize : $userTrashbinSize;
$configuredTrashbinSize = static::getConfiguredTrashbinSize($owner);
if ($configuredTrashbinSize >= 0 && $sourceInfo->getSize() >= $configuredTrashbinSize) {
return false;
}
@ -379,6 +377,19 @@ class Trashbin {
return $moveSuccessful;
}
private static function getConfiguredTrashbinSize(string $user): int|float {
$config = \OC::$server->get(IConfig::class);
$userTrashbinSize = $config->getUserValue($user, 'files_trashbin', 'trashbin_size', '-1');
if (is_numeric($userTrashbinSize) && ($userTrashbinSize > -1)) {
return \OCP\Util::numericToNumber($userTrashbinSize);
}
$systemTrashbinSize = $config->getAppValue('files_trashbin', 'trashbin_size', '-1');
if (is_numeric($systemTrashbinSize)) {
return \OCP\Util::numericToNumber($systemTrashbinSize);
}
return -1;
}
/**
* Move file versions to trash so that they can be restored later
*
@ -753,21 +764,16 @@ class Trashbin {
* @return int|float available free space for trash bin
*/
private static function calculateFreeSpace(int|float $trashbinSize, string $user): int|float {
$config = \OC::$server->getConfig();
$userTrashbinSize = \OCP\Util::numericToNumber($config->getUserValue($user, 'files_trashbin', 'trashbin_size', '-1'));
if ($userTrashbinSize > -1) {
return $userTrashbinSize - $trashbinSize;
}
$systemTrashbinSize = \OCP\Util::numericToNumber($config->getAppValue('files_trashbin', 'trashbin_size', '-1'));
if ($systemTrashbinSize > -1) {
return $systemTrashbinSize - $trashbinSize;
$configuredTrashbinSize = static::getConfiguredTrashbinSize($user);
if ($configuredTrashbinSize > -1) {
return $configuredTrashbinSize - $trashbinSize;
}
$softQuota = true;
$userObject = \OC::$server->getUserManager()->get($user);
if (is_null($userObject)) {
return 0;
}
$softQuota = true;
$quota = $userObject->getQuota();
if ($quota === null || $quota === 'none') {
$quota = Filesystem::free_space('/');
@ -778,6 +784,10 @@ class Trashbin {
}
} else {
$quota = \OCP\Util::computerFileSize($quota);
// invalid quota
if ($quota === false) {
$quota = PHP_INT_MAX;
}
}
// calculate available space for trash bin