UNPKG

@nativescript/secure-storage

Version:

Secure Storage NativeScript plugin

207 lines 7.37 kB
import { SecureStorageCommon } from './common'; export class SecureStorage extends SecureStorageCommon { constructor(accessibilityType = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly, disableFallbackToUserDefaults = false) { super(); if (disableFallbackToUserDefaults) { this.isSimulator = false; } else { const isMinIOS9 = NSProcessInfo.processInfo.isOperatingSystemAtLeastVersion({ majorVersion: 9, minorVersion: 0, patchVersion: 0, }); if (isMinIOS9) { const simDeviceName = NSProcessInfo.processInfo.environment.objectForKey('SIMULATOR_DEVICE_NAME'); this.isSimulator = simDeviceName !== null; } else { this.isSimulator = UIDevice.currentDevice.name.toLowerCase().indexOf('simulator') > -1; } } this.accessibilityType = accessibilityType; } get(arg) { return new Promise((resolve, reject) => { if (this.isSimulator) { resolve(this.getUserDefaultsValue(arg)); return; } let query = SAMKeychainQuery.new(); query.service = arg.service || SecureStorage.defaultService; query.account = arg.key; if (arg.accessGroup) { query.accessGroup = arg.accessGroup; } try { query.fetch(); resolve(query.password); } catch (e) { resolve(null); } }); } getSync(arg) { if (this.isSimulator) { return this.getUserDefaultsValue(arg); } let query = SAMKeychainQuery.new(); query.service = arg.service || SecureStorage.defaultService; query.account = arg.key; if (arg.accessGroup) { query.accessGroup = arg.accessGroup; } try { query.fetch(); return query.password; } catch (e) { return null; } } set(arg) { return new Promise((resolve, reject) => { if (this.isSimulator) { this.setUserDefaultsValue(arg); resolve(true); return; } SAMKeychain.setAccessibilityType(this.accessibilityType); let query = SAMKeychainQuery.new(); query.service = arg.service || SecureStorage.defaultService; query.account = arg.key; query.password = arg.value; if (arg.accessGroup) { query.accessGroup = arg.accessGroup; } resolve(query.save()); }); } setSync(arg) { if (this.isSimulator) { this.setUserDefaultsValue(arg); return true; } SAMKeychain.setAccessibilityType(this.accessibilityType); let query = SAMKeychainQuery.new(); query.service = arg.service || SecureStorage.defaultService; query.account = arg.key; query.password = arg.value; if (arg.accessGroup) { query.accessGroup = arg.accessGroup; } return query.save(); } remove(arg) { return new Promise((resolve, reject) => { if (this.isSimulator) { this.removeUserDefaultsValue(arg); resolve(true); return; } let query = SAMKeychainQuery.new(); query.service = arg.service || SecureStorage.defaultService; query.account = arg.key; if (arg.accessGroup) { query.accessGroup = arg.accessGroup; } try { resolve(query.deleteItem()); } catch (e) { resolve(false); } }); } removeSync(arg) { if (this.isSimulator) { this.removeUserDefaultsValue(arg); return true; } let query = SAMKeychainQuery.new(); query.service = arg.service || SecureStorage.defaultService; query.account = arg.key; if (arg.accessGroup) { query.accessGroup = arg.accessGroup; } try { return query.deleteItem(); } catch (e) { return false; } } removeAll(arg) { return new Promise((resolve, reject) => { if (this.isSimulator) { let defaults = NSUserDefaults.standardUserDefaults; let bundleId = NSBundle.mainBundle.bundleIdentifier; defaults.removePersistentDomainForName(bundleId); resolve(true); return; } const allAccounts = SAMKeychain.allAccounts(); if (allAccounts) { for (let i = 0; i < allAccounts.count; i++) { let key = allAccounts[i].objectForKey(SecureStorage.kSSKeychainAccountKey_copy); try { let query = SAMKeychainQuery.new(); query.service = arg && arg.service ? arg.service : SecureStorage.defaultService; query.account = key; query.deleteItem(); } catch (e) { console.log('SecureStorage: Could not remove key -> ' + key); } } } resolve(true); }); } removeAllSync(arg) { if (this.isSimulator) { let defaults = NSUserDefaults.standardUserDefaults; let bundleId = NSBundle.mainBundle.bundleIdentifier; defaults.removePersistentDomainForName(bundleId); return true; } const allAccounts = SAMKeychain.allAccounts(); if (allAccounts) { for (let i = 0; i < allAccounts.count; i++) { let key = allAccounts[i].objectForKey(SecureStorage.kSSKeychainAccountKey_copy); try { let query = SAMKeychainQuery.new(); query.service = arg && arg.service ? arg.service : SecureStorage.defaultService; query.account = key; query.deleteItem(); } catch (e) { console.log('SecureStorage: Could not remove key -> ' + key); } } } return true; } setUserDefaultsValue(arg) { this.getUserDefaultToUse(arg.accessGroup).setValueForKey(arg.value, arg.key); } getUserDefaultsValue(arg) { return this.getUserDefaultToUse(arg.accessGroup).objectForKey(arg.key); } removeUserDefaultsValue(arg) { return this.getUserDefaultToUse(arg.accessGroup).removeObjectForKey(arg.key); } getUserDefaultToUse(accessGroup) { if (accessGroup) { return new NSUserDefaults({ suiteName: accessGroup }); } else { return NSUserDefaults.standardUserDefaults; } } } SecureStorage.defaultService = 'my_app'; // This is a copy of 'kSSKeychainAccountKey_copy' which is not exposed from SSKeychain.h by {N} SecureStorage.kSSKeychainAccountKey_copy = 'acct'; //# sourceMappingURL=index.ios.js.map