Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 18 additions & 6 deletions apps/files_sharing/lib/Controller/ExternalSharesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
use OCP\AppFramework\Http\JSONResponse;
use OCP\BackgroundJob\IJobList;
use OCP\IRequest;
use OCP\IUser;
use OCP\IUserSession;
use RuntimeException;

/**
* Class ExternalSharesController
Expand All @@ -26,27 +29,36 @@ public function __construct(
string $appName,
IRequest $request,
private readonly Manager $externalManager,
private IJobList $jobList,
private readonly IJobList $jobList,
private readonly IUserSession $userSession,
) {
parent::__construct($appName, $request);
}

private function getUser(): IUser {
$user = $this->userSession->getUser();
if ($user === null) {
throw new RuntimeException('No user for non-public page');
}
return $user;
}

/**
* @NoOutgoingFederatedSharingRequired
*/
#[NoAdminRequired]
public function index(): JSONResponse {
return new JSONResponse($this->externalManager->getOpenShares());
return new JSONResponse($this->externalManager->getOpenShares($this->getUser()));
}

/**
* @NoOutgoingFederatedSharingRequired
*/
#[NoAdminRequired]
public function create(string $id): JSONResponse {
$externalShare = $this->externalManager->getShare($id);
$externalShare = $this->externalManager->getShare($id, $this->getUser());
if ($externalShare !== false) {
$this->externalManager->acceptShare($externalShare);
$this->externalManager->acceptShare($externalShare, $this->getUser());
$this->jobList->add(ExternalShareScanJob::class, [$externalShare->getUser(), $externalShare->getMountpoint()]);
}
return new JSONResponse();
Expand All @@ -57,9 +69,9 @@ public function create(string $id): JSONResponse {
*/
#[NoAdminRequired]
public function destroy(string $id): JSONResponse {
$externalShare = $this->externalManager->getShare($id);
$externalShare = $this->externalManager->getShare($id, $this->getUser());
if ($externalShare !== false) {
$this->externalManager->declineShare($externalShare);
$this->externalManager->declineShare($externalShare, $this->getUser());
}
return new JSONResponse();
}
Expand Down
35 changes: 23 additions & 12 deletions apps/files_sharing/lib/Controller/RemoteController.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@
use OCP\AppFramework\OCSController;
use OCP\Files\IRootFolder;
use OCP\IRequest;
use OCP\IUser;
use OCP\IUserSession;
use Psr\Log\LoggerInterface;
use RuntimeException;

/**
* @psalm-import-type Files_SharingRemoteShare from ResponseDefinitions
Expand All @@ -34,12 +37,20 @@ public function __construct(
IRequest $request,
private readonly Manager $externalManager,
private readonly LoggerInterface $logger,
private readonly ?string $userId,
private readonly IUserSession $userSession,
private readonly IRootFolder $rootFolder,
) {
parent::__construct($appName, $request);
}

private function getUser(): IUser {
$user = $this->userSession->getUser();
if ($user === null) {
throw new RuntimeException('No user for non-public page');
}
return $user;
}

/**
* Get list of pending remote shares
*
Expand All @@ -49,7 +60,7 @@ public function __construct(
*/
#[NoAdminRequired]
public function getOpenShares(): DataResponse {
$shares = $this->externalManager->getOpenShares();
$shares = $this->externalManager->getOpenShares($this->getUser());
$shares = array_map($this->extendShareInfo(...), $shares);
return new DataResponse($shares);
}
Expand All @@ -65,13 +76,13 @@ public function getOpenShares(): DataResponse {
*/
#[NoAdminRequired]
public function acceptShare(string $id): DataResponse {
$externalShare = $this->externalManager->getShare($id);
$externalShare = $this->externalManager->getShare($id, $this->getUser());
if ($externalShare === false) {
$this->logger->error('Could not accept federated share with id: ' . $id . ' Share not found.', ['app' => 'files_sharing']);
throw new OCSNotFoundException('Wrong share ID, share does not exist.');
}

if (!$this->externalManager->acceptShare($externalShare)) {
if (!$this->externalManager->acceptShare($externalShare, $this->getUser())) {
$this->logger->error('Could not accept federated share with id: ' . $id, ['app' => 'files_sharing']);
throw new OCSNotFoundException('Wrong share ID, share does not exist.');
}
Expand All @@ -90,13 +101,13 @@ public function acceptShare(string $id): DataResponse {
*/
#[NoAdminRequired]
public function declineShare(string $id): DataResponse {
$externalShare = $this->externalManager->getShare($id);
$externalShare = $this->externalManager->getShare($id, $this->getUser());
if ($externalShare === false) {
$this->logger->error('Could not decline federated share with id: ' . $id . ' Share not found.', ['app' => 'files_sharing']);
throw new OCSNotFoundException('Wrong share ID, share does not exist.');
}

if (!$this->externalManager->declineShare($externalShare)) {
if (!$this->externalManager->declineShare($externalShare, $this->getUser())) {
$this->logger->error('Could not decline federated share with id: ' . $id, ['app' => 'files_sharing']);
throw new OCSNotFoundException('Wrong share ID, share does not exist.');
}
Expand All @@ -112,7 +123,7 @@ private function extendShareInfo(ExternalShare $share): array {
$shareData = $share->jsonSerialize();

$shareData['parent'] = $shareData['parent'] !== '-1' ? $shareData['parent'] : null;
$userFolder = $this->rootFolder->getUserFolder($this->userId);
$userFolder = $this->rootFolder->getUserFolder($this->getUser()->getUID());

try {
$mountPointNode = $userFolder->get($share->getMountpoint());
Expand All @@ -139,7 +150,7 @@ private function extendShareInfo(ExternalShare $share): array {
*/
#[NoAdminRequired]
public function getShares(): DataResponse {
$shares = $this->externalManager->getAcceptedShares();
$shares = $this->externalManager->getAcceptedShares($this->getUser());
$shares = array_map(fn (ExternalShare $share) => $this->extendShareInfo($share), $shares);
return new DataResponse($shares);
}
Expand All @@ -155,7 +166,7 @@ public function getShares(): DataResponse {
*/
#[NoAdminRequired]
public function getShare(string $id): DataResponse {
$shareInfo = $this->externalManager->getShare($id);
$shareInfo = $this->externalManager->getShare($id, $this->getUser());

if ($shareInfo === false) {
throw new OCSNotFoundException('share does not exist');
Expand All @@ -177,15 +188,15 @@ public function getShare(string $id): DataResponse {
*/
#[NoAdminRequired]
public function unshare(string $id): DataResponse {
$shareInfo = $this->externalManager->getShare($id);
$shareInfo = $this->externalManager->getShare($id, $this->getUser());

if ($shareInfo === false) {
throw new OCSNotFoundException('Share does not exist');
}

$mountPoint = '/' . $this->userId . '/files' . $shareInfo->getMountpoint();
$mountPoint = '/' . $this->getUser()->getUID() . '/files' . $shareInfo->getMountpoint();

if ($this->externalManager->removeShare($mountPoint) === true) {
if ($this->externalManager->removeShare($this->getUser(), $mountPoint) === true) {
return new DataResponse();
} else {
throw new OCSForbiddenException('Could not unshare');
Expand Down
Loading
Loading