diff --git a/changelog/unreleased/enhancement-share-spaces b/changelog/unreleased/enhancement-share-spaces
new file mode 100644
index 000000000..63f16ab77
--- /dev/null
+++ b/changelog/unreleased/enhancement-share-spaces
@@ -0,0 +1,5 @@
+Enhancement: Adjust share management to properly work with spaces
+
+This includes a new method `shareSpaceWithUser` as well as the possibility to pass URL params to the `deleteShare` method.
+
+https://github.com/owncloud/owncloud-sdk/pull/1013
diff --git a/package.json b/package.json
index 83996a830..e080ddfde 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "owncloud-sdk",
- "version": "2.0.1",
+ "version": "2.1.0-alpha.1",
"description": "ownCloud client library for JavaScript",
"keywords": [
"owncloud",
diff --git a/src/helperFunctions.js b/src/helperFunctions.js
index 7c5790613..7ff68bf6b 100644
--- a/src/helperFunctions.js
+++ b/src/helperFunctions.js
@@ -29,6 +29,7 @@ class helpers {
this.OCS_SHARE_TYPE_GROUP = 1
this.OCS_SHARE_TYPE_LINK = 3
this.OCS_SHARE_TYPE_REMOTE = 6
+ this.OCS_SHARE_TYPE_SPACE = 7
this.instance = null
this._authHeader = null
diff --git a/src/shareManagement.js b/src/shareManagement.js
index 99e664bbe..0a1f4c97b 100644
--- a/src/shareManagement.js
+++ b/src/shareManagement.js
@@ -13,6 +13,7 @@ const ShareInfo = require('./shareInfo.js')
*
shareFileWithLink
* updateShare
* shareFileWithUser
+ * shareSpaceWithUser
* shareFileWithGroup
* getShares
* isShared
@@ -90,28 +91,47 @@ class Shares {
shareFileWithUser (path, username, optionalParams) {
path = this.helpers._normalizePath(path)
- const postData = {
+ let postData = {
shareType: this.helpers.OCS_SHARE_TYPE_USER,
shareWith: username,
path: path
}
if (optionalParams) {
- if (optionalParams.permissions) {
- postData.permissions = optionalParams.permissions
- }
+ postData = { ...postData, ...this._getOptionalParams(optionalParams) }
+ }
- if (optionalParams.expirationDate) {
- postData.expireDate = optionalParams.expirationDate
- }
+ return this.helpers._makeOCSrequest('POST', this.helpers.OCS_SERVICE_SHARE, 'shares', postData)
+ .then(data => {
+ const shareData = data.data.ocs.data
+ const share = new ShareInfo(shareData)
- if (optionalParams.attributes) {
- postData.attributes = optionalParams.attributes
- }
+ return Promise.resolve(share)
+ })
+ }
- if (optionalParams.remoteUser) {
- postData.shareType = this.helpers.OCS_SHARE_TYPE_REMOTE
- }
+ /**
+ * Shares a space with specified user
+ * @param {string} path path to the remote file share
+ * @param {string} username name of the user to share with
+ * @param {string} spaceId id of the space
+ * @param {object} optionalParams {permissions: integer, expirationDate: ISO Date, remoteUser: boolean, attributes: assoc array (at free disposal)}
+ * @returns {Promise.} instance of class ShareInfo
+ * @returns {Promise.} string: error message, if any.
+ */
+ shareSpaceWithUser (path, username, spaceId, optionalParams) {
+ let postData = {
+ shareType: this.helpers.OCS_SHARE_TYPE_SPACE,
+ shareWith: username,
+ space_ref: spaceId
+ }
+
+ if (path) {
+ postData.path = this.helpers._normalizePath(path)
+ }
+
+ if (optionalParams) {
+ postData = { ...postData, ...this._getOptionalParams(optionalParams) }
}
return this.helpers._makeOCSrequest('POST', this.helpers.OCS_SERVICE_SHARE, 'shares', postData)
@@ -134,24 +154,14 @@ class Shares {
shareFileWithGroup (path, groupName, optionalParams) {
path = this.helpers._normalizePath(path)
- const postData = {
+ let postData = {
shareType: this.helpers.OCS_SHARE_TYPE_GROUP,
shareWith: groupName,
path: path
}
if (optionalParams) {
- if (optionalParams.permissions) {
- postData.permissions = optionalParams.permissions
- }
-
- if (optionalParams.expirationDate) {
- postData.expireDate = optionalParams.expirationDate
- }
-
- if (optionalParams.attributes) {
- postData.attributes = optionalParams.attributes
- }
+ postData = { ...postData, ...this._getOptionalParams(optionalParams) }
}
return this.helpers._makeOCSrequest('POST', this.helpers.OCS_SERVICE_SHARE, 'shares', postData)
@@ -371,14 +381,23 @@ class Shares {
/**
* Deletes a share
* @param {number} shareId ID of the share to delete
+ * @param {object} urlParams {shareWith: string}
* @returns {Promise.} boolean: true if successful
* @returns {Promise.} string: error message, if any.
*/
- deleteShare (shareId) {
+ deleteShare (shareId, urlParams) {
+ let urlParamString = ''
+ if (urlParams) {
+ urlParamString = '?'
+ if (urlParams.shareWith) {
+ urlParamString += `shareWith=${urlParams.shareWith}`
+ }
+ }
+
return new Promise((resolve, reject) => {
/* jshint unused: false */
this.helpers._makeOCSrequest('DELETE', this.helpers.OCS_SERVICE_SHARE,
- 'shares/' + encodeURIComponent(shareId.toString())
+ 'shares/' + encodeURIComponent(shareId.toString()) + urlParamString
).then(() => {
resolve(true)
}).catch(error => {
@@ -420,6 +439,31 @@ class Shares {
return json.ocs.data
})
}
+
+ /**
+ * @param {object} optionalParams
+ * @returns {object}
+ */
+ _getOptionalParams (optionalParams) {
+ const data = {}
+ if (optionalParams.permissions) {
+ data.permissions = optionalParams.permissions
+ }
+
+ if (optionalParams.expirationDate) {
+ data.expireDate = optionalParams.expirationDate
+ }
+
+ if (optionalParams.attributes) {
+ data.attributes = optionalParams.attributes
+ }
+
+ if (optionalParams.remoteUser) {
+ data.shareType = this.helpers.OCS_SHARE_TYPE_REMOTE
+ }
+
+ return data
+ }
}
module.exports = Shares