mirror of
https://github.com/nextcloud/server.git
synced 2026-04-22 23:03:00 -04:00
More exceptions
This commit is contained in:
parent
3a31b2875b
commit
7fdc2f32fa
1 changed files with 24 additions and 57 deletions
|
|
@ -24,6 +24,9 @@
|
|||
namespace OCA\Files_Sharing\API;
|
||||
|
||||
use OCP\AppFramework\Http\DataResponse;
|
||||
use OCP\AppFramework\OCS\OCSBadRequestException;
|
||||
use OCP\AppFramework\OCS\OCSException;
|
||||
use OCP\AppFramework\OCS\OCSForbiddenException;
|
||||
use OCP\AppFramework\OCS\OCSNotFoundException;
|
||||
use OCP\AppFramework\OCSController;
|
||||
use OCP\Files\NotFoundException;
|
||||
|
|
@ -245,6 +248,9 @@ class Share20OCS extends OCSController {
|
|||
*
|
||||
* @return DataResponse
|
||||
* @throws OCSNotFoundException
|
||||
* @throws OCSForbiddenException
|
||||
* @throws OCSBadRequestException
|
||||
* @throws OCSException
|
||||
*/
|
||||
public function createShare() {
|
||||
$share = $this->shareManager->newShare();
|
||||
|
|
@ -340,10 +346,7 @@ class Share20OCS extends OCSController {
|
|||
if ($publicUpload === 'true') {
|
||||
// Check if public upload is allowed
|
||||
if (!$this->shareManager->shareApiLinkAllowPublicUpload()) {
|
||||
return [
|
||||
'statuscode' => 403,
|
||||
'message' => $this->l->t('Public upload disabled by the administrator')
|
||||
];
|
||||
throw new OCSForbiddenException($this->l->t('Public upload disabled by the administrator'));
|
||||
}
|
||||
|
||||
// Public upload can only be set for folders
|
||||
|
|
@ -382,19 +385,13 @@ class Share20OCS extends OCSController {
|
|||
|
||||
} else if ($shareType === \OCP\Share::SHARE_TYPE_REMOTE) {
|
||||
if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) {
|
||||
return [
|
||||
'statuscode' => 403,
|
||||
'message' => $this->l->t('Sharing %s failed because the back end does not allow shares from type %s', [$path->getPath(), $shareType])
|
||||
];
|
||||
throw new OCSForbiddenException($this->l->t('Sharing %s failed because the back end does not allow shares from type %s', [$path->getPath(), $shareType]));
|
||||
}
|
||||
|
||||
$share->setSharedWith($shareWith);
|
||||
$share->setPermissions($permissions);
|
||||
} else {
|
||||
return [
|
||||
'statuscode' => 400,
|
||||
$this->l->t('Unknown share type')
|
||||
];
|
||||
throw new OCSBadRequestException($this->l->t('Unknown share type');
|
||||
}
|
||||
|
||||
$share->setShareType($shareType);
|
||||
|
|
@ -404,20 +401,14 @@ class Share20OCS extends OCSController {
|
|||
$share = $this->shareManager->createShare($share);
|
||||
} catch (GenericShareException $e) {
|
||||
$code = $e->getCode() === 0 ? 403 : $e->getCode();
|
||||
return [
|
||||
'statuscode' => $code,
|
||||
'message' => $e->getHint()
|
||||
];
|
||||
throw new OCSException($e->getHint(), $code);
|
||||
}catch (\Exception $e) {
|
||||
return [
|
||||
'statuscode' => 403,
|
||||
'message' => $e->getMessage()
|
||||
];
|
||||
throw new OCSForbiddenException($e->getMessage());
|
||||
}
|
||||
|
||||
$output = $this->formatShare($share);
|
||||
|
||||
return ['data' => $output];
|
||||
return new DataResponse($output);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -447,13 +438,11 @@ class Share20OCS extends OCSController {
|
|||
/**
|
||||
* @param \OCP\Files\Folder $folder
|
||||
* @return DataResponse
|
||||
* @throws OCSBadRequestException
|
||||
*/
|
||||
private function getSharesInDir($folder) {
|
||||
if (!($folder instanceof \OCP\Files\Folder)) {
|
||||
return [
|
||||
'statuscode' => 400,
|
||||
'message' => $this->l->t('Not a directory')
|
||||
];
|
||||
throw new OCSBadRequestException($this->l->t('Not a directory'));
|
||||
}
|
||||
|
||||
$nodes = $folder->getDirectoryListing();
|
||||
|
|
@ -557,6 +546,8 @@ class Share20OCS extends OCSController {
|
|||
* @param int $id
|
||||
* @return DataResponse
|
||||
* @throws OCSNotFoundException
|
||||
* @throws OCSBadRequestException
|
||||
* @throws OCSForbiddenException
|
||||
*/
|
||||
public function updateShare($id) {
|
||||
try {
|
||||
|
|
@ -581,10 +572,7 @@ class Share20OCS extends OCSController {
|
|||
*/
|
||||
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK) {
|
||||
if ($permissions === null && $password === null && $publicUpload === null && $expireDate === null) {
|
||||
return [
|
||||
'statuscode' => 400,
|
||||
'message' => 'Wrong or no update parameter given'
|
||||
];
|
||||
throw new OCSBadRequestException($this->l->t('Wrong or no update parameter given'));
|
||||
}
|
||||
|
||||
$newPermissions = null;
|
||||
|
|
@ -606,10 +594,7 @@ class Share20OCS extends OCSController {
|
|||
\OCP\Constants::PERMISSION_CREATE, // hidden file list
|
||||
])
|
||||
) {
|
||||
return [
|
||||
'statuscode' => 400,
|
||||
'message' => $this->l->t('Can\'t change permissions for public share links')
|
||||
];
|
||||
throw new OCSBadRequestException($this->l->t('Can\'t change permissions for public share links'));
|
||||
}
|
||||
|
||||
if (
|
||||
|
|
@ -619,17 +604,11 @@ class Share20OCS extends OCSController {
|
|||
$newPermissions === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE)
|
||||
) {
|
||||
if (!$this->shareManager->shareApiLinkAllowPublicUpload()) {
|
||||
return [
|
||||
'statuscode' => 403,
|
||||
'message' => $this->l->t('Public upload disabled by the administrator')
|
||||
];
|
||||
throw new OCSForbiddenException($this->l->t('Public upload disabled by the administrator'));
|
||||
}
|
||||
|
||||
if (!($share->getNode() instanceof \OCP\Files\Folder)) {
|
||||
return [
|
||||
'statuscode' => 400,
|
||||
'message' => $this->l->t('Public upload is only possible for publicly shared folders')
|
||||
];
|
||||
throw new OCSBadRequestException($this->l->t('Public upload is only possible for publicly shared folders'));
|
||||
}
|
||||
|
||||
// normalize to correct public upload permissions
|
||||
|
|
@ -646,10 +625,7 @@ class Share20OCS extends OCSController {
|
|||
try {
|
||||
$expireDate = $this->parseDate($expireDate);
|
||||
} catch (\Exception $e) {
|
||||
return [
|
||||
'statuscode' => 400,
|
||||
'message' => $e->getMessage()
|
||||
];
|
||||
throw new OCSBadRequestException($e->getMessage());
|
||||
}
|
||||
$share->setExpirationDate($expireDate);
|
||||
}
|
||||
|
|
@ -663,10 +639,7 @@ class Share20OCS extends OCSController {
|
|||
} else {
|
||||
// For other shares only permissions is valid.
|
||||
if ($permissions === null) {
|
||||
return [
|
||||
'statuscode' => 400,
|
||||
'message' => $this->l->t('Wrong or no update parameter given')
|
||||
];
|
||||
throw new OCSBadRequestException($this->l->t('Wrong or no update parameter given'));
|
||||
} else {
|
||||
$permissions = (int)$permissions;
|
||||
$share->setPermissions($permissions);
|
||||
|
|
@ -686,10 +659,7 @@ class Share20OCS extends OCSController {
|
|||
}
|
||||
|
||||
if ($share->getPermissions() & ~$maxPermissions) {
|
||||
return [
|
||||
'statuscode' => 404,
|
||||
'message' => $this->l->t('Cannot increase permissions')
|
||||
];
|
||||
throw new OCSBadRequestException($this->l->t('Cannot increase permissions'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -698,10 +668,7 @@ class Share20OCS extends OCSController {
|
|||
try {
|
||||
$share = $this->shareManager->updateShare($share);
|
||||
} catch (\Exception $e) {
|
||||
return [
|
||||
'statuscode' => 400,
|
||||
'message' => $e->getMessage()
|
||||
];
|
||||
throw new OCSBadRequestException($e->getMessage());
|
||||
}
|
||||
|
||||
return new DataResponse($this->formatShare($share));
|
||||
|
|
|
|||
Loading…
Reference in a new issue