, array{}> * * 200: Pending remote shares returned */ #[NoAdminRequired] public function getOpenShares() { return new DataResponse($this->externalManager->getOpenShares()); } /** * Accept a remote share * * @param int $id ID of the share * @return DataResponse, array{}> * @throws OCSNotFoundException Share not found * * 200: Share accepted successfully */ #[NoAdminRequired] public function acceptShare($id) { if ($this->externalManager->acceptShare($id)) { return new DataResponse(); } $this->logger->error('Could not accept federated share with id: ' . $id, ['app' => 'files_sharing']); throw new OCSNotFoundException('wrong share ID, share does not exist.'); } /** * Decline a remote share * * @param int $id ID of the share * @return DataResponse, array{}> * @throws OCSNotFoundException Share not found * * 200: Share declined successfully */ #[NoAdminRequired] public function declineShare($id) { if ($this->externalManager->declineShare($id)) { return new DataResponse(); } // Make sure the user has no notification for something that does not exist anymore. $this->externalManager->processNotification($id); throw new OCSNotFoundException('wrong share ID, share does not exist.'); } /** * @param array $share Share with info from the share_external table * @return array enriched share info with data from the filecache */ private static function extendShareInfo($share) { $view = new View('/' . \OC_User::getUser() . '/files/'); $info = $view->getFileInfo($share['mountpoint']); if ($info === false) { return $share; } $share['mimetype'] = $info->getMimetype(); $share['mtime'] = $info->getMTime(); $share['permissions'] = $info->getPermissions(); $share['type'] = $info->getType(); $share['file_id'] = $info->getId(); return $share; } /** * Get a list of accepted remote shares * * @return DataResponse, array{}> * * 200: Accepted remote shares returned */ #[NoAdminRequired] public function getShares() { $shares = $this->externalManager->getAcceptedShares(); $shares = array_map(self::extendShareInfo(...), $shares); return new DataResponse($shares); } /** * Get info of a remote share * * @param int $id ID of the share * @return DataResponse * @throws OCSNotFoundException Share not found * * 200: Share returned */ #[NoAdminRequired] public function getShare($id) { $shareInfo = $this->externalManager->getShare($id); if ($shareInfo === false) { throw new OCSNotFoundException('share does not exist'); } else { $shareInfo = self::extendShareInfo($shareInfo); return new DataResponse($shareInfo); } } /** * Unshare a remote share * * @param int $id ID of the share * @return DataResponse, array{}> * @throws OCSNotFoundException Share not found * @throws OCSForbiddenException Unsharing is not possible * * 200: Share unshared successfully */ #[NoAdminRequired] public function unshare($id) { $shareInfo = $this->externalManager->getShare($id); if ($shareInfo === false) { throw new OCSNotFoundException('Share does not exist'); } $mountPoint = '/' . \OC_User::getUser() . '/files' . $shareInfo['mountpoint']; if ($this->externalManager->removeShare($mountPoint) === true) { return new DataResponse(); } else { throw new OCSForbiddenException('Could not unshare'); } } }