diff options
author | Roeland Jago Douma <roeland@famdouma.nl> | 2015-08-29 12:39:47 +0200 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2015-08-29 12:39:47 +0200 |
commit | fc64ea670d63b125d277ddcacc0b48253b62c28d (patch) | |
tree | f00d41822be79a0a9ab14f096f71f6f24db7bafd /apps/files_sharing/api/local.php | |
parent | dc7a4e1b9de14fd398e4800e965b0061d78bc187 (diff) | |
download | nextcloud-server-fc64ea670d63b125d277ddcacc0b48253b62c28d.tar.gz nextcloud-server-fc64ea670d63b125d277ddcacc0b48253b62c28d.zip |
Allow to directly set the expireDate on a new (link)share
Since this extends the API we now properly parse the date. We only
accept valid ISO 8601 Dates (YYYY-MM-DD).
Currently this only works for link shares (it is just ignored for other
shares). Since we do not have user/group/federated expiring shares yet.
* Tests added
Diffstat (limited to 'apps/files_sharing/api/local.php')
-rw-r--r-- | apps/files_sharing/api/local.php | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/apps/files_sharing/api/local.php b/apps/files_sharing/api/local.php index eb0e0e0d846..eeb31899830 100644 --- a/apps/files_sharing/api/local.php +++ b/apps/files_sharing/api/local.php @@ -258,6 +258,7 @@ class Local { $itemSource = self::getFileId($path); $itemSourceName = $itemSource; $itemType = self::getItemType($path); + $expirationDate = null; if($itemSource === null) { return new \OC_OCS_Result(null, 404, "wrong path, file/folder doesn't exist."); @@ -286,6 +287,14 @@ class Local { // read, create, update (7) if public upload is enabled or // read (1) if public upload is disabled $permissions = $publicUpload === 'true' ? 7 : 1; + + // Get the expiration date + try { + $expirationDate = isset($_POST['expireDate']) ? self::parseDate($_POST['expireDate']) : null; + } catch (\Exception $e) { + return new \OC_OCS_Result(null, 404, 'Invalid Date'); + } + break; default: return new \OC_OCS_Result(null, 400, "unknown share type"); @@ -302,8 +311,9 @@ class Local { $shareType, $shareWith, $permissions, - $itemSourceName - ); + $itemSourceName, + $expirationDate + ); } catch (HintException $e) { return new \OC_OCS_Result(null, 400, $e->getHint()); } catch (\Exception $e) { @@ -538,6 +548,30 @@ class Local { } /** + * Make sure that the passed date is valid ISO 8601 + * So YYYY-MM-DD + * If not throw an exception + * + * @param string $expireDate + * + * @throws \Exception + * @return \DateTime + */ + private static function parseDate($expireDate) { + if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $expireDate) === 0) { + throw new \Exception(); + } + + $date = new \DateTime($expireDate); + + if ($date === false) { + throw new \Exception(); + } + + return $date; + } + + /** * get file ID from a given path * @param string $path * @return string fileID or null |