From 662b7370483452b65520fed92a8924adf0df1500 Mon Sep 17 00:00:00 2001 From: Geraint White Date: Sun, 27 Jun 2021 16:12:17 +0100 Subject: [PATCH] Add `kSecAttrAccessible` to query in `getItem` (#297) Allows getting data from the keychain when the device is locked. Fixes #283 --- ios/RNSensitiveInfo/RNSensitiveInfo.m | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/ios/RNSensitiveInfo/RNSensitiveInfo.m b/ios/RNSensitiveInfo/RNSensitiveInfo.m index dd841621..951500ac 100644 --- a/ios/RNSensitiveInfo/RNSensitiveInfo.m +++ b/ios/RNSensitiveInfo/RNSensitiveInfo.m @@ -213,17 +213,12 @@ - (NSString *)messageForError:(NSError *)error [self getItemWithQuery:query resolver:resolve rejecter:reject]; }]; return; + } else if([RCTConvert NSString:options[@"kSecAttrAccessible"]] != NULL){ + CFStringRef kSecAttrAccessibleValue = convertkSecAttrAccessible([RCTConvert NSString:options[@"kSecAttrAccessible"]]); + [query setValue:(__bridge id _Nullable)(kSecAttrAccessibleValue) forKey:(NSString *)kSecAttrAccessible]; } - dispatch_async(dispatch_get_main_queue(), ^{ - if (UIApplication.sharedApplication.protectedDataAvailable) { - [self getItemWithQuery:query resolver:resolve rejecter:reject]; - } else { - // TODO: could change to instead of erroring out, listen for protectedDataDidBecomeAvailable and call getItemWIthQuery when it does - // Experiment for now by returning an error and let the js side retry - reject(@"protected_data_unavailable", @"Protected data not available yet. Retry operation", nil); - } - }); + [self getItemWithQuery:query resolver:resolve rejecter:reject]; } RCT_EXPORT_METHOD(hasItem:(NSString *)key options:(NSDictionary *)options resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject){