FMCPlanner2/FMC Planner 2/DropboxV2ObjC.m

113 lines
3.8 KiB
Objective-C

//
// 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