diff --git a/apps/desktop/desktop_native/objc/src/native/autofill/commands/user_verification.h b/apps/desktop/desktop_native/objc/src/native/autofill/commands/user_verification.h new file mode 100644 index 00000000000..33e87142e36 --- /dev/null +++ b/apps/desktop/desktop_native/objc/src/native/autofill/commands/user_verification.h @@ -0,0 +1,8 @@ +#ifndef USER_VERIFICATION_H +#define USER_VERIFICATION_H + +#import + +void userVerification(void *context, NSDictionary *params); + +#endif diff --git a/apps/desktop/desktop_native/objc/src/native/autofill/commands/user_verification.m b/apps/desktop/desktop_native/objc/src/native/autofill/commands/user_verification.m new file mode 100644 index 00000000000..066c769586b --- /dev/null +++ b/apps/desktop/desktop_native/objc/src/native/autofill/commands/user_verification.m @@ -0,0 +1,26 @@ +#import +#import +#import +#import "../../utils.h" +#import "../../interop.h" +#import "user_verification.h" + +void userVerification(void* context, NSDictionary *params) { + // TODO: Make this more functional by using LAAuthenticationView from @import LocalAuthenticationEmbeddedUI; + LAContext *uvContext = [[LAContext alloc] init]; + uvContext.localizedCancelTitle = @"Enter Password"; + LAPolicy policy = LAPolicyDeviceOwnerAuthentication; + NSError *error; + if (![uvContext canEvaluatePolicy: policy error:&error]) { + NSLog(@"Could not evaluate UV policy: %@", [error localizedDescription]); + return _return(context, _error_er(error)); + } + + NSString *displayHint = params[@"displayHint"]; + [uvContext evaluatePolicy:policy localizedReason:displayHint reply:^(BOOL success, NSError * _Nullable error) { + if (!success) { + return _return(context, _error_er(error)); + } + _return(context, _success(@{})); + }]; +} diff --git a/apps/desktop/desktop_native/objc/src/native/autofill/run_autofill_command.m b/apps/desktop/desktop_native/objc/src/native/autofill/run_autofill_command.m index 46b188139bc..551d66a5d62 100644 --- a/apps/desktop/desktop_native/objc/src/native/autofill/run_autofill_command.m +++ b/apps/desktop/desktop_native/objc/src/native/autofill/run_autofill_command.m @@ -1,6 +1,7 @@ #import #import "commands/sync.h" #import "commands/status.h" +#import "commands/user_verification.h" #import "../interop.h" #import "../utils.h" #import "run_autofill_command.h" @@ -14,6 +15,9 @@ void runAutofillCommand(void* context, NSDictionary *input) { } else if ([command isEqual:@"sync"]) { return runSync(context, params); } + else if ([command isEqual:@"user-verification"]) { + return userVerification(context, params); + } _return(context, _error([NSString stringWithFormat:@"Unknown command: %@", command])); }