// // DropboxV2ObjC.m // FMC Planner 2 // // Created by Kilian Hofmann on 29.03.16. // Copyright © 2016 Kilian Hofmann. All rights reserved. // #import "DropboxV2ObjC.h" @implementation DropboxV2ObjC - (DropboxV2ObjC *)init { self = [super init]; self.rootDirectory = @"/Apps/FMC Planner 2/"; self.kJSONNullObject = [@"null" dataUsingEncoding:NSASCIIStringEncoding]; self.kDropboxProtectionSpace = [[NSURLProtectionSpace alloc] initWithHost:@"dropbox" port:443 protocol:@"HTTP" realm:nil authenticationMethod:@"OAuth2"]; return self; } #pragma mark - OAuth stuff - (BOOL)authorizeUserWithToke:(NSURL *)token completion:(void (^)(void))handler { NSScanner *scan = [NSScanner scannerWithString:token.absoluteString]; NSString *error = [[NSString alloc] init]; [scan scanUpToString:@"&error=" intoString:&error]; if (![error isEqualToString:token.absoluteString]) { handler(); return false; } // No error, refine token NSString *tokenUnrefined = [[NSString alloc] init]; scan = [NSScanner scannerWithString:token.absoluteString]; [scan scanUpToString:@"&" intoString:&tokenUnrefined]; NSString *tokenRefined = [tokenUnrefined substringFromIndex:21]; _token = tokenRefined; NSURLCredential *credential = [NSURLCredential credentialWithUser:@"Dropbox" password:_token persistence:NSURLCredentialPersistencePermanent]; [[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:_kDropboxProtectionSpace]; handler(); return true; } - (BOOL)deauthorizeUser { NSDictionary *credentials = [[NSURLCredentialStorage sharedCredentialStorage] credentialsForProtectionSpace:_kDropboxProtectionSpace]; NSURLCredential *credential = [credentials.objectEnumerator nextObject]; [[NSURLCredentialStorage sharedCredentialStorage] removeCredential:credential forProtectionSpace:_kDropboxProtectionSpace]; return true; } #pragma mark - File and directory operations #pragma mark - Other operations - (NSDictionary *)getUserInfo { NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; request.URL = [NSURL URLWithString: @"https://api.dropboxapi.com/2/users/get_current_account"]; [request addValue:[NSString stringWithFormat:@"Bearer %@", _token] .precomposedStringWithCanonicalMapping forHTTPHeaderField:(@"Authorization") .precomposedStringWithCanonicalMapping]; [request addValue:(@"application/json") .precomposedStringWithCanonicalMapping forHTTPHeaderField:(@"Content-Type") .precomposedStringWithCanonicalMapping]; request.HTTPMethod = @"POST"; request.HTTPBody = _kJSONNullObject; NSURLResponse *response = nil; NSError *error = nil; id data = [self parseJSON:[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]]; if ([data isKindOfClass:[NSDictionary class]]) { return data; } else { return nil; } } #pragma mark - Helper methods - (id)parseJSON:(NSData *)data { NSError *error = nil; id object = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; if (error == nil) { return object; } else { return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; } } @end