Skip to content

Commit

Permalink
Fix hook encryption with cron job
Browse files Browse the repository at this point in the history
Make sure the setup fs is set before using the Update service

Fix #29674

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
  • Loading branch information
CarlSchwan committed Jun 22, 2022
1 parent c530f8a commit b4edbb3
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 14 deletions.
2 changes: 1 addition & 1 deletion apps/files_sharing/lib/ExpireSharesJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public function run($argument) {
)
);

$shares = $qb->execute();
$shares = $qb->executeQuery();
while ($share = $shares->fetch()) {
if ((int)$share['share_type'] === IShare::TYPE_LINK) {
$id = 'ocinternal';
Expand Down
38 changes: 25 additions & 13 deletions lib/private/Encryption/HookManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,39 +25,51 @@

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(
Expand Down

0 comments on commit b4edbb3

Please sign in to comment.