Throw OCSNotFoundExceptions
This commit is contained in:
parent
54f21bccdf
commit
8b160077f1
|
@ -23,6 +23,8 @@
|
|||
*/
|
||||
namespace OCA\Files_Sharing\API;
|
||||
|
||||
use OCP\AppFramework\Http\DataResponse;
|
||||
use OCP\AppFramework\OCS\OCSNotFoundException;
|
||||
use OCP\AppFramework\OCSController;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\IGroupManager;
|
||||
|
@ -183,7 +185,8 @@ class Share20OCS extends OCSController {
|
|||
* @NoAdminRequired
|
||||
*
|
||||
* @param string $id
|
||||
* @return array
|
||||
* @return DataResponse
|
||||
* @throws OCSNotFoundException
|
||||
*/
|
||||
public function getShare($id) {
|
||||
if (!$this->shareManager->shareApiEnabled()) {
|
||||
|
@ -196,27 +199,19 @@ class Share20OCS extends OCSController {
|
|||
try {
|
||||
$share = $this->getShareById($id);
|
||||
} catch (ShareNotFound $e) {
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Wrong share ID, share doesn\'t exist'),
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist'));
|
||||
}
|
||||
|
||||
if ($this->canAccessShare($share)) {
|
||||
try {
|
||||
$share = $this->formatShare($share);
|
||||
return [
|
||||
'data' => [$share],
|
||||
];
|
||||
return new DataResponse([$share]);
|
||||
} catch (NotFoundException $e) {
|
||||
//Fall trough
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Wrong share ID, share doesn\'t exist')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -226,6 +221,7 @@ class Share20OCS extends OCSController {
|
|||
*
|
||||
* @param string $id
|
||||
* @return \OC\OCS\Result
|
||||
* @throws OCSNotFoundException
|
||||
*/
|
||||
public function deleteShare($id) {
|
||||
if (!$this->shareManager->shareApiEnabled()) {
|
||||
|
@ -238,40 +234,32 @@ class Share20OCS extends OCSController {
|
|||
try {
|
||||
$share = $this->getShareById($id);
|
||||
} catch (ShareNotFound $e) {
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Wrong share ID, share doesn\'t exist')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist'));
|
||||
}
|
||||
|
||||
try {
|
||||
$share->getNode()->lock(ILockingProvider::LOCK_SHARED);
|
||||
} catch (LockedException $e) {
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('could not delete share')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('could not delete share'));
|
||||
}
|
||||
|
||||
if (!$this->canAccessShare($share, false)) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Could not delete share')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Could not delete share'));
|
||||
}
|
||||
|
||||
$this->shareManager->deleteShare($share);
|
||||
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
|
||||
return [];
|
||||
return new DataResponse([]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
*
|
||||
* @return array
|
||||
* @return DataResponse
|
||||
* @throws OCSNotFoundException
|
||||
*/
|
||||
public function createShare() {
|
||||
$share = $this->shareManager->newShare();
|
||||
|
@ -286,20 +274,14 @@ class Share20OCS extends OCSController {
|
|||
// Verify path
|
||||
$path = $this->request->getParam('path', null);
|
||||
if ($path === null) {
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Please specify a file or folder path')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Please specify a file or folder path'));
|
||||
}
|
||||
|
||||
$userFolder = $this->rootFolder->getUserFolder($this->currentUser->getUID());
|
||||
try {
|
||||
$path = $userFolder->get($path);
|
||||
} catch (NotFoundException $e) {
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'messagecode' => $this->l->t('Wrong path, file/folder doesn\'t exist')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Wrong path, file/folder doesn\'t exist'));
|
||||
}
|
||||
|
||||
$share->setNode($path);
|
||||
|
@ -307,10 +289,7 @@ class Share20OCS extends OCSController {
|
|||
try {
|
||||
$share->getNode()->lock(ILockingProvider::LOCK_SHARED);
|
||||
} catch (LockedException $e) {
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Could not create share')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Could not create share'));
|
||||
}
|
||||
|
||||
// Parse permissions (if available)
|
||||
|
@ -323,10 +302,7 @@ class Share20OCS extends OCSController {
|
|||
|
||||
if ($permissions < 0 || $permissions > \OCP\Constants::PERMISSION_ALL) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => 'invalid permissions'
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('invalid permissions'));
|
||||
}
|
||||
|
||||
// Shares always require read permissions
|
||||
|
@ -354,29 +330,20 @@ class Share20OCS extends OCSController {
|
|||
// Valid user is required to share
|
||||
if ($shareWith === null || !$this->userManager->userExists($shareWith)) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Please specify a valid user')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Please specify a valid user'));
|
||||
}
|
||||
$share->setSharedWith($shareWith);
|
||||
$share->setPermissions($permissions);
|
||||
} else if ($shareType === \OCP\Share::SHARE_TYPE_GROUP) {
|
||||
if (!$this->shareManager->allowGroupSharing()) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Group sharing is disabled by the administrator')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Group sharing is disabled by the administrator'));
|
||||
}
|
||||
|
||||
// Valid group is required to share
|
||||
if ($shareWith === null || !$this->groupManager->groupExists($shareWith)) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Please specify a valid group')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Please specify a valid group'));
|
||||
}
|
||||
$share->setSharedWith($shareWith);
|
||||
$share->setPermissions($permissions);
|
||||
|
@ -384,10 +351,7 @@ class Share20OCS extends OCSController {
|
|||
//Can we even share links?
|
||||
if (!$this->shareManager->shareApiAllowLinks()) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Public link sharing is disabled by the administrator')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Public link sharing is disabled by the administrator'));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -397,7 +361,7 @@ class Share20OCS extends OCSController {
|
|||
$existingShares = $this->shareManager->getSharesBy($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_LINK, $path, false, 1, 0);
|
||||
if (!empty($existingShares)) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return ['data' => $this->formatShare($existingShares[0])];
|
||||
return new DataResponse($this->formatShare($existingShares[0]));
|
||||
}
|
||||
|
||||
$publicUpload = $this->request->getParam('publicUpload', null);
|
||||
|
@ -414,10 +378,7 @@ class Share20OCS extends OCSController {
|
|||
// Public upload can only be set for folders
|
||||
if ($path instanceof \OCP\Files\File) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Public upload is only possible for publicly shared folders')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Public upload is only possible for publicly shared folders'));
|
||||
}
|
||||
|
||||
$share->setPermissions(
|
||||
|
@ -446,10 +407,7 @@ class Share20OCS extends OCSController {
|
|||
$share->setExpirationDate($expireDate);
|
||||
} catch (\Exception $e) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Invalid date, date format must be YYYY-MM-DD')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Invalid date, date format must be YYYY-MM-DD'));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -501,7 +459,7 @@ class Share20OCS extends OCSController {
|
|||
|
||||
/**
|
||||
* @param \OCP\Files\File|\OCP\Files\Folder $node
|
||||
* @return array
|
||||
* @return DataResponse
|
||||
*/
|
||||
private function getSharedWithMe($node = null) {
|
||||
$userShares = $this->shareManager->getSharedWith($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_USER, $node, -1, 0);
|
||||
|
@ -520,12 +478,12 @@ class Share20OCS extends OCSController {
|
|||
}
|
||||
}
|
||||
|
||||
return ['data' => $formatted];
|
||||
return new DataResponse($formatted);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \OCP\Files\Folder $folder
|
||||
* @return array
|
||||
* @return DataResponse
|
||||
*/
|
||||
private function getSharesInDir($folder) {
|
||||
if (!($folder instanceof \OCP\Files\Folder)) {
|
||||
|
@ -556,7 +514,7 @@ class Share20OCS extends OCSController {
|
|||
}
|
||||
}
|
||||
|
||||
return ['data' => $formatted];
|
||||
return new DataResponse($formatted);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -570,7 +528,8 @@ class Share20OCS extends OCSController {
|
|||
* - Get shares for a specific path (?path=...)
|
||||
* - Get all shares in a folder (?subfiles=true&path=..)
|
||||
*
|
||||
* @return array
|
||||
* @return DataResponse
|
||||
* @throws OCSNotFoundException
|
||||
*/
|
||||
public function getShares() {
|
||||
if (!$this->shareManager->shareApiEnabled()) {
|
||||
|
@ -588,15 +547,9 @@ class Share20OCS extends OCSController {
|
|||
$path = $userFolder->get($path);
|
||||
$path->lock(ILockingProvider::LOCK_SHARED);
|
||||
} catch (\OCP\Files\NotFoundException $e) {
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Wrong path, file/folder doesn\'t exist')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Wrong path, file/folder doesn\'t exist'));
|
||||
} catch (LockedException $e) {
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Could not lock path')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Could not lock path'));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -646,14 +599,15 @@ class Share20OCS extends OCSController {
|
|||
$path->unlock(ILockingProvider::LOCK_SHARED);
|
||||
}
|
||||
|
||||
return ['data' => $formatted];
|
||||
return new DataResponse($formatted);
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
*
|
||||
* @param int $id
|
||||
* @return array
|
||||
* @return DataResponse
|
||||
* @throws OCSNotFoundException
|
||||
*/
|
||||
public function updateShare($id) {
|
||||
if (!$this->shareManager->shareApiEnabled()) {
|
||||
|
@ -666,20 +620,14 @@ class Share20OCS extends OCSController {
|
|||
try {
|
||||
$share = $this->getShareById($id);
|
||||
} catch (ShareNotFound $e) {
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Wrong share ID, share doesn\'t exist')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist'));
|
||||
}
|
||||
|
||||
$share->getNode()->lock(\OCP\Lock\ILockingProvider::LOCK_SHARED);
|
||||
|
||||
if (!$this->canAccessShare($share, false)) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Wrong share ID, share doesn\'t exist')
|
||||
];
|
||||
throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist'));
|
||||
}
|
||||
|
||||
$permissions = $this->request->getParam('permissions', null);
|
||||
|
@ -795,6 +743,7 @@ class Share20OCS extends OCSController {
|
|||
$incomingShares = $this->shareManager->getSharedWith($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_USER, $share->getNode(), -1, 0);
|
||||
$incomingShares = array_merge($incomingShares, $this->shareManager->getSharedWith($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0));
|
||||
|
||||
/** @var \OCP\Share\IShare[] $incomingShares */
|
||||
if (!empty($incomingShares)) {
|
||||
$maxPermissions = 0;
|
||||
foreach ($incomingShares as $incomingShare) {
|
||||
|
@ -824,7 +773,7 @@ class Share20OCS extends OCSController {
|
|||
|
||||
$share->getNode()->unlock(\OCP\Lock\ILockingProvider::LOCK_SHARED);
|
||||
|
||||
return ['data' => $this->formatShare($share)];
|
||||
return new DataResponse($this->formatShare($share));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue