@nativescript/secure-storage
Version:
Secure Storage NativeScript plugin
207 lines • 7.37 kB
JavaScript
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