diff --git a/app-template/package-template.json b/app-template/package-template.json index 4183c33e0..3df591a53 100644 --- a/app-template/package-template.json +++ b/app-template/package-template.json @@ -77,7 +77,7 @@ "grunt-exec": "^1.0.0", "grunt-nw-builder": "^2.0.3", "grunt-sass": "^1.2.0", - "keytar": "^4.2.1", + "keytar": "git+https://github.com/spasma/node-keytar.git", "load-grunt-tasks": "^3.5.0", "shelljs": "^0.3.0", "android-versions": "^1.2.1", diff --git a/src/js/services/desktopSecureStorageService.js b/src/js/services/desktopSecureStorageService.js index 4469459c2..aeb3fa012 100644 --- a/src/js/services/desktopSecureStorageService.js +++ b/src/js/services/desktopSecureStorageService.js @@ -1,12 +1,22 @@ 'use strict'; -angular.module('copayApp.services').factory('desktopSecureStorageService', function($log, appConfigService, platformInfo, lodash) { +angular.module('copayApp.services').factory('desktopSecureStorageService', function($log, appConfigService, platformInfo, lodash, localStorageService) { var root = {}; var storage = null; var serviceName = appConfigService.packageNameId; + var initialisationFailed = false; if (platformInfo.isNW) { - storage = require('keytar'); + try { + var os = require('os'); + var arch = (os.arch() === 'x64' || process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432')) ? 'x64':'ia32'; + var file = './keytar/keytar-prebuild-v4.1.1-node-v51-'+process.platform+'-'+arch+'.node'; + storage = require('keytar'); + storage.setKeytarInstance(require(file)); + } catch (e) { + console.log(e); + initialisationFailed = true; + } } root.get = function(key, cb) { @@ -15,6 +25,9 @@ angular.module('copayApp.services').factory('desktopSecureStorageService', funct return; } + if (initialisationFailed) + return localStorageService.get(key, cb); + storage.getPassword(serviceName, key).then(function(result) { return cb(null, result); // XX SP: result is null if no value is found as it should }).catch(function (error) { @@ -28,6 +41,9 @@ angular.module('copayApp.services').factory('desktopSecureStorageService', funct return; } + if (initialisationFailed) + return localStorageService.set(key, value, cb); + if (lodash.isObject(value)) { value = JSON.stringify(value); }