mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-05-29 21:44:23 +00:00
Added a path for error handling when fetching data from the ZeroTier daemon
Still need to wire up error messages to the user.
This commit is contained in:
parent
35d5ed9c2b
commit
c2a01f6db4
@ -266,13 +266,24 @@
|
|||||||
NSString *nwid = [NSString stringWithFormat:@"%10llx", network.nwid];
|
NSString *nwid = [NSString stringWithFormat:@"%10llx", network.nwid];
|
||||||
|
|
||||||
if(network.connected) {
|
if(network.connected) {
|
||||||
[[ServiceCom sharedInstance] leaveNetwork:nwid];
|
NSError *error = nil;
|
||||||
|
|
||||||
|
[[ServiceCom sharedInstance] leaveNetwork:nwid error:&error];
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
// TODO: Display error message
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
NSError *error = nil;
|
||||||
[[ServiceCom sharedInstance] joinNetwork:nwid
|
[[ServiceCom sharedInstance] joinNetwork:nwid
|
||||||
allowManaged:network.allowManaged
|
allowManaged:network.allowManaged
|
||||||
allowGlobal:network.allowGlobal
|
allowGlobal:network.allowGlobal
|
||||||
allowDefault:(network.allowDefault && ![Network defaultRouteExists:self.networks])];
|
allowDefault:(network.allowDefault && ![Network defaultRouteExists:self.networks])
|
||||||
|
error:&error];
|
||||||
|
|
||||||
|
// TODO: Display error message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,10 +72,17 @@ NSString * const JoinedNetworksKey = @"com.zerotier.one.joined-networks";
|
|||||||
- (IBAction)onJoinClicked:(id)sender {
|
- (IBAction)onJoinClicked:(id)sender {
|
||||||
NSString *networkId = self.network.stringValue;
|
NSString *networkId = self.network.stringValue;
|
||||||
|
|
||||||
|
NSError *error = nil;
|
||||||
[[ServiceCom sharedInstance] joinNetwork:networkId
|
[[ServiceCom sharedInstance] joinNetwork:networkId
|
||||||
allowManaged:(self.allowManagedCheckBox.state == NSOnState)
|
allowManaged:(self.allowManagedCheckBox.state == NSOnState)
|
||||||
allowGlobal:(self.allowGlobalCheckBox.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 = @"";
|
self.network.stringValue = @"";
|
||||||
|
|
||||||
|
@ -42,15 +42,26 @@
|
|||||||
|
|
||||||
- (void)joinNetwork:(NSString*)nwid
|
- (void)joinNetwork:(NSString*)nwid
|
||||||
{
|
{
|
||||||
|
NSError *error = nil;
|
||||||
[[ServiceCom sharedInstance] joinNetwork:nwid
|
[[ServiceCom sharedInstance] joinNetwork:nwid
|
||||||
allowManaged:(self.allowManaged.state == NSOnState)
|
allowManaged:(self.allowManaged.state == NSOnState)
|
||||||
allowGlobal:(self.allowGlobal.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
|
- (void)leaveNetwork:(NSString*)nwid
|
||||||
{
|
{
|
||||||
[[ServiceCom sharedInstance] leaveNetwork:nwid];
|
NSError *error = nil;
|
||||||
|
[[ServiceCom sharedInstance] leaveNetwork:nwid error:&error];
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
// TODO: Display error message
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -74,13 +74,21 @@ NSString * const StatusUpdateKey = @"com.zerotier.one.status";
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NSError *error = nil;
|
||||||
|
|
||||||
[[ServiceCom sharedInstance] getNetworklist:^(NSArray<Network *> *networkList) {
|
[[ServiceCom sharedInstance] getNetworklist:^(NSArray<Network *> *networkList) {
|
||||||
_receivedNetworks = networkList;
|
_receivedNetworks = networkList;
|
||||||
|
|
||||||
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
|
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
|
||||||
[self internal_updateNetworkInfo];
|
[self internal_updateNetworkInfo];
|
||||||
}];
|
} ];
|
||||||
}];
|
} error:&error];
|
||||||
|
|
||||||
|
if(error) {
|
||||||
|
// TODO: Display error message
|
||||||
|
|
||||||
|
[self stop];
|
||||||
|
}
|
||||||
|
|
||||||
[[ServiceCom sharedInstance] getNodeStatus:^(NodeStatus *status) {
|
[[ServiceCom sharedInstance] getNodeStatus:^(NodeStatus *status) {
|
||||||
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:status forKey:@"status"];
|
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:status forKey:@"status"];
|
||||||
@ -90,7 +98,13 @@ NSString * const StatusUpdateKey = @"com.zerotier.one.status";
|
|||||||
object:nil
|
object:nil
|
||||||
userInfo:userInfo];
|
userInfo:userInfo];
|
||||||
}];
|
}];
|
||||||
}];
|
} error:&error];
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
// TODO: Display error message
|
||||||
|
|
||||||
|
[self stop];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)deleteSavedNetwork:(NSString*)networkId
|
- (void)deleteSavedNetwork:(NSString*)networkId
|
||||||
|
@ -20,9 +20,9 @@
|
|||||||
|
|
||||||
- (id)init;
|
- (id)init;
|
||||||
|
|
||||||
- (void)getNetworklist:(void (^)(NSArray<Network*>*))completionHandler;
|
- (void)getNetworklist:(void (^)(NSArray<Network*>*))completionHandler error:(NSError* __autoreleasing *)error;
|
||||||
- (void)getNodeStatus:(void (^)(NodeStatus*))completionHandler;
|
- (void)getNodeStatus:(void (^)(NodeStatus*))completionHandler error:(NSError*__autoreleasing*)error;
|
||||||
- (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;
|
||||||
- (void)leaveNetwork:(NSString*)networkId;
|
- (void)leaveNetwork:(NSString*)networkId error:(NSError*__autoreleasing*)error;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString*)key
|
- (NSString*)key:(NSError* __autoreleasing *)err
|
||||||
{
|
{
|
||||||
static NSString *k = nil;
|
static NSString *k = nil;
|
||||||
|
|
||||||
@ -63,10 +63,20 @@
|
|||||||
if (error) {
|
if (error) {
|
||||||
NSLog(@"Error: %@", error);
|
NSLog(@"Error: %@", error);
|
||||||
k = nil;
|
k = nil;
|
||||||
|
*err = error;
|
||||||
return @"";
|
return @"";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
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
|
[[NSFileManager defaultManager] createDirectoryAtURL:appSupportDir
|
||||||
withIntermediateDirectories:YES
|
withIntermediateDirectories:YES
|
||||||
attributes:nil
|
attributes:nil
|
||||||
@ -74,6 +84,7 @@
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
NSLog(@"Error: %@", error);
|
NSLog(@"Error: %@", error);
|
||||||
|
*err = error;
|
||||||
k = nil;
|
k = nil;
|
||||||
return @"";
|
return @"";
|
||||||
}
|
}
|
||||||
@ -83,6 +94,12 @@
|
|||||||
|
|
||||||
if (status != errAuthorizationSuccess) {
|
if (status != errAuthorizationSuccess) {
|
||||||
NSLog(@"Authorization Failed! %d", status);
|
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 @"";
|
return @"";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,6 +121,10 @@
|
|||||||
|
|
||||||
if (status != errAuthorizationSuccess) {
|
if (status != errAuthorizationSuccess) {
|
||||||
NSLog(@"Authorization Failed! %d", status);
|
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 @"";
|
return @"";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,21 +141,32 @@
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
NSLog(@"Error writing token to disk: %@", error);
|
NSLog(@"Error writing token to disk: %@", error);
|
||||||
|
*err = error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k == nil) {
|
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;
|
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];
|
NSURL *url = [NSURL URLWithString:urlString];
|
||||||
NSURLSessionDataTask *task =
|
NSURLSessionDataTask *task =
|
||||||
@ -171,31 +203,36 @@
|
|||||||
[task resume];
|
[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];
|
NSURL *url = [NSURL URLWithString:urlString];
|
||||||
NSURLSessionDataTask *task =
|
NSURLSessionDataTask *task =
|
||||||
[session dataTaskWithURL:url
|
[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) {
|
if(err) {
|
||||||
NSLog(@"Error: %@", error);
|
NSLog(@"Error: %@", err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
|
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
|
||||||
NSInteger status = [httpResponse statusCode];
|
NSInteger status = [httpResponse statusCode];
|
||||||
|
|
||||||
NSError *err;
|
NSError *err2;
|
||||||
if(status == 200) {
|
if(status == 200) {
|
||||||
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data
|
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data
|
||||||
options:0
|
options:0
|
||||||
error:&err];
|
error:&err2];
|
||||||
|
|
||||||
if(err) {
|
if(err2) {
|
||||||
NSLog(@"Error fetching node status: %@", err);
|
NSLog(@"Error fetching node status: %@", err2);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,10 +244,17 @@
|
|||||||
[task resume];
|
[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];
|
NSURL *url = [NSURL URLWithString:urlString];
|
||||||
|
|
||||||
@ -227,6 +271,7 @@
|
|||||||
|
|
||||||
if(err) {
|
if(err) {
|
||||||
NSLog(@"Error creating json data: %@", err);
|
NSLog(@"Error creating json data: %@", err);
|
||||||
|
*error = err;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,9 +281,9 @@
|
|||||||
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
||||||
|
|
||||||
NSURLSessionDataTask *task =
|
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) {
|
if(error) {
|
||||||
NSLog(@"Error posting join request: %@", error);
|
NSLog(@"Error posting join request: %@", err);
|
||||||
}
|
}
|
||||||
|
|
||||||
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
|
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
|
||||||
@ -254,9 +299,17 @@
|
|||||||
[task resume];
|
[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];
|
NSURL *url = [NSURL URLWithString:urlString];
|
||||||
|
|
||||||
@ -264,9 +317,9 @@
|
|||||||
request.HTTPMethod = @"DELETE";
|
request.HTTPMethod = @"DELETE";
|
||||||
|
|
||||||
NSURLSessionDataTask *task =
|
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) {
|
if(err) {
|
||||||
NSLog(@"Error posting delete request: %@", error);
|
NSLog(@"Error posting delete request: %@", err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user