Fallback to share link owner when no owner found

When creating link shares from external storage, the filesystem cannot
find an owner in some scenarios (ex: system-wide mounts). In such
cases, fall back to using the current user's trashbin which happens to
also be the user who created the link share.

Fixes an issue where this scenario made deletion impossible due to
missing user information.

Signed-off-by: Lukas Reschke <lukas@statuscode.ch>
This commit is contained in:
Vincent Petry 2016-11-09 12:36:35 +01:00 committed by Lukas Reschke
parent 8f664a00e1
commit 34d466b2f6
No known key found for this signature in database
GPG Key ID: B9F6980CF6E759B1

View File

@ -88,6 +88,10 @@ class Trashbin {
if (!$userManager->userExists($uid)) {
$uid = User::getUser();
}
if (!$uid) {
// no owner, usually because of share link from ext storage
return [null, null];
}
Filesystem::initMountPoints($uid);
if ($uid != User::getUser()) {
$info = Filesystem::getFileInfo($filename);
@ -204,6 +208,12 @@ class Trashbin {
list(, $user) = explode('/', $root);
list($owner, $ownerPath) = self::getUidAndFilename($file_path);
// if no owner found (ex: ext storage + share link), will use the current user's trashbin then
if (is_null($owner)) {
$owner = $user;
$ownerPath = $file_path;
}
$ownerView = new View('/' . $owner);
// file has been deleted in between
if (is_null($ownerPath) || $ownerPath === '' || !$ownerView->file_exists('/files/' . $ownerPath)) {