diff --git a/app-template/config-template.xml b/app-template/config-template.xml
index 8031c8110..e348cbe52 100644
--- a/app-template/config-template.xml
+++ b/app-template/config-template.xml
@@ -72,6 +72,7 @@
+
diff --git a/src/js/services/secureStorageService.js b/src/js/services/secureStorageService.js
new file mode 100644
index 000000000..2c3a94703
--- /dev/null
+++ b/src/js/services/secureStorageService.js
@@ -0,0 +1,93 @@
+'use strict';
+
+angular.module('copayApp.services').factory('secureStorageService', function($log, appConfigService, platformInfo) {
+ var root = {};
+
+ var ssIsReady = false;
+ var ssInitialisationFailed = false;
+ var pending = [];
+
+ var ss = new cordova.plugins.SecureStorage(
+ function () {
+ console.log('ss Success');
+ ssIsReady = true;
+ for (var i = 0; i < pending.length; i++) {
+ pending[i]();
+ }
+ pending = [];
+ },
+ function (error) {
+ console.log('ss Error ' + error);
+ ssInitialisationFailed = true;
+ },
+ appConfigService.packageNameId);
+
+
+
+ root.get = function(key, cb) {
+ $log.debug('secureStorageService.get()');
+ if (!ssIsReady) {
+ $log.debug("ss not ready.");
+ if (ssInitialisationFailed) {
+ $log.debug("returning error because initialisation failed.");
+ cb(new Error("Secure storage initialisation failed."));
+ } else {
+ $log.debug("adding get to pending.");
+ pending.push(function(){ root.get(key, cb); });
+ }
+ return
+ }
+ $log.debug("ss is ready.");
+
+ ss.get(
+ function (value) {
+ console.log('ss Success, got ' + value);
+ cb(null, value);
+ },
+ function (error) {
+ console.log('ss Error "' + error.message + '" ' + JSON.stringify(error));
+
+ if (error.message === 'Failure in SecureStorage.get() - The specified item could not be found in the keychain') {
+ $log.debug("Sending back null error.");
+ // The callback expects no error, but also no value, if it cannot be found.
+ cb(null);
+ } else {
+ cb(new Error(error));
+ }
+ },
+ key);
+
+ };
+
+ root.set = function(key, value, cb) {
+ $log.debug('secureStorageService.set()');
+ if (!ssIsReady) {
+ $log.debug("ss not ready.");
+ if (ssInitialisationFailed) {
+ $log.debug("returning error because initialisation failed.");
+ cb(new Error("Secure storage initialisation failed."));
+ } else {
+ $log.debug("adding set to pending.");
+ pending.push(function(){ root.set(key, value, cb); });
+ }
+ return
+ }
+ $log.debug("ss is ready.");
+
+ ss.set(
+ function (value) {
+ console.log('ss Success, got ' + value);
+ cb();
+ },
+ function (error) {
+ console.log('ss Error ' + error);
+ cb(new Error(error));
+ },
+ key, value);
+
+ };
+
+
+ return root;
+});
+
diff --git a/src/js/services/storageService.js b/src/js/services/storageService.js
index 3d1ecfeef..05bf51a7a 100644
--- a/src/js/services/storageService.js
+++ b/src/js/services/storageService.js
@@ -1,6 +1,6 @@
'use strict';
angular.module('copayApp.services')
- .factory('storageService', function(logHeader, fileStorageService, localStorageService, sjcl, $log, lodash, platformInfo, $timeout) {
+ .factory('storageService', function(logHeader, fileStorageService, localStorageService, sjcl, $log, lodash, platformInfo, secureStorageService, $timeout) {
var root = {};
var storage;
@@ -116,15 +116,21 @@ angular.module('copayApp.services')
};
root.storeNewProfile = function(profile, cb) {
- storage.create('profile', profile.toObj(), cb);
+ //storage.create('profile', profile.toObj(), cb);
+ secureStorageService.set('profile', profile.toObj(), cb);
};
root.storeProfile = function(profile, cb) {
- storage.set('profile', profile.toObj(), cb);
+ //storage.set('profile', profile.toObj(), cb);
+ secureStorageService.set('profile', profile.toObj(), cb);
};
root.getProfile = function(cb) {
- storage.get('profile', function(err, str) {
+ $log.debug("getProfile() 31 7");
+
+ //storage.get('profile', function(err, str) {
+ secureStorageService.get('profile', function(err, str) {
+
if (err || !str)
return cb(err);