Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2022-03-31 12:18:03 +0300
committerVincent Petry (Rebase PR Action) <PVince81@users.noreply.github.com>2022-06-07 18:38:45 +0300
commit5907bba3fdb77f899c31c08afc9f0b894847374b (patch)
treefa78d1ee950b37c5ba8d14dbb4d33b9931d375e0
parentdcf25d6c7716daa08eb6af07a720c0a0b7b6eda6 (diff)
Fix hook encryption with cron jobfix/hook-encryption-cron
Make sure the setup fs is set before using the Update service Fix #29674 Signed-off-by: Carl Schwan <carl@carlschwan.eu>
-rw-r--r--apps/files_sharing/lib/ExpireSharesJob.php2
-rw-r--r--lib/private/Encryption/HookManager.php38
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(