Browse Source

More exceptions

pull/445/head
Roeland Jago Douma 9 years ago
parent
commit
7fdc2f32fa
No known key found for this signature in database GPG Key ID: 1E152838F164D13B
  1. 81
      apps/files_sharing/lib/API/Share20OCS.php

81
apps/files_sharing/lib/API/Share20OCS.php

@ -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…
Cancel
Save