'use strict'; angular.module('copayApp.services').factory('mobileSecureStorageService', function($log, appConfigService, platformInfo) { var root = {}; var isReady = false; var initialisationFailed = false; var pending = []; var storage = null; this.get = function(key, cb) { if (!isReady) { if (initialisationFailed) { cb(new Error("mobileSecureStorageService initialisation failed.")); } else { 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, null); } else { cb(new Error(error)); } }, key); } this.set = function(key, value, cb) { if (!isReady) { if (initialisationFailed) { cb(new Error("mobileSecureStorageService initialisation failed.")); } else { pending.push(function(){ root.set(key, value, cb); }); } return } storage.set( function (value) { cb(); }, function (error) { cb(new Error(error)); }, key, value); } if (platformInfo.isCordova) { storage = new cordova.plugins.SecureStorage( function () { $log.debug('mobileSecureStorageService initialised.'); isReady = true; for (var i = 0; i < pending.length; i++) { pending[i](); } pending = []; }, function (error) { c$log.debug('mobileSecureStorageService initialisation failed. ' + error); initialisationFailed = true; }, appConfigService.packageNameId); } root.get = function(key, cb) { if (platformInfo.isMobile) { storage.get(key, cb); } else { cb(new Error('mobileSecureStorageService is only available on mobile.')); } }; root.set = function(key, value, cb) { if (platformInfo.isMobile) { storage.set(key, v, cb); } else { cb(new Error('mobileSecureStorageService is only available on mobile.')); } }; return root; });