From fd01df6e012718df4e038635205e22f45fb3ca90 Mon Sep 17 00:00:00 2001 From: Mo Bitar Date: Sat, 5 May 2018 23:53:38 -0500 Subject: [PATCH] ComponentManager create-items message, encrypt server extensions for backup files, batch manager user prefs permission --- .../app/models/local/itemParams.js | 4 +- .../app/services/componentManager.js | 40 +++++++++++++------ .../app/services/nativeExtManager.js | 2 +- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/app/models/local/itemParams.js b/app/assets/javascripts/app/models/local/itemParams.js index a1cb83e18..c669080bf 100644 --- a/app/assets/javascripts/app/models/local/itemParams.js +++ b/app/assets/javascripts/app/models/local/itemParams.js @@ -36,7 +36,9 @@ class ItemParams { var params = {uuid: this.item.uuid, content_type: this.item.content_type, deleted: this.item.deleted, created_at: this.item.created_at}; if(!this.item.errorDecrypting) { - if(this.keys && !this.item.doNotEncrypt()) { + // Items should always be encrypted for export files. Only respect item.doNotEncrypt for remote sync params; + var doNotEncrypt = this.item.doNotEncrypt() && !this.forExportFile; + if(this.keys && !doNotEncrypt) { var encryptedParams = EncryptionHelper.encryptItem(this.item, this.keys, this.version); _.merge(params, encryptedParams); diff --git a/app/assets/javascripts/app/services/componentManager.js b/app/assets/javascripts/app/services/componentManager.js index 2e0e1d419..484f0589c 100644 --- a/app/assets/javascripts/app/services/componentManager.js +++ b/app/assets/javascripts/app/services/componentManager.js @@ -286,6 +286,7 @@ class ComponentManager { deassociate-item clear-selection create-item + create-items delete-items set-component-data install-local-component @@ -301,8 +302,8 @@ class ComponentManager { this.handleSetComponentDataMessage(component, message); } else if(message.action === "delete-items") { this.handleDeleteItemsMessage(component, message); - } else if(message.action === "create-item") { - this.handleCreateItemMessage(component, message); + } else if(message.action === "create-items" || message.action === "create-item") { + this.handleCreateItemsMessage(component, message); } else if(message.action === "save-items") { this.handleSaveItemsMessage(component, message); } else if(message.action === "toggle-activate-component") { @@ -470,26 +471,39 @@ class ComponentManager { }); } - handleCreateItemMessage(component, message) { + handleCreateItemsMessage(component, message) { + var responseItems = message.data.item ? [message.data.item] : message.data.items; + let uniqueContentTypes = _.uniq(responseItems.map((item) => {return item.content_type})); var requiredPermissions = [ { name: "stream-items", - content_types: [message.data.item.content_type] + content_types: uniqueContentTypes } ]; this.runWithPermissions(component, requiredPermissions, () => { - var responseItem = message.data.item; - this.removePrivatePropertiesFromResponseItems([responseItem], component); - var item = this.modelManager.createItem(responseItem); - if(responseItem.clientData) { - item.setDomainDataItem(component.url || component.uuid, responseItem.clientData, ClientDataDomain); + this.removePrivatePropertiesFromResponseItems(responseItems, component); + var processedItems = []; + for(let responseItem of responseItems) { + var item = this.modelManager.createItem(responseItem); + if(responseItem.clientData) { + item.setDomainDataItem(component.url || component.uuid, responseItem.clientData, ClientDataDomain); + } + this.modelManager.addItem(item); + this.modelManager.resolveReferencesForItem(item, true); + item.setDirty(true); + processedItems.push(item); } - this.modelManager.addItem(item); - this.modelManager.resolveReferencesForItem(item, true); - item.setDirty(true); + this.syncManager.sync("handleCreateItemMessage"); - this.replyToMessage(component, message, {item: this.jsonForItem(item, component)}) + + let reply = + message.action == "save-item" ? + {item: this.jsonForItem(processedItems[0], component)} + : + {items: processedItems.map((item) => {return this.jsonForItem(item, component)})} + + this.replyToMessage(component, message, reply) }); } diff --git a/app/assets/javascripts/app/services/nativeExtManager.js b/app/assets/javascripts/app/services/nativeExtManager.js index 88620287a..801ac21d3 100644 --- a/app/assets/javascripts/app/services/nativeExtManager.js +++ b/app/assets/javascripts/app/services/nativeExtManager.js @@ -135,7 +135,7 @@ class NativeExtManager { permissions: [ { name: "stream-items", - content_types: ["Note", "Tag", "SN|Component", "SN|Theme", "SF|Extension", "Extension", "SF|MFA", "SN|Editor"] + content_types: ["Note", "Tag", "SN|Component", "SN|Theme", "SF|Extension", "Extension", "SF|MFA", "SN|Editor", "SN|UserPreferences"] } ] }