Skip to content
This repository was archived by the owner on Nov 7, 2023. It is now read-only.
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions ios/RNEncryptedStorage.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,32 +30,32 @@ + (BOOL)requiresMainQueueSetup
RCT_EXPORT_METHOD(setItem:(NSString *)key withValue:(NSString *)value resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{
NSData* dataFromValue = [value dataUsingEncoding:NSUTF8StringEncoding];

if (dataFromValue == nil) {
NSError* error = [NSError errorWithDomain:[[NSBundle mainBundle] bundleIdentifier] code:0 userInfo: nil];
rejectPromise(@"An error occured while parsing value", error, reject);
rejectPromise([NSString stringWithFormat:@"An error occurred while parsing value for key: %@", key], error, reject);
return;
}

// Prepares the insert query structure
NSDictionary* storeQuery = @{
(__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrAccount : key,
(__bridge id)kSecValueData : dataFromValue
};

// Deletes the existing item prior to inserting the new one
SecItemDelete((__bridge CFDictionaryRef)storeQuery);

OSStatus insertStatus = SecItemAdd((__bridge CFDictionaryRef)storeQuery, nil);

if (insertStatus == noErr) {
resolve(value);
}

else {
NSError* error = [NSError errorWithDomain:[[NSBundle mainBundle] bundleIdentifier] code:insertStatus userInfo: nil];
rejectPromise(@"An error occured while saving value", error, reject);
rejectPromise([NSString stringWithFormat:@"An error occurred while saving value for key: %@", key], error, reject);
}
}

Expand All @@ -67,10 +67,10 @@ + (BOOL)requiresMainQueueSetup
(__bridge id)kSecReturnData : (__bridge id)kCFBooleanTrue,
(__bridge id)kSecMatchLimit : (__bridge id)kSecMatchLimitOne
};

CFTypeRef dataRef = NULL;
OSStatus getStatus = SecItemCopyMatching((__bridge CFDictionaryRef)getQuery, &dataRef);

if (getStatus == errSecSuccess) {
NSString* storedValue = [[NSString alloc] initWithData: (__bridge NSData*)dataRef encoding: NSUTF8StringEncoding];
resolve(storedValue);
Expand All @@ -79,10 +79,10 @@ + (BOOL)requiresMainQueueSetup
else if (getStatus == errSecItemNotFound) {
resolve(nil);
}

else {
NSError* error = [NSError errorWithDomain: [[NSBundle mainBundle] bundleIdentifier] code:getStatus userInfo:nil];
rejectPromise(@"An error occured while retrieving value", error, reject);
rejectPromise([NSString stringWithFormat:@"An error occurred while retrieving value for key: %@", key], error, reject);
}
}

Expand All @@ -93,16 +93,16 @@ + (BOOL)requiresMainQueueSetup
(__bridge id)kSecAttrAccount : key,
(__bridge id)kSecReturnData : (__bridge id)kCFBooleanTrue
};

OSStatus removeStatus = SecItemDelete((__bridge CFDictionaryRef)removeQuery);

if (removeStatus == noErr) {
resolve(key);
}

else {
NSError* error = [NSError errorWithDomain:[[NSBundle mainBundle] bundleIdentifier] code:removeStatus userInfo: nil];
rejectPromise(@"An error occured while removing value", error, reject);
rejectPromise([NSString stringWithFormat:@"An error occurred while removing value for key: %@", key], error, reject);
}
}

Expand All @@ -115,13 +115,13 @@ + (BOOL)requiresMainQueueSetup
(__bridge id)kSecClassKey,
(__bridge id)kSecClassIdentity
];

// Maps through all Keychain classes and deletes all items that match
for (id secItemClass in secItemClasses) {
NSDictionary *spec = @{(__bridge id)kSecClass: secItemClass};
SecItemDelete((__bridge CFDictionaryRef)spec);
}

resolve(nil);
}
@end
@end