aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files_sharing/appinfo/routes.php22
-rw-r--r--apps/files_sharing/lib/api.php102
2 files changed, 116 insertions, 8 deletions
diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php
index 2e26033cad0..1c7f5b4a1fc 100644
--- a/apps/files_sharing/appinfo/routes.php
+++ b/apps/files_sharing/appinfo/routes.php
@@ -4,12 +4,11 @@ function() {
require_once __DIR__ . '/../ajax/publicpreview.php';
});
-//TODO: GET: share status of a given file/folder
-//TODO: GET: share status of all files in a given folder?
-//TODO: SET: share (unshare)
+//TODO: SET: unshare
//TODO: SET: permissions
//TODO: SET: expire date
//TODO: SET: mail notification
+//TODO: SET: can upload
OC_API::register('get',
'/apps/files_sharing/api/share/{path}',
@@ -18,6 +17,23 @@ OC_API::register('get',
OC_API::USER_AUTH,
array('path' => ''),
array('path' => '.+')); //allow slashes in parameter path
+
+OC_API::register('post',
+ '/apps/files_sharing/api/share/{path}',
+ array('\OCA\Files\Share\Api', 'setShare'),
+ 'files_sharing',
+ OC_API::USER_AUTH,
+ array('path' => ''),
+ array('path' => '.+'));
+
+OC_API::register('post',
+ '/apps/files_sharing/api/permission/{path}',
+ array('\OCA\Files\Share\Api', 'setPermission'),
+ 'files_sharing',
+ OC_API::USER_AUTH,
+ array('path' => ''),
+ array('path' => '.+'));
+
/*
OC_API::register('get',
'/apps/files_sharing/api/permission/{path}',
diff --git a/apps/files_sharing/lib/api.php b/apps/files_sharing/lib/api.php
index cfe1fc2da46..7f7f925eb23 100644
--- a/apps/files_sharing/lib/api.php
+++ b/apps/files_sharing/lib/api.php
@@ -33,16 +33,108 @@ class Api {
public static function getShare($params) {
$path = $params['path'];
+ $fileId = self::getFileId($path);
+ if ($fileId !== null) {
+ $share = \OCP\Share::getItemShared('file', $fileId);
+ } else {
+ $share = null;
+ }
+
+ if ($share !== null) {
+ return new \OC_OCS_Result($share);
+ } else {
+ return new \OC_OCS_Result(null, 404, 'file/folder doesn\'t exists');
+ }
+ }
+
+ /**
+ * @brief share file with a user/group
+ *
+ * @param array $params which contains a 'path' to a file/folder
+ * @return \OC_OCS_Result result of share operation
+ */
+ public static function setShare($params) {
+ $path = $params['path'];
+ $errorMessage = '';
+
+ $itemSource = self::getFileId($path);
+ $itemType = self::getItemType($path);
+
+ $shareWith = isset($_POST['shareWith']) ? $_POST['shareWith'] : null;
+ $shareType = isset($_POST['shareType']) ? (int)$_POST['shareType'] : null;
+
+ if($shareType === \OCP\Share::SHARE_TYPE_LINK) {
+ $permissions = 1;
+ $shareWith = null;
+ } else {
+ $permissions = 31;
+ }
+
+
+ $token = null;
+ if (($shareWith !== null || $shareType === \OCP\Share::SHARE_TYPE_LINK)
+ && $shareType !== false
+ && $itemType !== false) {
+ $token = \OCP\Share::shareItem(
+ $itemType,
+ $itemSource,
+ $shareType,
+ $shareWith,
+ $permissions
+ );
+ } else {
+ $errorMessage = "You need to specify at least 'shareType' and provide a correct file/folder path."
+ . " For non public shares you also need specify 'shareWith'.";
+ }
+
+
+ if ($token) {
+ $data = null;
+ if(is_string($token)) { //public link share
+ $url = \OCP\Util::linkToPublic('files&t='.$token);
+ $data = array('url' => $url, // '&' gets encoded to $amp;
+ 'token' => $token);
+
+ }
+ return new \OC_OCS_Result($data);
+ } else {
+ return new \OC_OCS_Result(null, 404, $errorMessage);
+ }
+ }
+
+ /**
+ * @brief get file ID from a given path
+ * @param string $path
+ * @return string fileID or null
+ */
+ private static function getFileId($path) {
$view = new \OC\Files\View('/'.\OCP\User::getUser().'/files');
+ $fileId = null;
+
$fileInfo = $view->getFileInfo($path);
if ($fileInfo) {
- $share = \OCP\Share::getItemShared('file', $fileInfo['fileid']);
- } else {
- \OCP\Util::writeLog('files_sharing', 'OCS API getShare, file ' . $path . ' does not exists', \OCP\Util::WARN);
- $share = array();
+ $fileId = $fileInfo['fileid'];
+ }
+
+ return $fileId;
+ }
+
+ /**
+ * @brief get itemType
+ * @param string $path
+ * @return string type 'file', 'folder' or null of file/folder doesn't exists
+ */
+ private static function getItemType($path) {
+ $view = new \OC\Files\View('/'.\OCP\User::getUser().'/files');
+ $itemType = null;
+
+ if ($view->is_dir($path)) {
+ $itemType = "folder";
+ } elseif ($view->is_file($path)) {
+ $itemType = "file";
}
- return new \OC_OCS_Result($share);
+ return $itemType;
}
} \ No newline at end of file