diff --git a/MacPass/MPDocumentWindowController.m b/MacPass/MPDocumentWindowController.m index 05dbc999..4997c2f8 100644 --- a/MacPass/MPDocumentWindowController.m +++ b/MacPass/MPDocumentWindowController.m @@ -323,7 +323,10 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword); self.passwordInputController = [[MPPasswordInputController alloc] init]; } [self _setContentViewController:self.passwordInputController]; - [self.passwordInputController requestPassword]; + __weak MPDocumentWindowController *welf = self; + [self.passwordInputController requestPassword:^BOOL(NSString *password, NSURL *keyURL, NSError *__autoreleasing *error) { + return [((MPDocument *)welf.document) unlockWithPassword:password keyFileURL:keyURL error:error]; + }]; } - (void)editPassword:(id)sender { diff --git a/MacPass/MPPasswordInputController.h b/MacPass/MPPasswordInputController.h index 732fff81..a00feb70 100644 --- a/MacPass/MPPasswordInputController.h +++ b/MacPass/MPPasswordInputController.h @@ -8,8 +8,12 @@ #import "MPViewController.h" +@class KPKCompositeKey; + @interface MPPasswordInputController : MPViewController -- (void)requestPassword; +typedef BOOL (^passwordInputCompletionBlock)(NSString *password, NSURL *keyURL, NSError *__autoreleasing*error); + +- (void)requestPassword:(passwordInputCompletionBlock)completionHandler; @end diff --git a/MacPass/MPPasswordInputController.m b/MacPass/MPPasswordInputController.m index 5a4992b1..04402688 100644 --- a/MacPass/MPPasswordInputController.m +++ b/MacPass/MPPasswordInputController.m @@ -29,7 +29,7 @@ @property (assign) BOOL showPassword; @property (nonatomic, assign) BOOL enablePassword; - +@property (copy) passwordInputCompletionBlock completionHandler; @end @implementation MPPasswordInputController @@ -66,8 +66,8 @@ return self.passwordTextField; } -- (void)requestPassword { - // show warning if read-only mode! +- (void)requestPassword:(passwordInputCompletionBlock)completionHandler { + self.completionHandler = completionHandler; [self _reset]; } @@ -87,15 +87,12 @@ #pragma mark - #pragma mark Private - (IBAction)_decrypt:(id)sender { - /* reset show password */ - MPDocument *document = self.windowController.document; - if(document) { - NSError *error = nil; - /* No password is different than an empty password */ - NSString *password = self.enablePassword ? self.passwordTextField.stringValue : nil; - if(![document unlockWithPassword:password - keyFileURL:self.keyPathControl.URL - error:&error]) { + + NSError *error = nil; + /* No password is different than an empty password */ + NSString *password = self.enablePassword ? self.passwordTextField.stringValue : nil; + if(self.completionHandler) { + if(!self.completionHandler(password, self.keyPathControl.URL, &error)) { [self _showError:error]; [self.view.window shakeWindow:nil]; }