summaryrefslogtreecommitdiff
path: root/macui
diff options
context:
space:
mode:
Diffstat (limited to 'macui')
-rw-r--r--macui/ZeroTier One/ServiceCom.m233
1 files changed, 119 insertions, 114 deletions
diff --git a/macui/ZeroTier One/ServiceCom.m b/macui/ZeroTier One/ServiceCom.m
index 6040ef7b..75b98502 100644
--- a/macui/ZeroTier One/ServiceCom.m
+++ b/macui/ZeroTier One/ServiceCom.m
@@ -55,154 +55,159 @@
- (NSString*)key:(NSError* __autoreleasing *)err
{
static NSString *k = nil;
- static NSUInteger resetCount = 10;
+ static NSUInteger resetCount = 0;
- if (_resetKey && k != nil) {
- k = nil;
- ++resetCount;
- NSLog(@"ResetCount: %lu", (unsigned long)resetCount);
- if (resetCount > 10) {
- [[NSOperationQueue mainQueue] addOperationWithBlock:^{
- NSAlert *alert = [NSAlert alertWithMessageText:@"Error obtaining Auth Token"
- defaultButton:@"Quit"
- alternateButton:@"Retry"
- otherButton:nil
- informativeTextWithFormat:@"Please ensure ZeroTier is installed correctly"];
- alert.alertStyle = NSCriticalAlertStyle;
-
- NSModalResponse res;
- if (!_isQuitting) {
- res = [alert runModal];
- }
- else {
- return;
- }
-
- if(res == 1) {
- _isQuitting = YES;
- [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0];
- }
- }];
+ @synchronized (self) {
+ if (_isQuitting) {
return @"";
}
- }
-
- if (k == nil) {
- NSError *error = nil;
- NSURL *appSupportDir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:false error:&error];
-
- if (error) {
- NSLog(@"Error: %@", error);
- return @"";
+
+ if (_resetKey && k != nil) {
+ k = nil;
+ ++resetCount;
+ NSLog(@"ResetCount: %lu", (unsigned long)resetCount);
+ if (resetCount > 10) {
+ [[NSOperationQueue mainQueue] addOperationWithBlock:^{
+ NSAlert *alert = [NSAlert alertWithMessageText:@"Error obtaining Auth Token"
+ defaultButton:@"Quit"
+ alternateButton:@"Retry"
+ otherButton:nil
+ informativeTextWithFormat:@"Please ensure ZeroTier is installed correctly"];
+ alert.alertStyle = NSCriticalAlertStyle;
+
+ NSModalResponse res;
+ if (!_isQuitting) {
+ res = [alert runModal];
+ }
+ else {
+ return;
+ }
+
+ if(res == 1) {
+ _isQuitting = YES;
+ [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0];
+ }
+ }];
+ return @"";
+ }
}
- appSupportDir = [[appSupportDir URLByAppendingPathComponent:@"ZeroTier"] URLByAppendingPathComponent:@"One"];
- NSURL *authtokenURL = [appSupportDir URLByAppendingPathComponent:@"authtoken.secret"];
-
- if (!_resetKey && [[NSFileManager defaultManager] fileExistsAtPath:[authtokenURL path]]) {
- k = [NSString stringWithContentsOfURL:authtokenURL
- encoding:NSUTF8StringEncoding
- error:&error];
-
- k = [k stringByReplacingOccurrencesOfString:@"\n" withString:@""];
+ if (k == nil) {
+ NSError *error = nil;
+ NSURL *appSupportDir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:false error:&error];
if (error) {
NSLog(@"Error: %@", error);
- k = nil;
- *err = error;
return @"";
}
- }
- else {
- _resetKey = NO;
- NSURL *sysAppSupportDir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSSystemDomainMask appropriateForURL:nil create:false error:nil];
- sysAppSupportDir = [[sysAppSupportDir URLByAppendingPathComponent:@"ZeroTier"] URLByAppendingPathComponent:@"One"];
- NSURL *sysAuthtokenURL = [sysAppSupportDir URLByAppendingPathComponent:@"authtoken.secret"];
+ appSupportDir = [[appSupportDir URLByAppendingPathComponent:@"ZeroTier"] URLByAppendingPathComponent:@"One"];
+ NSURL *authtokenURL = [appSupportDir URLByAppendingPathComponent:@"authtoken.secret"];
- if(![[NSFileManager defaultManager] fileExistsAtPath:[sysAuthtokenURL path]]) {
+ if (!_resetKey && [[NSFileManager defaultManager] fileExistsAtPath:[authtokenURL path]]) {
+ k = [NSString stringWithContentsOfURL:authtokenURL
+ encoding:NSUTF8StringEncoding
+ error:&error];
+
+ k = [k stringByReplacingOccurrencesOfString:@"\n" withString:@""];
+ if (error) {
+ NSLog(@"Error: %@", error);
+ k = nil;
+ *err = error;
+ return @"";
+ }
}
+ else {
+ _resetKey = NO;
+ NSURL *sysAppSupportDir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSSystemDomainMask appropriateForURL:nil create:false error:nil];
- [[NSFileManager defaultManager] createDirectoryAtURL:appSupportDir
- withIntermediateDirectories:YES
- attributes:nil
- error:&error];
-
- if (error) {
- NSLog(@"Error: %@", error);
- *err = error;
- k = nil;
- return @"";
- }
+ sysAppSupportDir = [[sysAppSupportDir URLByAppendingPathComponent:@"ZeroTier"] URLByAppendingPathComponent:@"One"];
+ NSURL *sysAuthtokenURL = [sysAppSupportDir URLByAppendingPathComponent:@"authtoken.secret"];
- AuthorizationRef authRef;
- OSStatus status = AuthorizationCreate(nil, nil, kAuthorizationFlagDefaults, &authRef);
+ if(![[NSFileManager defaultManager] fileExistsAtPath:[sysAuthtokenURL path]]) {
- if (status != errAuthorizationSuccess) {
- NSLog(@"Authorization Failed! %d", status);
+ }
- NSDictionary *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Couldn't create AuthorizationRef", nil),
- };
- *err = [NSError errorWithDomain:@"com.zerotier.one" code:-1 userInfo:userInfo];
+ [[NSFileManager defaultManager] createDirectoryAtURL:appSupportDir
+ withIntermediateDirectories:YES
+ attributes:nil
+ error:&error];
- return @"";
- }
+ if (error) {
+ NSLog(@"Error: %@", error);
+ *err = error;
+ k = nil;
+ return @"";
+ }
- AuthorizationItem authItem;
- authItem.name = kAuthorizationRightExecute;
- authItem.valueLength = 0;
- authItem.flags = 0;
+ AuthorizationRef authRef;
+ OSStatus status = AuthorizationCreate(nil, nil, kAuthorizationFlagDefaults, &authRef);
- AuthorizationRights authRights;
- authRights.count = 1;
- authRights.items = &authItem;
+ if (status != errAuthorizationSuccess) {
+ NSLog(@"Authorization Failed! %d", status);
- AuthorizationFlags authFlags = kAuthorizationFlagDefaults |
- kAuthorizationFlagInteractionAllowed |
- kAuthorizationFlagPreAuthorize |
- kAuthorizationFlagExtendRights;
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Couldn't create AuthorizationRef", nil),
+ };
+ *err = [NSError errorWithDomain:@"com.zerotier.one" code:-1 userInfo:userInfo];
- status = AuthorizationCopyRights(authRef, &authRights, nil, authFlags, nil);
+ return @"";
+ }
- if (status != errAuthorizationSuccess) {
- NSLog(@"Authorization Failed! %d", status);
- NSDictionary *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Couldn't copy authorization rights", nil),
- };
- *err = [NSError errorWithDomain:@"com.zerotier.one" code:-1 userInfo:userInfo];
- return @"";
- }
+ AuthorizationItem authItem;
+ authItem.name = kAuthorizationRightExecute;
+ authItem.valueLength = 0;
+ authItem.flags = 0;
+
+ AuthorizationRights authRights;
+ authRights.count = 1;
+ authRights.items = &authItem;
+
+ AuthorizationFlags authFlags = kAuthorizationFlagDefaults |
+ kAuthorizationFlagInteractionAllowed |
+ kAuthorizationFlagPreAuthorize |
+ kAuthorizationFlagExtendRights;
+
+ status = AuthorizationCopyRights(authRef, &authRights, nil, authFlags, nil);
+
+ if (status != errAuthorizationSuccess) {
+ NSLog(@"Authorization Failed! %d", status);
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Couldn't copy authorization rights", nil),
+ };
+ *err = [NSError errorWithDomain:@"com.zerotier.one" code:-1 userInfo:userInfo];
+ return @"";
+ }
- NSString *localKey = getAdminAuthToken(authRef);
- AuthorizationFree(authRef, kAuthorizationFlagDestroyRights);
+ NSString *localKey = getAdminAuthToken(authRef);
+ AuthorizationFree(authRef, kAuthorizationFlagDestroyRights);
- if (localKey != nil && [localKey lengthOfBytesUsingEncoding:NSUTF8StringEncoding] > 0) {
- k = localKey;
+ if (localKey != nil && [localKey lengthOfBytesUsingEncoding:NSUTF8StringEncoding] > 0) {
+ k = localKey;
- [localKey writeToURL:authtokenURL
- atomically:YES
- encoding:NSUTF8StringEncoding
- error:&error];
+ [localKey writeToURL:authtokenURL
+ atomically:YES
+ encoding:NSUTF8StringEncoding
+ error:&error];
- if (error) {
- NSLog(@"Error writing token to disk: %@", error);
- *err = error;
+ if (error) {
+ NSLog(@"Error writing token to disk: %@", error);
+ *err = error;
+ }
}
}
}
- }
- if (k == nil) {
- NSDictionary *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Unknown error finding authorization key", nil),
- };
- *err = [NSError errorWithDomain:@"com.zerotier.one" code:-1 userInfo:userInfo];
+ if (k == nil) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Unknown error finding authorization key", nil),
+ };
+ *err = [NSError errorWithDomain:@"com.zerotier.one" code:-1 userInfo:userInfo];
- return @"";
+ return @"";
+ }
}
-
return k;
}