diff --git a/app/assets/javascripts/app/app.frontend.js b/app/assets/javascripts/app/app.frontend.js index 7159af495..f19dfe4fd 100644 --- a/app/assets/javascripts/app/app.frontend.js +++ b/app/assets/javascripts/app/app.frontend.js @@ -2,7 +2,11 @@ var Neeto = Neeto || {}; -if(window.crypto.subtle) { +// detect IE8 and above, and edge. +// IE and Edge do not support pbkdf2 in WebCrypto, therefore we need to use CryptoJS +var IEOrEdge = document.documentMode || /Edge/.test(navigator.userAgent); + +if(!IEOrEdge && (window.crypto && window.crypto.subtle)) { Neeto.crypto = new SNCryptoWeb(); } else { Neeto.crypto = new SNCryptoJS(); diff --git a/app/assets/javascripts/app/frontend/models/api/item.js b/app/assets/javascripts/app/frontend/models/api/item.js index e54468388..90c180943 100644 --- a/app/assets/javascripts/app/frontend/models/api/item.js +++ b/app/assets/javascripts/app/frontend/models/api/item.js @@ -27,7 +27,12 @@ class Item { return this.content; } - return JSON.parse(this.content); + try { + return JSON.parse(this.content); + } catch (e) { + console.log("Error parsing json", e); + return {}; + } } updateFromJSON(json) { diff --git a/app/assets/javascripts/app/services/apiController.js b/app/assets/javascripts/app/services/apiController.js index 3f02488f6..7c4e163b1 100644 --- a/app/assets/javascripts/app/services/apiController.js +++ b/app/assets/javascripts/app/services/apiController.js @@ -90,7 +90,7 @@ angular.module('app.frontend') // if user has high password cost and is using browser that doesn't support WebCrypto, // we want to tell them that they can't login with this browser. if(cost > 5000) { - return window.crypto.subtle ? true : false; + return Neeto.crypto instanceof SNCryptoWeb ? true : false; } else { return true; } @@ -581,7 +581,7 @@ angular.module('app.frontend') item.content = Neeto.crypto.base64Decode(item.content.substring(3, item.content.length)) } } catch (e) { - console.log("Error decrypting item", item); + console.log("Error decrypting item", item, e); continue; } } diff --git a/app/assets/javascripts/app/services/extensionManager.js b/app/assets/javascripts/app/services/extensionManager.js index b31997fda..e06aa527b 100644 --- a/app/assets/javascripts/app/services/extensionManager.js +++ b/app/assets/javascripts/app/services/extensionManager.js @@ -13,7 +13,7 @@ class ExtensionManager { ext.encrypted = this.extensionUsesEncryptedData(ext); for (var action of ext.actions) { - if(this.enabledRepeatActionUrls.includes(action.url)) { + if(_.includes(this.enabledRepeatActionUrls, action.url)) { this.enableRepeatAction(action, ext); } } @@ -38,7 +38,7 @@ class ExtensionManager { } extensionUsesEncryptedData(extension) { - return !this.decryptedExtensions.includes(extension.url); + return !_.includes(this.decryptedExtensions, extension.url); } changeExtensionEncryptionFormat(encrypted, extension) { @@ -174,7 +174,7 @@ class ExtensionManager { } isRepeatActionEnabled(action) { - return this.enabledRepeatActionUrls.includes(action.url); + return _.includes(this.enabledRepeatActionUrls, action.url); } disableRepeatAction(action, extension) { diff --git a/app/assets/javascripts/app/services/helpers/webcrypto.js b/app/assets/javascripts/app/services/helpers/webcrypto.js index e72fbca02..d4c015942 100644 --- a/app/assets/javascripts/app/services/helpers/webcrypto.js +++ b/app/assets/javascripts/app/services/helpers/webcrypto.js @@ -1,4 +1,4 @@ -var subtleCrypto = window.crypto.subtle; +var subtleCrypto = window.crypto ? window.crypto.subtle : null; class SNCryptoWeb extends SNCrypto { @@ -89,8 +89,16 @@ class SNCryptoWeb extends SNCrypto { } stringToArrayBuffer(string) { - var encoder = new TextEncoder("utf-8"); - return encoder.encode(string); + // not available on Edge/IE + // var encoder = new TextEncoder("utf-8"); + // var result = encoder.encode(string); + + var buf = new ArrayBuffer(string.length); + var bufView = new Uint8Array(buf); + for (var i=0, strLen=string.length; i 0) { diff --git a/app/views/application/frontend.html.erb b/app/views/application/frontend.html.erb index 429187e7f..5e965dc17 100644 --- a/app/views/application/frontend.html.erb +++ b/app/views/application/frontend.html.erb @@ -1,4 +1,4 @@ - +