123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- //
- // NCNetworkingSync.m
- // Nextcloud
- //
- // Created by Marino Faggiana on 29/10/17.
- // Copyright © 2017 TWS. All rights reserved.
- //
- #import "NCNetworkingSync.h"
- #import "CCUtility.h"
- #import "CCCertificate.h"
- @implementation NCNetworkingSync
- + (NCNetworkingSync *)sharedManager {
- static NCNetworkingSync *sharedManager;
- @synchronized(self)
- {
- if (!sharedManager) {
- sharedManager = [NCNetworkingSync new];
- }
- return sharedManager;
- }
- }
- #pragma --------------------------------------------------------------------------------------------
- #pragma mark ============================
- #pragma --------------------------------------------------------------------------------------------
- - (NSError *)checkServer:(NSString *)serverUrl user:(NSString *)user userID:(NSString *)userID password:(NSString *)password
- {
- OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
- __block NSError *returnError = nil;
-
- dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-
- [communication setCredentialsWithUser:user andUserID:userID andPassword:password];
- [communication setUserAgent:[CCUtility getUserAgent]];
-
- [communication checkServer:serverUrl onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
-
- dispatch_semaphore_signal(semaphore);
-
- } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
-
- returnError = error;
- dispatch_semaphore_signal(semaphore);
- }];
-
- while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
- [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-
- return returnError;
- }
- - (NSError *)readFile:(NSString *)filePathName user:(NSString *)user userID:(NSString *)userID password:(NSString *)password
- {
- OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
- __block NSError *returnError = nil;
-
- dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-
- [communication setCredentialsWithUser: user andUserID: userID andPassword: password];
- [communication setUserAgent:[CCUtility getUserAgent]];
-
- [communication readFile:filePathName onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer) {
-
- dispatch_semaphore_signal(semaphore);
-
- } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
-
- returnError = error;
- dispatch_semaphore_signal(semaphore);
- }];
-
- while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
- [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-
- return returnError;
- }
- #pragma --------------------------------------------------------------------------------------------
- #pragma mark ===== End-to-End Encryption =====
- #pragma --------------------------------------------------------------------------------------------
- - (NSError *)lockEndToEndFolderEncrypted:(NSString *)user userID:(NSString *)userID password:(NSString *)password url:(NSString *)url fileID:(NSString *)fileID token:(NSString **)token
- {
- OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
- __block NSError *returnError = nil;
- __block NSString *returnToken = nil;
- dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-
- [communication setCredentialsWithUser:user andUserID:userID andPassword:password];
- [communication setUserAgent:[CCUtility getUserAgent]];
-
- [communication lockEndToEndFolderEncrypted:[url stringByAppendingString:@"/"] fileID:fileID token:*token onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *token, NSString *redirectedServer) {
-
- returnToken = token;
- dispatch_semaphore_signal(semaphore);
-
- } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
-
- returnError = [NSError errorWithDomain:@"com.nextcloud.nextcloud" code:response.statusCode userInfo:[NSDictionary dictionaryWithObject:@"Lock folder error" forKey:NSLocalizedDescriptionKey]];
- dispatch_semaphore_signal(semaphore);
- }];
-
- while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
- [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-
- *token = returnToken;
- return returnError;
- }
- - (NSError *)unlockEndToEndFolderEncrypted:(NSString *)user userID:(NSString *)userID password:(NSString *)password url:(NSString *)url fileID:(NSString *)fileID token:(NSString *)token
- {
- OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
- __block NSError *returnError= nil;
- dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-
- [communication setCredentialsWithUser:user andUserID:userID andPassword:password];
- [communication setUserAgent:[CCUtility getUserAgent]];
-
- [communication unlockEndToEndFolderEncrypted:[url stringByAppendingString:@"/"] fileID:fileID token:token onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
-
- dispatch_semaphore_signal(semaphore);
-
- } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
-
- returnError = [NSError errorWithDomain:@"com.nextcloud.nextcloud" code:response.statusCode userInfo:[NSDictionary dictionaryWithObject:@"Unlock folder error" forKey:NSLocalizedDescriptionKey]];
- dispatch_semaphore_signal(semaphore);
- }];
-
- while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
- [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-
- return returnError;
- }
- - (NSError *)markEndToEndFolderEncrypted:(NSString *)user userID:(NSString *)userID password:(NSString *)password url:(NSString *)url fileID:(NSString *)fileID
- {
- OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
- __block NSError *returnError= nil;
-
- dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-
- [communication setCredentialsWithUser:user andUserID:userID andPassword:password];
- [communication setUserAgent:[CCUtility getUserAgent]];
-
- [communication markEndToEndFolderEncrypted:[url stringByAppendingString:@"/"] fileID:fileID onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
-
- dispatch_semaphore_signal(semaphore);
-
- } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
-
- returnError = [NSError errorWithDomain:@"com.nextcloud.nextcloud" code:response.statusCode userInfo:[NSDictionary dictionaryWithObject:@"Mark folder as encrypted error" forKey:NSLocalizedDescriptionKey]];
- dispatch_semaphore_signal(semaphore);
- }];
-
- while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
- [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-
- return returnError;
- }
- - (NSError *)deletemarkEndToEndFolderEncrypted:(NSString *)user userID:(NSString *)userID password:(NSString *)password url:(NSString *)url fileID:(NSString *)fileID
- {
- OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
- __block NSError *returnError= nil;
-
- dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-
- [communication setCredentialsWithUser:user andUserID:userID andPassword:password];
- [communication setUserAgent:[CCUtility getUserAgent]];
-
- [communication deletemarkEndToEndFolderEncrypted:[url stringByAppendingString:@"/"] fileID:fileID onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
-
- dispatch_semaphore_signal(semaphore);
- } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
-
- returnError = [NSError errorWithDomain:@"com.nextcloud.nextcloud" code:response.statusCode userInfo:[NSDictionary dictionaryWithObject:@"Remove folder as encrypted error" forKey:NSLocalizedDescriptionKey]];
- dispatch_semaphore_signal(semaphore);
- }];
-
- while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
- [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-
- return returnError;
- }
- @end
|