diff options
author | Grant Limberg <glimberg@gmail.com> | 2016-08-30 20:28:52 -0700 |
---|---|---|
committer | Grant Limberg <glimberg@gmail.com> | 2016-08-30 20:28:52 -0700 |
commit | c2a01f6db46273d7013d22c59e4cc6500866fbd3 (patch) | |
tree | 384bb15f5712c5f0906ba51d38abaf2451d17e25 | |
parent | 35d5ed9c2bdbb920684a4088bd5bb6a3df332121 (diff) | |
download | infinitytier-c2a01f6db46273d7013d22c59e4cc6500866fbd3.tar.gz infinitytier-c2a01f6db46273d7013d22c59e4cc6500866fbd3.zip |
Added a path for error handling when fetching data from the ZeroTier daemon
Still need to wire up error messages to the user.
-rw-r--r-- | ZeroTier One/AppDelegate.m | 15 | ||||
-rw-r--r-- | ZeroTier One/JoinNetworkViewController.m | 9 | ||||
-rw-r--r-- | ZeroTier One/NetworkInfoCell.m | 15 | ||||
-rw-r--r-- | ZeroTier One/NetworkMonitor.m | 20 | ||||
-rw-r--r-- | ZeroTier One/ServiceCom.h | 8 | ||||
-rw-r--r-- | ZeroTier One/ServiceCom.m | 95 |
6 files changed, 129 insertions, 33 deletions
diff --git a/ZeroTier One/AppDelegate.m b/ZeroTier One/AppDelegate.m index f60ccb6b..048fa385 100644 --- a/ZeroTier One/AppDelegate.m +++ b/ZeroTier One/AppDelegate.m @@ -266,13 +266,24 @@ NSString *nwid = [NSString stringWithFormat:@"%10llx", network.nwid]; if(network.connected) { - [[ServiceCom sharedInstance] leaveNetwork:nwid]; + NSError *error = nil; + + [[ServiceCom sharedInstance] leaveNetwork:nwid error:&error]; + + if (error) { + // TODO: Display error message + + } } else { + NSError *error = nil; [[ServiceCom sharedInstance] joinNetwork:nwid allowManaged:network.allowManaged allowGlobal:network.allowGlobal - allowDefault:(network.allowDefault && ![Network defaultRouteExists:self.networks])]; + allowDefault:(network.allowDefault && ![Network defaultRouteExists:self.networks]) + error:&error]; + + // TODO: Display error message } } diff --git a/ZeroTier One/JoinNetworkViewController.m b/ZeroTier One/JoinNetworkViewController.m index 60e8e1cc..f91589d9 100644 --- a/ZeroTier One/JoinNetworkViewController.m +++ b/ZeroTier One/JoinNetworkViewController.m @@ -72,10 +72,17 @@ NSString * const JoinedNetworksKey = @"com.zerotier.one.joined-networks"; - (IBAction)onJoinClicked:(id)sender { NSString *networkId = self.network.stringValue; + NSError *error = nil; [[ServiceCom sharedInstance] joinNetwork:networkId allowManaged:(self.allowManagedCheckBox.state == NSOnState) allowGlobal:(self.allowGlobalCheckBox.state == NSOnState) - allowDefault:(self.allowDefaultCheckBox.state == NSOnState)]; + allowDefault:(self.allowDefaultCheckBox.state == NSOnState) + error:&error]; + + if(error) { + // TODO: display error message + return; + } self.network.stringValue = @""; diff --git a/ZeroTier One/NetworkInfoCell.m b/ZeroTier One/NetworkInfoCell.m index 606bb849..6ffb9e71 100644 --- a/ZeroTier One/NetworkInfoCell.m +++ b/ZeroTier One/NetworkInfoCell.m @@ -42,15 +42,26 @@ - (void)joinNetwork:(NSString*)nwid { + NSError *error = nil; [[ServiceCom sharedInstance] joinNetwork:nwid allowManaged:(self.allowManaged.state == NSOnState) allowGlobal:(self.allowGlobal.state == NSOnState) - allowDefault:![Network defaultRouteExists:_parent.networkList] && (self.allowDefault.state == NSOnState)]; + allowDefault:![Network defaultRouteExists:_parent.networkList] && (self.allowDefault.state == NSOnState) + error:&error]; + + if (error) { + // TODO: Display error message + } } - (void)leaveNetwork:(NSString*)nwid { - [[ServiceCom sharedInstance] leaveNetwork:nwid]; + NSError *error = nil; + [[ServiceCom sharedInstance] leaveNetwork:nwid error:&error]; + + if (error) { + // TODO: Display error message + } } @end diff --git a/ZeroTier One/NetworkMonitor.m b/ZeroTier One/NetworkMonitor.m index 466d7db1..59451325 100644 --- a/ZeroTier One/NetworkMonitor.m +++ b/ZeroTier One/NetworkMonitor.m @@ -74,13 +74,21 @@ NSString * const StatusUpdateKey = @"com.zerotier.one.status"; } } + NSError *error = nil; + [[ServiceCom sharedInstance] getNetworklist:^(NSArray<Network *> *networkList) { _receivedNetworks = networkList; [[NSOperationQueue mainQueue] addOperationWithBlock:^{ [self internal_updateNetworkInfo]; - }]; - }]; + } ]; + } error:&error]; + + if(error) { + // TODO: Display error message + + [self stop]; + } [[ServiceCom sharedInstance] getNodeStatus:^(NodeStatus *status) { NSDictionary *userInfo = [NSDictionary dictionaryWithObject:status forKey:@"status"]; @@ -90,7 +98,13 @@ NSString * const StatusUpdateKey = @"com.zerotier.one.status"; object:nil userInfo:userInfo]; }]; - }]; + } error:&error]; + + if (error) { + // TODO: Display error message + + [self stop]; + } } - (void)deleteSavedNetwork:(NSString*)networkId diff --git a/ZeroTier One/ServiceCom.h b/ZeroTier One/ServiceCom.h index a0665001..b24dd4a2 100644 --- a/ZeroTier One/ServiceCom.h +++ b/ZeroTier One/ServiceCom.h @@ -20,9 +20,9 @@ - (id)init; -- (void)getNetworklist:(void (^)(NSArray<Network*>*))completionHandler; -- (void)getNodeStatus:(void (^)(NodeStatus*))completionHandler; -- (void)joinNetwork:(NSString*)networkId allowManaged:(BOOL)allowManaged allowGlobal:(BOOL)allowGlobal allowDefault:(BOOL)allowDefault; -- (void)leaveNetwork:(NSString*)networkId; +- (void)getNetworklist:(void (^)(NSArray<Network*>*))completionHandler error:(NSError* __autoreleasing *)error; +- (void)getNodeStatus:(void (^)(NodeStatus*))completionHandler error:(NSError*__autoreleasing*)error; +- (void)joinNetwork:(NSString*)networkId allowManaged:(BOOL)allowManaged allowGlobal:(BOOL)allowGlobal allowDefault:(BOOL)allowDefault error:(NSError*__autoreleasing*)error; +- (void)leaveNetwork:(NSString*)networkId error:(NSError*__autoreleasing*)error; @end diff --git a/ZeroTier One/ServiceCom.m b/ZeroTier One/ServiceCom.m index 4e23d496..46468e25 100644 --- a/ZeroTier One/ServiceCom.m +++ b/ZeroTier One/ServiceCom.m @@ -39,7 +39,7 @@ return self; } -- (NSString*)key +- (NSString*)key:(NSError* __autoreleasing *)err { static NSString *k = nil; @@ -63,10 +63,20 @@ if (error) { NSLog(@"Error: %@", error); k = nil; + *err = error; return @""; } } else { + 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"]; + + if(![[NSFileManager defaultManager] fileExistsAtPath:[sysAuthtokenURL path]]) { + + } + [[NSFileManager defaultManager] createDirectoryAtURL:appSupportDir withIntermediateDirectories:YES attributes:nil @@ -74,6 +84,7 @@ if (error) { NSLog(@"Error: %@", error); + *err = error; k = nil; return @""; } @@ -83,6 +94,12 @@ 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]; + return @""; } @@ -104,6 +121,10 @@ 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 @""; } @@ -120,21 +141,32 @@ 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]; + return @""; } return k; } -- (void)getNetworklist:(void (^)(NSArray*))completionHandler +- (void)getNetworklist:(void (^)(NSArray<Network *> *))completionHandler error:(NSError *__autoreleasing*)error { - NSString *urlString = [[baseURL stringByAppendingString:@"/network?auth="] stringByAppendingString:[self key]]; + NSString* key = [self key:error]; + if(*error) { + return; + } + + NSString *urlString = [[baseURL stringByAppendingString:@"/network?auth="] stringByAppendingString:key]; NSURL *url = [NSURL URLWithString:urlString]; NSURLSessionDataTask *task = @@ -171,31 +203,36 @@ [task resume]; } -- (void)getNodeStatus:(void (^)(NodeStatus*))completionHandler +- (void)getNodeStatus:(void (^)(NodeStatus*))completionHandler error:(NSError*__autoreleasing*)error { - NSString *urlString = [[baseURL stringByAppendingString:@"/status?auth="] stringByAppendingString:[self key]]; + NSString *key = [self key:error]; + if(*error) { + return; + } + + NSString *urlString = [[baseURL stringByAppendingString:@"/status?auth="] stringByAppendingString:key]; NSURL *url = [NSURL URLWithString:urlString]; NSURLSessionDataTask *task = [session dataTaskWithURL:url - completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { - if(error) { - NSLog(@"Error: %@", error); + if(err) { + NSLog(@"Error: %@", err); return; } NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; NSInteger status = [httpResponse statusCode]; - NSError *err; + NSError *err2; if(status == 200) { NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 - error:&err]; + error:&err2]; - if(err) { - NSLog(@"Error fetching node status: %@", err); + if(err2) { + NSLog(@"Error fetching node status: %@", err2); return; } @@ -207,10 +244,17 @@ [task resume]; } -- (void)joinNetwork:(NSString*)networkId allowManaged:(BOOL)allowManaged allowGlobal:(BOOL)allowGlobal allowDefault:(BOOL)allowDefault +- (void)joinNetwork:(NSString*)networkId allowManaged:(BOOL)allowManaged allowGlobal:(BOOL)allowGlobal allowDefault:(BOOL)allowDefault error:(NSError *__autoreleasing*)error { + NSString *key = [self key:error]; + if(*error) { + return; + } - NSString *urlString = [[[[baseURL stringByAppendingString:@"/network/"] stringByAppendingString:networkId] stringByAppendingString:@"?auth="] stringByAppendingString:[self key]]; + NSString *urlString = [[[[baseURL stringByAppendingString:@"/network/"] + stringByAppendingString:networkId] + stringByAppendingString:@"?auth="] + stringByAppendingString:key]; NSURL *url = [NSURL URLWithString:urlString]; @@ -227,6 +271,7 @@ if(err) { NSLog(@"Error creating json data: %@", err); + *error = err; return; } @@ -236,9 +281,9 @@ [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; NSURLSessionDataTask *task = - [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { if(error) { - NSLog(@"Error posting join request: %@", error); + NSLog(@"Error posting join request: %@", err); } NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; @@ -254,9 +299,17 @@ [task resume]; } -- (void)leaveNetwork:(NSString*)networkId +- (void)leaveNetwork:(NSString*)networkId error:(NSError*__autoreleasing*)error { - NSString *urlString = [[[[baseURL stringByAppendingString:@"/network/"] stringByAppendingString:networkId] stringByAppendingString:@"?auth="] stringByAppendingString:[self key]]; + NSString *key = [self key:error]; + if(*error) { + return; + } + + NSString *urlString = [[[[baseURL stringByAppendingString:@"/network/"] + stringByAppendingString:networkId] + stringByAppendingString:@"?auth="] + stringByAppendingString:key]; NSURL *url = [NSURL URLWithString:urlString]; @@ -264,9 +317,9 @@ request.HTTPMethod = @"DELETE"; NSURLSessionDataTask *task = - [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { - if(error) { - NSLog(@"Error posting delete request: %@", error); + [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { + if(err) { + NSLog(@"Error posting delete request: %@", err); return; } |