diff --git a/src/js/services/secureStorageService.js b/src/js/services/secureStorageService.js index 7c374521b..989c1642a 100644 --- a/src/js/services/secureStorageService.js +++ b/src/js/services/secureStorageService.js @@ -3,89 +3,87 @@ angular.module('copayApp.services').factory('secureStorageService', function($log, appConfigService, platformInfo) { var root = {}; - var ssIsReady = false; - var ssInitialisationFailed = false; - var pending = []; + function CordovaSs() { + var isReady = false; + var initialisationFailed = false; + var pending = []; + + var storage = null; - 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."); + this.get = function(key, cb) { + if (!isReady) { + if (initialisationFailed) { cb(new Error("Secure storage initialisation failed.")); } else { - $log.debug("adding get to pending."); pending.push(function(){ root.get(key, cb); }); } return + } + + storage.get( + function (value) { + cb(null, value); + }, + function (error) { + if (error.message === 'Failure in SecureStorage.get() - The specified item could not be found in the keychain' || // iOS + error.message === 'Key [_SS_profile] not found.') { // Android + // The callback expects no error, but also no value, if it cannot be found. + cb(null); + } else { + cb(new Error(error)); + } + }, + key); } - $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' || - error.message === 'Key [_SS_profile] not found.') { - $log.debug("Sending back null error."); - // The callback expects no error, but also no value, if it cannot be found. - cb(null); - } else { + this.set = function(key, value, cb) { + if (!isReady) { + if (initialisationFailed) { + cb(new Error("Secure storage initialisation failed.")); + } else { + pending.push(function(){ root.set(key, value, cb); }); + } + return + } + + storage.set( + function (value) { + cb(); + }, + function (error) { cb(new Error(error)); - } - }, - key); + }, + key, value); + } + if (platformInfo.isCordova) { + storage = new cordova.plugins.SecureStorage( + function () { + console.log('ss Success'); + isReady = true; + for (var i = 0; i < pending.length; i++) { + pending[i](); + } + spending = []; + }, + function (error) { + console.log('ss Error ' + error); + initialisationFailed = true; + }, + appConfigService.packageNameId); + } + + } + + var cordovaSs = new CordovaSs(); + + root.get = function(key, cb) { + cordovaSs.get(key, cb); }; 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); - + cordovaSs.set(key, value, cb); };