diff options
author | Vincent Petry <vincent@nextcloud.com> | 2022-06-10 17:27:59 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-10 17:27:59 +0300 |
commit | 85cc867143ab2bd55bffe8d097ac1f2e8116fab6 (patch) | |
tree | 5ee389381e45025f6e3dd95974ed4c0797db7d69 | |
parent | e6e18620002d1da5238e43b9026ca529ae2bda8e (diff) | |
parent | 5907bba3fdb77f899c31c08afc9f0b894847374b (diff) |
Merge pull request #31771 from nextcloud/fix/hook-encryption-cron
Fix hook encryption with cron job
-rw-r--r-- | apps/files_sharing/lib/ExpireSharesJob.php | 2 | ||||
-rw-r--r-- | lib/private/Encryption/HookManager.php | 38 |
2 files changed, 26 insertions, 14 deletions
diff --git a/apps/files_sharing/lib/ExpireSharesJob.php b/apps/files_sharing/lib/ExpireSharesJob.php index dd0979e4b0b..f5eb5856aea 100644 --- a/apps/files_sharing/lib/ExpireSharesJob.php +++ b/apps/files_sharing/lib/ExpireSharesJob.php @@ -85,7 +85,7 @@ class ExpireSharesJob extends TimedJob { ) ); - $shares = $qb->execute(); + $shares = $qb->executeQuery(); while ($share = $shares->fetch()) { if ((int)$share['share_type'] === IShare::TYPE_LINK) { $id = 'ocinternal'; diff --git a/lib/private/Encryption/HookManager.php b/lib/private/Encryption/HookManager.php index a2d6b990a88..5081bcccf94 100644 --- a/lib/private/Encryption/HookManager.php +++ b/lib/private/Encryption/HookManager.php @@ -25,39 +25,51 @@ namespace OC\Encryption; use OC\Files\Filesystem; use OC\Files\View; +use OC\Files\SetupManager; use Psr\Log\LoggerInterface; class HookManager { - /** - * @var Update - */ - private static $updater; + private static ?Update $updater = null; - public static function postShared($params) { + public static function postShared($params): void { self::getUpdate()->postShared($params); } - public static function postUnshared($params) { - self::getUpdate()->postUnshared($params); + public static function postUnshared($params): void { + // In case the unsharing happens in a background job, we don't have + // a session and we load instead the user from the UserManager + $path = Filesystem::getPath($params['fileSource']); + $owner = Filesystem::getOwner($path); + self::getUpdate($owner)->postUnshared($params); } - public static function postRename($params) { + public static function postRename($params): void { self::getUpdate()->postRename($params); } - public static function postRestore($params) { + public static function postRestore($params): void { self::getUpdate()->postRestore($params); } - /** - * @return Update - */ - private static function getUpdate() { + private static function getUpdate(?string $owner = null): Update { if (is_null(self::$updater)) { $user = \OC::$server->getUserSession()->getUser(); + if (!$user && $owner) { + $user = \OC::$server->getUserManager()->get($owner); + } + if (!$user) { + throw new \Exception("Inconsistent data, File unshared, but owner not found. Should not happen"); + } + $uid = ''; if ($user) { $uid = $user->getUID(); } + + $setupManager = \OC::$server->get(SetupManager::class); + if (!$setupManager->isSetupComplete($user)) { + $setupManager->setupForUser($user); + } + self::$updater = new Update( new View(), new Util( |