From 06ec61ea281a5eff58dcc3a884e67c7986f95a3c Mon Sep 17 00:00:00 2001 From: James Hurst Date: Mon, 4 Aug 2014 21:00:07 -0400 Subject: [PATCH] Added ability to set default password generation settings (issue #166) --- MacPass/Base.lproj/PasswordCreatorView.xib | 12 ++++++++++ MacPass/MPPasswordCreatorViewController.m | 28 ++++++++++++++++++---- MacPass/MPSettingsHelper.h | 4 ++++ MacPass/MPSettingsHelper.m | 11 ++++++++- 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/MacPass/Base.lproj/PasswordCreatorView.xib b/MacPass/Base.lproj/PasswordCreatorView.xib index 035406ef..91824d97 100644 --- a/MacPass/Base.lproj/PasswordCreatorView.xib +++ b/MacPass/Base.lproj/PasswordCreatorView.xib @@ -19,6 +19,7 @@ + @@ -233,6 +234,17 @@ + diff --git a/MacPass/MPPasswordCreatorViewController.m b/MacPass/MPPasswordCreatorViewController.m index a460536f..9a364656 100644 --- a/MacPass/MPPasswordCreatorViewController.m +++ b/MacPass/MPPasswordCreatorViewController.m @@ -49,6 +49,7 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { @property (weak) IBOutlet NSButton *numbersButton; @property (weak) IBOutlet NSButton *symbolsButton; @property (weak) IBOutlet NSButton *customButton; +@property (weak) IBOutlet NSButton *setDefaultButton; @property (weak) IBOutlet NSTextField *entropyTextField; @property (weak) IBOutlet NSLevelIndicator *entropyIndicator; @@ -65,19 +66,24 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { self = [super initWithNibName:@"PasswordCreatorView" bundle:nil]; if (self) { _password = @""; - _passwordLength = 12; - _characterFlags = MPPasswordCharactersAll; - _useCustomString = NO; - _customString = @""; + _passwordLength = [[NSUserDefaults standardUserDefaults] integerForKey:kMPSettingsKeyDefaultPasswordLength]; + _characterFlags = [[NSUserDefaults standardUserDefaults] integerForKey:kMPSettingsKeyPasswordCharacterFlags]; + _useCustomString = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyPasswordUseCustomString]; + _customString = [[NSUserDefaults standardUserDefaults] stringForKey:kMPSettingsKeyPasswordCustomString]; _entropy = 0.0; } return self; } - (void)awakeFromNib { + [self.setDefaultButton setEnabled:NO]; + [self.passwordLengthSlider setMinValue:MIN_PASSWORD_LENGTH]; [self.passwordLengthSlider setMaxValue:MAX_PASSWORD_LENGTH]; [self.passwordLengthSlider setContinuous:YES]; + + [self.customCharactersTextField setStringValue:_customString]; + /* Value Transformer */ id formatter = [[MPUniqueCharactersFormatter alloc] init]; @@ -125,6 +131,7 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { } - (IBAction)_toggleCharacters:(id)sender { + [_setDefaultButton setEnabled:YES]; _characterFlags ^= [sender tag]; self.useCustomString = NO; [self reset]; @@ -142,6 +149,16 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { [[self _findCloseTarget] performClose:nil]; } +- (IBAction)_setDefault:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setInteger:_passwordLength forKey:kMPSettingsKeyDefaultPasswordLength]; + [[NSUserDefaults standardUserDefaults] setInteger:_characterFlags forKey:kMPSettingsKeyPasswordCharacterFlags]; + [[NSUserDefaults standardUserDefaults] setBool:_useCustomString forKey:kMPSettingsKeyPasswordUseCustomString]; + [[NSUserDefaults standardUserDefaults] setObject:[_customCharactersTextField stringValue] forKey:kMPSettingsKeyPasswordCustomString]; + + [_setDefaultButton setEnabled:NO]; +} + #pragma mark - #pragma mark Custom Setter @@ -155,6 +172,7 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { - (void)setUseCustomString:(BOOL)useCustomString { if(_useCustomString != useCustomString) { + [_setDefaultButton setEnabled:YES]; _useCustomString = useCustomString; [self _resetCharacters]; } @@ -162,6 +180,7 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { - (void)setPasswordLength:(NSUInteger)passwordLength { if(_passwordLength != passwordLength) { + [_setDefaultButton setEnabled:YES]; _passwordLength = passwordLength; [self _generatePassword:nil]; } @@ -172,6 +191,7 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { - (void)controlTextDidChange:(NSNotification *)obj { if([obj object] == self.customCharactersTextField) { + [_setDefaultButton setEnabled:YES]; [self _generatePassword:nil]; } } diff --git a/MacPass/MPSettingsHelper.h b/MacPass/MPSettingsHelper.h index 2da111a3..d5c7e481 100644 --- a/MacPass/MPSettingsHelper.h +++ b/MacPass/MPSettingsHelper.h @@ -61,6 +61,10 @@ APPKIT_EXTERN NSString *const kMPSettingsKeyEnableQuicklookPreview; /* Password Generation */ APPKIT_EXTERN NSString *const kMPSettingsKeyCopyGeneratedPasswordToClipboard; APPKIT_EXTERN NSString *const kMPSettingsKeyDefaultPasswordRounds; +APPKIT_EXTERN NSString *const kMPSettingsKeyDefaultPasswordLength; +APPKIT_EXTERN NSString *const kMPSettingsKeyPasswordCharacterFlags; +APPKIT_EXTERN NSString *const kMPSettingsKeyPasswordUseCustomString; +APPKIT_EXTERN NSString *const kMPSettingsKeyPasswordCustomString; typedef NS_ENUM(NSUInteger, MPPasswordEncoding) { MPPasswordEncodingUTF8, diff --git a/MacPass/MPSettingsHelper.m b/MacPass/MPSettingsHelper.m index 7bf0e44d..6228d8e7 100644 --- a/MacPass/MPSettingsHelper.m +++ b/MacPass/MPSettingsHelper.m @@ -7,6 +7,7 @@ // #import "MPSettingsHelper.h" +#import "NSString+MPPasswordCreation.h" NSString *const kMPSettingsKeyPasteboardClearTimeout = @"ClipboardClearTimeout"; NSString *const kMPSettingsKeyClearPasteboardOnQuit = @"ClearClipboardOnQuit"; @@ -44,6 +45,10 @@ NSString *const kMPSettingsKeyEnableQuicklookPreview = @"Enable NSString *const kMPSettingsKeyCopyGeneratedPasswordToClipboard = @"CopyGeneratedPasswordToClipboard"; NSString *const kMPSettingsKeyDefaultPasswordRounds = @"KeyDefaultPasswordRounds"; +NSString *const kMPSettingsKeyDefaultPasswordLength = @"DefaultPasswordLength"; +NSString *const kMPSettingsKeyPasswordCharacterFlags = @"PasswordCharacterFlags"; +NSString *const kMPSettingsKeyPasswordUseCustomString = @"PasswordUseCustomString"; +NSString *const kMPSettingsKeyPasswordCustomString = @"PasswordCustomString"; @implementation MPSettingsHelper @@ -84,7 +89,11 @@ NSString *const kMPSettingsKeyDefaultPasswordRounds = @"KeyDef kMPSettingsKeyEnableGlobalAutotype: @NO, kMPSettingsKeyEnableQuicklookPreview: @NO, kMPSettingsKeyCopyGeneratedPasswordToClipboard: @NO, - kMPSettingsKeyDefaultPasswordRounds: @50000 + kMPSettingsKeyDefaultPasswordRounds: @50000, + kMPSettingsKeyDefaultPasswordLength: @12, + kMPSettingsKeyPasswordCharacterFlags: @(MPPasswordCharactersAll), + kMPSettingsKeyPasswordUseCustomString: @NO, + kMPSettingsKeyPasswordCustomString: @"" }; }