From c4d9c10cb88ff8c6e85853fa7ec597f85e1cb192 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Fri, 17 Jul 2020 14:23:26 +0200 Subject: [PATCH] Enabled display of prettified passwords ind password generator and entry inspector --- MacPass/MPEntryInspectorViewController.m | 8 +++++--- MacPass/MPPasswordCreatorViewController.m | 5 +++-- MacPass/MPPrettyPasswordTransformer.m | 10 ++++++++++ MacPass/NSString+MPPrettyPasswordDisplay.m | 17 +++++++---------- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/MacPass/MPEntryInspectorViewController.m b/MacPass/MPEntryInspectorViewController.m index a8c65356..d98cea91 100644 --- a/MacPass/MPEntryInspectorViewController.m +++ b/MacPass/MPEntryInspectorViewController.m @@ -469,6 +469,8 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) { /* general */ NSDictionary *nullPlaceholderBindingOptionsDict = @{ NSNullPlaceholderBindingOption: NSLocalizedString(@"NONE", "Placeholder text for input fields if no entry or group is selected")}; + NSDictionary *prettyPasswordBindingOptionsDict = @{ NSNullPlaceholderBindingOption: nullPlaceholderBindingOptionsDict[NSNullPlaceholderBindingOption], NSValueTransformerNameBindingOption : MPPrettyPasswordTransformerName }; + [self.titleTextField bind:NSValueBinding toObject:self withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(title))] @@ -476,7 +478,8 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) { [self.passwordTextField bind:NSValueBinding toObject:self withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(password))] - options:nullPlaceholderBindingOptionsDict]; + options:prettyPasswordBindingOptionsDict]; + [self.usernameTextField bind:NSValueBinding toObject:self withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(username))] @@ -636,7 +639,7 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) { } - (IBAction)toggleExpire:(NSButton*)sender { - if([sender state] == NSOnState && [self.representedEntry.timeInfo.expirationDate isEqualToDate:[NSDate distantFuture]]) { + if([sender state] == NSOnState && [self.representedEntry.timeInfo.expirationDate isEqualToDate:NSDate.distantFuture]) { [NSApp sendAction:self.pickExpireDateButton.action to:nil from:self.pickExpireDateButton]; } } @@ -651,7 +654,6 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) { - (void)_didChangeCurrentItem:(NSNotification *)notificiation { self.showPassword = NO; - //self.customFieldsTableView.needsDisplay = YES; } @end diff --git a/MacPass/MPPasswordCreatorViewController.m b/MacPass/MPPasswordCreatorViewController.m index 92a98705..fc8d45cc 100644 --- a/MacPass/MPPasswordCreatorViewController.m +++ b/MacPass/MPPasswordCreatorViewController.m @@ -27,6 +27,8 @@ #import "MPSettingsHelper.h" #import "MPDocument.h" #import "MPModelChangeObserving.h" +#import "MPPrettyPasswordTransformer.h" + #import "MPFlagsHelper.h" @@ -56,7 +58,6 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { @interface MPPasswordCreatorViewController () @property (nonatomic, copy) NSString *password; -@property (copy) NSString *generatedPassword; @property (strong) IBOutlet NSTextField *passwordTextField; @property (strong) IBOutlet NSTextField *passwordLengthTextField; @@ -120,7 +121,7 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { [self.passwordLengthSlider bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(passwordLength)) options:nil]; [self.passwordLengthTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(passwordLength)) options:nil]; - [self.passwordTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(password)) options:nil]; + [self.passwordTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(password)) options:@{ NSValueTransformerNameBindingOption: MPPrettyPasswordTransformerName }]; [self.entropyIndicator bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(entropy)) options:nil]; [self.entropyTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(entropy)) options:nil]; diff --git a/MacPass/MPPrettyPasswordTransformer.m b/MacPass/MPPrettyPasswordTransformer.m index 1f4e7c8d..6486d7f5 100644 --- a/MacPass/MPPrettyPasswordTransformer.m +++ b/MacPass/MPPrettyPasswordTransformer.m @@ -41,6 +41,16 @@ NSString *const MPPrettyPasswordTransformerName = @"com.hicknhack.macpass.MPPret forName:MPPrettyPasswordTransformerName]; } +- (id)reverseTransformedValue:(id)value { + if([value isKindOfClass:NSString.class]) { + return value; + } + if([value isKindOfClass:NSAttributedString.class]) { + return ((NSAttributedString *)value).string; + } + return nil; +} + - (id)transformedValue:(id)value { if([value isKindOfClass:NSString.class]) { return ((NSString *)value).passwordPrettified; diff --git a/MacPass/NSString+MPPrettyPasswordDisplay.m b/MacPass/NSString+MPPrettyPasswordDisplay.m index 59769b70..00c2572e 100644 --- a/MacPass/NSString+MPPrettyPasswordDisplay.m +++ b/MacPass/NSString+MPPrettyPasswordDisplay.m @@ -42,9 +42,9 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ blueColor = [NSColor colorWithRed:0.3 green:0.7 blue:1 alpha:1]; - orangeColor = [NSColor colorWithRed:0.3 green:0.7 blue:1 alpha:1]; - greenColor = [NSColor colorWithRed:0.3 green:0.7 blue:1 alpha:1]; - yellowColor = [NSColor colorWithRed:0.3 green:0.7 blue:1 alpha:1]; + orangeColor = [NSColor colorWithRed:1 green:0.7 blue:0.3 alpha:1]; + greenColor = [NSColor colorWithRed:0.7 green:1 blue:0.3 alpha:1]; + yellowColor = [NSColor colorWithRed:1 green:0.7 blue:0.3 alpha:1]; }); /* digits */ @@ -52,14 +52,11 @@ for(NSValue *rangeValue in digitRanges) { [string addAttribute:NSForegroundColorAttributeName value:blueColor range:rangeValue.rangeValue]; } - /* symbols */ - NSArray *symbolRanges = [self rangesOfCharactersInSet:NSCharacterSet.symbolCharacterSet]; + /* symbols and punctuation */ + NSMutableCharacterSet *symbolAndPunctuationSet = [NSCharacterSet.symbolCharacterSet mutableCopy]; + [symbolAndPunctuationSet formUnionWithCharacterSet:NSCharacterSet.punctuationCharacterSet]; + NSArray *symbolRanges = [self rangesOfCharactersInSet:symbolAndPunctuationSet]; for(NSValue *rangeValue in symbolRanges) { - [string addAttribute:NSForegroundColorAttributeName value:greenColor range:rangeValue.rangeValue]; - } - /* punctuation */ - NSArray *punctiationRanges = [self rangesOfCharactersInSet:NSCharacterSet.punctuationCharacterSet]; - for(NSValue *rangeValue in punctiationRanges) { [string addAttribute:NSForegroundColorAttributeName value:orangeColor range:rangeValue.rangeValue]; } }