Log out active user and key when user is changed or deleted or unset.
This commit is contained in:
parent
975743adec
commit
fa0c80d6b3
@ -21,7 +21,7 @@
|
||||
@interface MPAppDelegate_Shared(Key)
|
||||
|
||||
- (BOOL)signInAsUser:(MPUserEntity *)user saveInContext:(NSManagedObjectContext *)moc usingMasterPassword:(NSString *)password;
|
||||
- (void)signOutAnimated:(BOOL)animated;
|
||||
- (void)signOut;
|
||||
|
||||
- (void)storeSavedKeyFor:(MPUserEntity *)user;
|
||||
- (void)forgetSavedKeyFor:(MPUserEntity *)user;
|
||||
|
@ -115,17 +115,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void)signOutAnimated:(BOOL)animated {
|
||||
|
||||
if (self.key)
|
||||
self.key = nil;
|
||||
|
||||
if ([[MPConfig get].sendInfo boolValue]) {
|
||||
[Countly.sharedInstance userLoggedOut];
|
||||
}
|
||||
- (void)signOut {
|
||||
|
||||
self.activeUser = nil;
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPSignedOutNotification object:self userInfo:@{ @"animated": @(animated) }];
|
||||
}
|
||||
|
||||
- (BOOL)signInAsUser:(MPUserEntity *)user saveInContext:(NSManagedObjectContext *)moc usingMasterPassword:(NSString *)password {
|
||||
@ -191,7 +183,10 @@
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
inf( @"Logged in user: %@", user.userID );
|
||||
user.lastUsed = [NSDate date];
|
||||
self.activeUser = user;
|
||||
|
||||
if (![self.key isEqualToKey:tryKey]) {
|
||||
// Upgrade the user's keyID if not at the default version yet.
|
||||
@ -222,8 +217,6 @@
|
||||
err( @"While setting username: %@", exception );
|
||||
}
|
||||
|
||||
user.lastUsed = [NSDate date];
|
||||
self.activeUser = user;
|
||||
[moc saveToStore];
|
||||
|
||||
// Perform a data sanity check now that we're logged in as the user to allow fixes that require the user's key.
|
||||
|
@ -21,6 +21,8 @@
|
||||
#import "MPAppDelegate_Key.h"
|
||||
#import "NSManagedObjectModel+KCOrderedAccessorFix.h"
|
||||
|
||||
#import <Countly/Countly.h>
|
||||
|
||||
@interface MPAppDelegate_Shared()
|
||||
|
||||
@property(strong, atomic) MPKey *key;
|
||||
@ -63,14 +65,26 @@ static MPAppDelegate_Shared *instance;
|
||||
|
||||
MPUserEntity *activeUser = [MPUserEntity existingObjectWithID:activeUserOID inContext:context];
|
||||
if (!activeUser)
|
||||
[self signOutAnimated:YES];
|
||||
[self signOut];
|
||||
|
||||
return activeUser;
|
||||
}
|
||||
|
||||
- (void)setActiveUser:(MPUserEntity *)activeUser {
|
||||
|
||||
self.activeUserOID = activeUser.permanentObjectID;
|
||||
NSManagedObjectID *activeUserOID = activeUser.permanentObjectID;
|
||||
if ([self.activeUserOID isEqualTo:activeUserOID])
|
||||
return;
|
||||
|
||||
if (self.key)
|
||||
self.key = nil;
|
||||
|
||||
if ([[MPConfig get].sendInfo boolValue])
|
||||
[Countly.sharedInstance userLoggedOut];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPSignedOutNotification object:self];
|
||||
|
||||
self.activeUserOID = activeUserOID;
|
||||
}
|
||||
|
||||
- (void)handleCoordinatorError:(NSError *)error {
|
||||
|
@ -295,8 +295,6 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
||||
|
||||
- (void)selectUser:(NSMenuItem *)item {
|
||||
|
||||
[self signOutAnimated:NO];
|
||||
|
||||
NSManagedObjectContext *mainContext = [MPMacAppDelegate managedObjectContextForMainThreadIfReady];
|
||||
self.activeUser = [MPUserEntity existingObjectWithID:[item representedObject] inContext:mainContext];
|
||||
}
|
||||
@ -369,10 +367,12 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
||||
|
||||
return masterPassword;
|
||||
} result:^(NSError *error) {
|
||||
[self updateUsers];
|
||||
PearlMainQueue( ^{
|
||||
[self updateUsers];
|
||||
|
||||
if (error && !(error.domain == NSCocoaErrorDomain && error.code == NSUserCancelledError))
|
||||
[[NSAlert alertWithError:error] runModal];
|
||||
if (error && !(error.domain == NSCocoaErrorDomain && error.code == NSUserCancelledError))
|
||||
[[NSAlert alertWithError:error] runModal];
|
||||
} );
|
||||
}];
|
||||
}] resume];
|
||||
}
|
||||
@ -458,7 +458,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
||||
|
||||
- (IBAction)lock:(id)sender {
|
||||
|
||||
[self signOutAnimated:YES];
|
||||
[self signOut];
|
||||
}
|
||||
|
||||
- (IBAction)terminate:(id)sender {
|
||||
@ -642,6 +642,9 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
||||
userItem.state = NSOffState;
|
||||
}
|
||||
|
||||
if (!mainActiveUser)
|
||||
[self.sitesWindowController close];
|
||||
|
||||
[self updateMenuItems];
|
||||
}
|
||||
|
||||
|
@ -51,8 +51,6 @@
|
||||
} );
|
||||
PearlAddNotificationObserver( NSWindowWillCloseNotification, self.window, [NSOperationQueue mainQueue],
|
||||
^(id host, NSNotification *note) {
|
||||
PearlRemoveNotificationObservers();
|
||||
|
||||
NSWindow *sheet = [self.window attachedSheet];
|
||||
if (sheet)
|
||||
[self.window endSheet:sheet];
|
||||
@ -86,6 +84,10 @@
|
||||
prof_finish( @"ui" );
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
PearlRemoveNotificationObservers();
|
||||
}
|
||||
|
||||
- (void)replaceFonts:(NSView *)view {
|
||||
|
||||
if (view.window.backingScaleFactor == 1)
|
||||
@ -325,7 +327,7 @@
|
||||
[alert_ beginSheetModalForWindow:self.window completionHandler:nil];
|
||||
|
||||
if ([MPMacAppDelegate get].key)
|
||||
[[MPMacAppDelegate get] signOutAnimated:YES];
|
||||
[[MPMacAppDelegate get] signOut];
|
||||
} );
|
||||
}];
|
||||
}
|
||||
@ -573,7 +575,6 @@
|
||||
}
|
||||
prof_finish( @"newSites: %@", newSites );
|
||||
|
||||
dbg( @"newSites: %@", newSites );
|
||||
if (![newSites isEqualToArray:self.sites])
|
||||
PearlMainQueue( ^{
|
||||
self.sites = newSites;
|
||||
|
@ -49,10 +49,7 @@
|
||||
|
||||
PearlAddNotificationObserver( MPSignedOutNotification, nil, [NSOperationQueue mainQueue],
|
||||
^(MPAnswersViewController *self, NSNotification *note) {
|
||||
if (![note.userInfo[@"animated"] boolValue])
|
||||
[UIView setAnimationsEnabled:NO];
|
||||
[[MPOverlaySegue dismissViewController:self] perform];
|
||||
[UIView setAnimationsEnabled:YES];
|
||||
} );
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@
|
||||
} );
|
||||
PearlAddNotificationObserver( MPSignedOutNotification, nil, [NSOperationQueue mainQueue],
|
||||
^(MPCombinedViewController *self, NSNotification *note) {
|
||||
[self setMode:MPCombinedModeUserSelection animated:[note.userInfo[@"animated"] boolValue]];
|
||||
[self setMode:MPCombinedModeUserSelection];
|
||||
} );
|
||||
}
|
||||
|
||||
@ -110,7 +110,7 @@
|
||||
|
||||
- (void)setMode:(MPCombinedMode)mode {
|
||||
|
||||
[self setMode:mode animated:YES];
|
||||
[self setMode:mode animated:[UIView areAnimationsEnabled]];
|
||||
}
|
||||
|
||||
- (void)setMode:(MPCombinedMode)mode animated:(BOOL)animated {
|
||||
|
@ -64,10 +64,7 @@
|
||||
|
||||
PearlAddNotificationObserver( MPSignedOutNotification, nil, [NSOperationQueue mainQueue],
|
||||
^(MPMessageViewController *self, NSNotification *note) {
|
||||
if (![note.userInfo[@"animated"] boolValue])
|
||||
[UIView setAnimationsEnabled:NO];
|
||||
[[MPOverlaySegue dismissViewController:self] perform];
|
||||
[UIView setAnimationsEnabled:YES];
|
||||
} );
|
||||
}
|
||||
|
||||
|
@ -98,7 +98,7 @@
|
||||
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
|
||||
if (cell == self.signOutCell) {
|
||||
[self dismissPopup];
|
||||
[[MPiOSAppDelegate get] signOutAnimated:YES];
|
||||
[[MPiOSAppDelegate get] signOut];
|
||||
}
|
||||
|
||||
if (cell == self.feedbackCell)
|
||||
|
@ -363,7 +363,7 @@ typedef NS_OPTIONS( NSUInteger, MPPasswordsTips ) {
|
||||
[MPiOSAppDelegate managedObjectContextForMainThreadPerformBlock:^(NSManagedObjectContext *mainContext) {
|
||||
// TODO: either move this into the app delegate or remove the duplicate signOutAnimated: call from the app delegate.
|
||||
if (![[MPiOSAppDelegate get] activeUserInContext:mainContext])
|
||||
[[MPiOSAppDelegate get] signOutAnimated:YES];
|
||||
[[MPiOSAppDelegate get] signOut];
|
||||
}];
|
||||
}];
|
||||
}
|
||||
|
@ -776,7 +776,7 @@ referenceSizeForFooterInSection:(NSInteger)section {
|
||||
self.masterPasswordChoice = nil;
|
||||
|
||||
if (activeUserState != MPActiveUserStateMinimized && (!self.active || [MPiOSAppDelegate get].activeUserOID)) {
|
||||
[[MPiOSAppDelegate get] signOutAnimated:YES];
|
||||
[[MPiOSAppDelegate get] signOut];
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -332,16 +332,16 @@ void mpw_log_sink_pearl(const MPLogEvent *record) {
|
||||
} );
|
||||
} );
|
||||
} result:^(NSError *error) {
|
||||
[activityOverlay cancelOverlayAnimated:YES];
|
||||
PearlMainQueue( ^{
|
||||
[activityOverlay cancelOverlayAnimated:YES];
|
||||
|
||||
if (error && !(error.domain == NSCocoaErrorDomain && error.code == NSUserCancelledError)) {
|
||||
PearlMainQueue( ^{
|
||||
if (error && !(error.domain == NSCocoaErrorDomain && error.code == NSUserCancelledError)) {
|
||||
UIAlertController *controller = [UIAlertController alertControllerWithTitle:@"Error" message:[error localizedDescription]
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
[controller addAction:[UIAlertAction actionWithTitle:@"Continue" style:UIAlertActionStyleCancel handler:nil]];
|
||||
[self.navigationController presentViewController:controller animated:YES completion:nil];
|
||||
} );
|
||||
}
|
||||
}
|
||||
} );
|
||||
}];
|
||||
}
|
||||
|
||||
@ -392,8 +392,11 @@ void mpw_log_sink_pearl(const MPLogEvent *record) {
|
||||
- (void)applicationDidEnterBackground:(UIApplication *)application {
|
||||
|
||||
inf( @"Did background" );
|
||||
if (![[MPiOSConfig get].rememberLogin boolValue])
|
||||
[self signOutAnimated:NO];
|
||||
if (![[MPiOSConfig get].rememberLogin boolValue]) {
|
||||
[UIView setAnimationsEnabled:NO];
|
||||
[self signOut];
|
||||
[UIView setAnimationsEnabled:YES];
|
||||
}
|
||||
|
||||
[self.hangDetector stop];
|
||||
|
||||
@ -661,7 +664,7 @@ void mpw_log_sink_pearl(const MPLogEvent *record) {
|
||||
[moc saveToStore];
|
||||
}];
|
||||
|
||||
[self signOutAnimated:YES];
|
||||
[self signOut];
|
||||
if (didReset)
|
||||
didReset();
|
||||
}]];
|
||||
|
@ -31,7 +31,7 @@ mpw_expect() {
|
||||
[[ $file ]] && (( ! keep )) && rm "$file"
|
||||
|
||||
printf '.'
|
||||
local result=$(set -x; ./mpw -q "${args[@]}") err=$?
|
||||
local result=$(./mpw -q "${args[@]}") err=$?
|
||||
|
||||
if (( err )); then
|
||||
printf >&2 "Error (exit %d) mpw%s\n" "$err" "$(printf ' %q' "${args[@]}")"
|
||||
|
Loading…
Reference in New Issue
Block a user