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

Backport of #29674

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
  • Loading branch information
CarlSchwan committed Jun 22, 2022
1 parent 63fb2e0 commit b44cd08
Show file tree
Hide file tree
Showing 2 changed files with 23 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
35 changes: 22 additions & 13 deletions lib/private/Encryption/HookManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,39 +25,48 @@

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();
}

\OC_Util::setupFS($uid);

self::$updater = new Update(
new View(),
new Util(
Expand Down

0 comments on commit b44cd08

Please sign in to comment.