diff options
Diffstat (limited to 'apps/files_external/lib/Config/UserContext.php')
-rw-r--r-- | apps/files_external/lib/Config/UserContext.php | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/apps/files_external/lib/Config/UserContext.php b/apps/files_external/lib/Config/UserContext.php new file mode 100644 index 00000000000..fb5c79a9329 --- /dev/null +++ b/apps/files_external/lib/Config/UserContext.php @@ -0,0 +1,61 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\Files_External\Config; + +use OCP\IRequest; +use OCP\IUser; +use OCP\IUserManager; +use OCP\IUserSession; +use OCP\Share\Exceptions\ShareNotFound; +use OCP\Share\IManager as ShareManager; + +class UserContext { + + /** @var string */ + private $userId; + + public function __construct( + private IUserSession $session, + private ShareManager $shareManager, + private IRequest $request, + private IUserManager $userManager, + ) { + } + + public function getSession(): IUserSession { + return $this->session; + } + + public function setUserId(string $userId): void { + $this->userId = $userId; + } + + protected function getUserId(): ?string { + if ($this->userId !== null) { + return $this->userId; + } + if ($this->session->getUser() !== null) { + return $this->session->getUser()->getUID(); + } + try { + $shareToken = $this->request->getParam('token'); + $share = $this->shareManager->getShareByToken($shareToken); + return $share->getShareOwner(); + } catch (ShareNotFound $e) { + } + + return null; + } + + protected function getUser(): ?IUser { + $userId = $this->getUserId(); + if ($userId !== null) { + return $this->userManager->get($userId); + } + return null; + } +} |