Skip to content

Commit

Permalink
Refactored naming. Added better handling of settings for touchID
Browse files Browse the repository at this point in the history
  • Loading branch information
mstarke committed Sep 1, 2022
1 parent 76adcf7 commit 4932601
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 6 deletions.
4 changes: 2 additions & 2 deletions MacPass/MPPasswordInputController.m
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,11 @@ - (void)viewDidLoad {
self.touchIdModeButton.menu = touchIDMenu;
[self.touchIdModeButton bind:NSSelectedTagBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEntryTouchIdEnabled]
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyTouchIdEnabled]
options:nil];
[self.touchIdEnabledButton bind:NSValueBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEntryTouchIdEnabled]
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyTouchIdEnabled]
options:nil];
self.touchIdEnabledButton.hidden = YES;
if (@available(macOS 10.13.4, *)) {
Expand Down
3 changes: 2 additions & 1 deletion MacPass/MPSettingsHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
#import <Cocoa/Cocoa.h>

/* TouchID */
APPKIT_EXTERN NSString *const kMPSettingsKeyEntryTouchIdEnabled;
APPKIT_EXTERN NSString *const kMPSettingsKeyTouchIdEnabled;
APPKIT_EXTERN NSString *const kMPSettingsKeyTouchIdEncryptedKeyStore; // NSDictionary with hased file names mapped to keys
APPKIT_EXTERN NSString *const kMPSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat;

/* Clipboard */
Expand Down
3 changes: 2 additions & 1 deletion MacPass/MPSettingsHelper.m
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@
NSString *const kMPSettingsKeyAutotypeMatchTags = @"AutotypeMatchTags";
NSString *const kMPSettingsKeyGloablAutotypeAlwaysShowCandidateSelection = @"GloablAutotypeAlwaysShowCandidateSelection";

NSString *const kMPSettingsKeyEntryTouchIdEnabled = @"EnableSubsequentUnlocksWithTouchID";
NSString *const kMPSettingsKeyTouchIdEnabled = @"EnableSubsequentUnlocksWithTouchID";
NSString *const kMPSettingsKeyTouchIdEncryptedKeyStore = @"TouchIdEncryptedKeyStore";
NSString *const kMPSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat = @"EncryptedDatabaseKeyForTouchID-%@";

NSString *const kMPSettingsKeyEntrySearchFilterContext = @"EntrySearchFilterContext";
Expand Down
28 changes: 26 additions & 2 deletions MacPass/MPTouchIdCompositeKeyStore.m
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

@interface MPTouchIdCompositeKeyStore ()
@property (readonly, strong) NSMutableDictionary* keys;
@property (nonatomic) NSInteger touchIdEnabledState;
@end

@implementation MPTouchIdCompositeKeyStore
Expand All @@ -30,10 +31,31 @@ - (instancetype)init {
self = [super init];
if(self) {
_keys = [[NSMutableDictionary alloc] init];
[self bind:NSStringFromSelector(@selector(touchIdEnabledState))
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyTouchIdEnabled]
options:nil];
}
return self;
}

- (void)setTouchIdEnabledState:(NSInteger)touchIdEnabledState {
switch(touchIdEnabledState) {
case NSControlStateValueMixed:
// clear persistent store
[NSUserDefaults.standardUserDefaults removeObjectForKey:kMPSettingsKeyTouchIdEncryptedKeyStore];
break;
case NSControlStateValueOn:
// clear transient store
[self.keys removeAllObjects];
break;
default:
// clear persitent and transient store
[NSUserDefaults.standardUserDefaults removeObjectForKey:kMPSettingsKeyTouchIdEncryptedKeyStore];
[self.keys removeAllObjects];
}
}

- (void)saveCompositeKey:(KPKCompositeKey *)compositeKey forDocumentKey:(NSString *)documentKey {
NSError *error;
NSData *encryptedCompositeKey = [self encryptedDataForCompositeKey:compositeKey error:&error];
Expand All @@ -42,7 +64,9 @@ - (void)saveCompositeKey:(KPKCompositeKey *)compositeKey forDocumentKey:(NSStrin
return;
}

NSInteger touchIdMode = [NSUserDefaults.standardUserDefaults integerForKey:kMPSettingsKeyEntryTouchIdEnabled];
/* FIXME this behavour is wrong. Old keys do not get cleared so this leaves a lot of data behind that should be cleaned up*/

NSInteger touchIdMode = [NSUserDefaults.standardUserDefaults integerForKey:kMPSettingsKeyTouchIdEnabled];
switch(touchIdMode) {
case NSControlStateValueMixed:
[NSUserDefaults.standardUserDefaults removeObjectForKey:documentKey];
Expand All @@ -62,7 +86,7 @@ - (void)saveCompositeKey:(KPKCompositeKey *)compositeKey forDocumentKey:(NSStrin
}
}
- (NSData *)loadEncryptedCompositeKeyForDocumentKey:(NSString *)documentKey {
NSInteger touchIdMode = [NSUserDefaults.standardUserDefaults integerForKey:kMPSettingsKeyEntryTouchIdEnabled];
NSInteger touchIdMode = [NSUserDefaults.standardUserDefaults integerForKey:kMPSettingsKeyTouchIdEnabled];
NSData* transientKey = self.keys[documentKey];
NSData* persistentKey =[NSUserDefaults.standardUserDefaults dataForKey:documentKey];
if(nil == transientKey && nil == persistentKey) {
Expand Down

0 comments on commit 4932601

Please sign in to comment.