|
|
|
|
@ -43,6 +43,7 @@ use OCP\Files\IHomeStorage; |
|
|
|
|
use OCP\Files\InvalidPathException; |
|
|
|
|
use OCP\Files\Mount\IMountManager; |
|
|
|
|
use OCP\IUser; |
|
|
|
|
use OCP\IUserManager; |
|
|
|
|
use OCP\Share\IManager as IShareManager; |
|
|
|
|
use OCP\Share\IShare; |
|
|
|
|
use Symfony\Component\Console\Helper\ProgressBar; |
|
|
|
|
@ -69,14 +70,19 @@ class OwnershipTransferService { |
|
|
|
|
/** @var IUserMountCache */ |
|
|
|
|
private $userMountCache; |
|
|
|
|
|
|
|
|
|
/** @var IUserManager */ |
|
|
|
|
private $userManager; |
|
|
|
|
|
|
|
|
|
public function __construct(IEncryptionManager $manager, |
|
|
|
|
IShareManager $shareManager, |
|
|
|
|
IMountManager $mountManager, |
|
|
|
|
IUserMountCache $userMountCache) { |
|
|
|
|
IUserMountCache $userMountCache, |
|
|
|
|
IUserManager $userManager) { |
|
|
|
|
$this->encryptionManager = $manager; |
|
|
|
|
$this->shareManager = $shareManager; |
|
|
|
|
$this->mountManager = $mountManager; |
|
|
|
|
$this->userMountCache = $userMountCache; |
|
|
|
|
$this->userManager = $userManager; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -401,13 +407,20 @@ class OwnershipTransferService { |
|
|
|
|
$share->setSharedBy($destinationUid); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($share->getShareType() === IShare::TYPE_USER && |
|
|
|
|
!$this->userManager->userExists($share->getSharedWith())) { |
|
|
|
|
// stray share with deleted user |
|
|
|
|
$output->writeln('<error>Share with id ' . $share->getId() . ' points at deleted user "' . $share->getSharedWith() . '", deleting</error>'); |
|
|
|
|
$this->shareManager->deleteShare($share); |
|
|
|
|
continue; |
|
|
|
|
} else { |
|
|
|
|
// trigger refetching of the node so that the new owner and mountpoint are taken into account |
|
|
|
|
// otherwise the checks on the share update will fail due to the original node not being available in the new user scope |
|
|
|
|
$this->userMountCache->clear(); |
|
|
|
|
$share->setNodeId($share->getNode()->getId()); |
|
|
|
|
|
|
|
|
|
// trigger refetching of the node so that the new owner and mountpoint are taken into account |
|
|
|
|
// otherwise the checks on the share update will fail due to the original node not being available in the new user scope |
|
|
|
|
$this->userMountCache->clear(); |
|
|
|
|
$share->setNodeId($share->getNode()->getId()); |
|
|
|
|
|
|
|
|
|
$this->shareManager->updateShare($share); |
|
|
|
|
$this->shareManager->updateShare($share); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (\OCP\Files\NotFoundException $e) { |
|
|
|
|
$output->writeln('<error>Share with id ' . $share->getId() . ' points at deleted file, skipping</error>'); |
|
|
|
|
|