From 1ad0bf73d8e995b7588854f1b1e4e4a02303a42f Mon Sep 17 00:00:00 2001 From: Mo Bitar Date: Wed, 26 Jul 2017 18:37:35 -0500 Subject: [PATCH] Dynamic SF|Extension registration, handle 000 decode --- .../app/frontend/controllers/_base.js | 9 +++++++++ .../app/frontend/models/api/syncAdapter.js | 5 +---- .../directives/views/globalExtensionsMenu.js | 3 ++- .../app/services/helpers/encryptionHelper.js | 19 +++++++++++-------- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/app/frontend/controllers/_base.js b/app/assets/javascripts/app/frontend/controllers/_base.js index df67c62ca..920ae9358 100644 --- a/app/assets/javascripts/app/frontend/controllers/_base.js +++ b/app/assets/javascripts/app/frontend/controllers/_base.js @@ -22,4 +22,13 @@ function getParameterByName(name, url) { return decodeURIComponent(results[2].replace(/\+/g, " ")); } +function parametersFromURL(url) { + url = url.split("?").slice(-1)[0]; + var obj = {}; + url.replace(/([^=&]+)=([^&]*)/g, function(m, key, value) { + obj[decodeURIComponent(key)] = decodeURIComponent(value); + }); + return obj; +} + angular.module('app.frontend').controller('BaseCtrl', BaseCtrl); diff --git a/app/assets/javascripts/app/frontend/models/api/syncAdapter.js b/app/assets/javascripts/app/frontend/models/api/syncAdapter.js index a332c69fa..4c3ce2a3a 100644 --- a/app/assets/javascripts/app/frontend/models/api/syncAdapter.js +++ b/app/assets/javascripts/app/frontend/models/api/syncAdapter.js @@ -10,10 +10,7 @@ class SyncAdapter extends Item { } structureParams() { - var params = { - url: this.url, - }; - + var params = this.content || {}; _.merge(params, super.structureParams()); return params; } diff --git a/app/assets/javascripts/app/services/directives/views/globalExtensionsMenu.js b/app/assets/javascripts/app/services/directives/views/globalExtensionsMenu.js index e48ddf9e4..8fd34d12c 100644 --- a/app/assets/javascripts/app/services/directives/views/globalExtensionsMenu.js +++ b/app/assets/javascripts/app/services/directives/views/globalExtensionsMenu.js @@ -120,7 +120,8 @@ class GlobalExtensionsMenu { } $scope.handleSyncAdapterLink = function(link, completion) { - var ext = new SyncAdapter({url: link}); + var params = parametersFromURL(link); + var ext = new SyncAdapter({content: params}); ext.setDirty(true); modelManager.addItem(ext); syncManager.sync(); diff --git a/app/assets/javascripts/app/services/helpers/encryptionHelper.js b/app/assets/javascripts/app/services/helpers/encryptionHelper.js index 521af1991..3b97a66e7 100644 --- a/app/assets/javascripts/app/services/helpers/encryptionHelper.js +++ b/app/assets/javascripts/app/services/helpers/encryptionHelper.js @@ -68,6 +68,15 @@ class EncryptionHelper { } static decryptItem(item, keys) { + + if((item.content.startsWith("001") || item.content.startsWith("002")) && item.enc_item_key) { + // is encrypted, continue to below + } else { + // is base64 encoded + item.content = Neeto.crypto.base64Decode(item.content.substring(3, item.content.length)) + return; + } + // decrypt encrypted key var encryptedItemKey = item.enc_item_key; var requiresAuth = true; @@ -123,19 +132,13 @@ class EncryptionHelper { var isString = typeof item.content === 'string' || item.content instanceof String; if(isString) { try { - if((item.content.startsWith("001") || item.content.startsWith("002")) && item.enc_item_key) { - // is encrypted - this.decryptItem(item, keys); - } else { - // is base64 encoded - item.content = Neeto.crypto.base64Decode(item.content.substring(3, item.content.length)) - } + this.decryptItem(item, keys); } catch (e) { item.errorDecrypting = true; if(throws) { throw e; } - console.log("Error decrypting item", item, e); + console.error("Error decrypting item", item, e); continue; } }