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