OCNetworking.m 107 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095
  1. //
  2. // OCnetworking.m
  3. // Nextcloud iOS
  4. //
  5. // Created by Marino Faggiana on 10/05/15.
  6. // Copyright (c) 2017 TWS. All rights reserved.
  7. //
  8. // Author Marino Faggiana <m.faggiana@twsweb.it>
  9. //
  10. // This program is free software: you can redistribute it and/or modify
  11. // it under the terms of the GNU General Public License as published by
  12. // the Free Software Foundation, either version 3 of the License, or
  13. // (at your option) any later version.
  14. //
  15. // This program is distributed in the hope that it will be useful,
  16. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. // GNU General Public License for more details.
  19. //
  20. // You should have received a copy of the GNU General Public License
  21. // along with this program. If not, see <http://www.gnu.org/licenses/>.
  22. //
  23. #import "OCNetworking.h"
  24. #import "CCUtility.h"
  25. #import "CCGraphics.h"
  26. #import "CCCertificate.h"
  27. #import "NSString+Encode.h"
  28. #import "NCBridgeSwift.h"
  29. #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
  30. @interface OCnetworking ()
  31. {
  32. NSString *_activeUser;
  33. NSString *_activeUserID;
  34. NSString *_activePassword;
  35. NSString *_activeUrl;
  36. }
  37. @end
  38. @implementation OCnetworking
  39. - (id)initWithDelegate:(id <OCNetworkingDelegate>)delegate metadataNet:(CCMetadataNet *)metadataNet withUser:(NSString *)withUser withUserID:(NSString *)withUserID withPassword:(NSString *)withPassword withUrl:(NSString *)withUrl
  40. {
  41. self = [super init];
  42. if (self) {
  43. _delegate = delegate;
  44. _metadataNet = [CCMetadataNet new];
  45. _metadataNet = [metadataNet copy];
  46. _activeUser = withUser;
  47. _activeUserID = withUserID;
  48. _activePassword = withPassword;
  49. _activeUrl = withUrl;
  50. }
  51. return self;
  52. }
  53. - (void)start
  54. {
  55. if (![NSThread isMainThread]) {
  56. [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];
  57. return;
  58. }
  59. [self willChangeValueForKey:@"isExecuting"];
  60. _isExecuting = YES;
  61. [self didChangeValueForKey:@"isExecuting"];
  62. if (self.isCancelled) {
  63. [self finish];
  64. } else {
  65. [self poolNetworking];
  66. }
  67. }
  68. - (void)finish
  69. {
  70. [self willChangeValueForKey:@"isExecuting"];
  71. [self willChangeValueForKey:@"isFinished"];
  72. _isExecuting = NO;
  73. _isFinished = YES;
  74. [self didChangeValueForKey:@"isExecuting"];
  75. [self didChangeValueForKey:@"isFinished"];
  76. }
  77. - (void)cancel
  78. {
  79. if (_isExecuting) {
  80. [self complete];
  81. }
  82. [super cancel];
  83. }
  84. - (void)poolNetworking
  85. {
  86. #ifndef EXTENSION
  87. [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
  88. #endif
  89. if([self respondsToSelector:NSSelectorFromString(_metadataNet.action)])
  90. [self performSelector:NSSelectorFromString(_metadataNet.action)];
  91. }
  92. #pragma --------------------------------------------------------------------------------------------
  93. #pragma mark ===== Delegate =====
  94. #pragma --------------------------------------------------------------------------------------------
  95. - (void)complete
  96. {
  97. [self finish];
  98. #ifndef EXTENSION
  99. [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
  100. #endif
  101. }
  102. #pragma --------------------------------------------------------------------------------------------
  103. #pragma mark ===== download =====
  104. #pragma --------------------------------------------------------------------------------------------
  105. - (void)downloadFileNameServerUrl:(NSString *)fileNameServerUrl fileNameLocalPath:(NSString *)fileNameLocalPath success:(void (^)(void))success failure:(void (^)(NSString *message, NSInteger errorCode))failure
  106. {
  107. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  108. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  109. [communication setUserAgent:[CCUtility getUserAgent]];
  110. [communication downloadFileSession:fileNameServerUrl toDestiny:fileNameLocalPath defaultPriority:YES onCommunication:communication progress:^(NSProgress *progress) {
  111. //float percent = roundf (progress.fractionCompleted * 100);
  112. } successRequest:^(NSURLResponse *response, NSURL *filePath) {
  113. success();
  114. } failureRequest:^(NSURLResponse *response, NSError *error) {
  115. NSString *message;
  116. NSInteger errorCode;
  117. NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
  118. errorCode = httpResponse.statusCode;
  119. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  120. errorCode = error.code;
  121. // Error
  122. if (errorCode == 503)
  123. message = NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil);
  124. else
  125. message = [error.userInfo valueForKey:@"NSLocalizedDescription"];
  126. failure(message, errorCode);
  127. }];
  128. }
  129. #pragma --------------------------------------------------------------------------------------------
  130. #pragma mark ===== upload =====
  131. #pragma --------------------------------------------------------------------------------------------
  132. #pragma --------------------------------------------------------------------------------------------
  133. #pragma mark ===== downloadThumbnail =====
  134. #pragma --------------------------------------------------------------------------------------------
  135. - (void)downloadThumbnail
  136. {
  137. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  138. __block NSString *ext;
  139. NSInteger width = 0, height = 0;
  140. NSString *directoryUser = [CCUtility getDirectoryActiveUser:_activeUser activeUrl:_activeUrl];
  141. NSString *dimOfThumbnail = (NSString *)_metadataNet.options;
  142. if ([dimOfThumbnail.lowercaseString isEqualToString:@"xs"]) { width = 32; height = 32; ext = @"ico"; }
  143. else if ([dimOfThumbnail.lowercaseString isEqualToString:@"s"]) { width = 64; height = 64; ext = @"ico"; }
  144. else if ([dimOfThumbnail.lowercaseString isEqualToString:@"m"]) { width = 128; height = 128; ext = @"ico"; }
  145. else if ([dimOfThumbnail.lowercaseString isEqualToString:@"l"]) { width = 640; height = 640; ext = @"pvw"; }
  146. else if ([dimOfThumbnail.lowercaseString isEqualToString:@"xl"]) { width = 1024; height = 1024; ext = @"pvw"; }
  147. if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/%@.%@", directoryUser, _metadataNet.fileID, ext]]) {
  148. if ([self.delegate respondsToSelector:@selector(downloadThumbnailSuccessFailure:message:errorCode:)])
  149. [self.delegate downloadThumbnailSuccessFailure:_metadataNet message:nil errorCode:0];
  150. [self complete];
  151. return;
  152. }
  153. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  154. [communication setUserAgent:[CCUtility getUserAgent]];
  155. [communication getRemoteThumbnailByServer:[_activeUrl stringByAppendingString:@"/"] ofFilePath:_metadataNet.fileName withWidth:width andHeight:height onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSData *thumbnail, NSString *redirectedServer) {
  156. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  157. if ([recordAccount.account isEqualToString:_metadataNet.account] && [thumbnail length] > 0) {
  158. UIImage *thumbnailImage = [UIImage imageWithData:thumbnail];
  159. NSString *directoryUser = [CCUtility getDirectoryActiveUser:_activeUser activeUrl:_activeUrl];
  160. [CCGraphics saveIcoWithEtag:_metadataNet.fileID image:thumbnailImage writeToFile:[NSString stringWithFormat:@"%@/%@.%@", directoryUser, _metadataNet.fileID, ext] copy:NO move:NO fromPath:nil toPath:nil];
  161. if ([self.delegate respondsToSelector:@selector(downloadThumbnailSuccessFailure:message:errorCode:)] && [_metadataNet.action isEqualToString:actionDownloadThumbnail])
  162. [self.delegate downloadThumbnailSuccessFailure:_metadataNet message:nil errorCode:0];
  163. } else {
  164. if ([self.delegate respondsToSelector:@selector(downloadThumbnailSuccessFailure:message:errorCode:)] && [_metadataNet.action isEqualToString:actionDownloadThumbnail])
  165. [self.delegate downloadThumbnailSuccessFailure:_metadataNet message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  166. }
  167. [self complete];
  168. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  169. NSString *message = [NSString new];
  170. NSInteger errorCode = [self downloadThumbnailFailureResponse:response error:error message:&message];
  171. if ([self.delegate respondsToSelector:@selector(downloadThumbnailSuccessFailure:message:errorCode:)] && [_metadataNet.action isEqualToString:actionDownloadThumbnail]) {
  172. [self.delegate downloadThumbnailSuccessFailure:_metadataNet message:message errorCode:errorCode];
  173. }
  174. [self complete];
  175. }];
  176. }
  177. - (void)downloadThumbnailWithDimOfThumbnail:(NSString *)dimOfThumbnail fileName:(NSString *)fileName fileNameLocal:(NSString *)fileNameLocal success:(void (^)(void))success failure:(void (^)(NSString *message, NSInteger errorCode))failure
  178. {
  179. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  180. __block NSString *ext;
  181. NSInteger width = 0, height = 0;
  182. NSString *directoryUser = [CCUtility getDirectoryActiveUser:_activeUser activeUrl:_activeUrl];
  183. if ([dimOfThumbnail.lowercaseString isEqualToString:@"xs"]) { width = 32; height = 32; ext = @"ico"; }
  184. else if ([dimOfThumbnail.lowercaseString isEqualToString:@"s"]) { width = 64; height = 64; ext = @"ico"; }
  185. else if ([dimOfThumbnail.lowercaseString isEqualToString:@"m"]) { width = 128; height = 128; ext = @"ico"; }
  186. else if ([dimOfThumbnail.lowercaseString isEqualToString:@"l"]) { width = 640; height = 640; ext = @"pvw"; }
  187. else if ([dimOfThumbnail.lowercaseString isEqualToString:@"xl"]) { width = 1024; height = 1024; ext = @"pvw"; }
  188. NSString *fileNamePathLocal = [NSString stringWithFormat:@"%@/%@.%@", directoryUser, fileNameLocal, ext];
  189. if ([[NSFileManager defaultManager] fileExistsAtPath:fileNamePathLocal]) {
  190. success();
  191. } else {
  192. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  193. [communication setUserAgent:[CCUtility getUserAgent]];
  194. [communication getRemoteThumbnailByServer:[_activeUrl stringByAppendingString:@"/"] ofFilePath:fileName withWidth:width andHeight:height onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSData *thumbnail, NSString *redirectedServer) {
  195. [CCGraphics saveIcoWithEtag:fileNameLocal image:[UIImage imageWithData:thumbnail] writeToFile:fileNamePathLocal copy:NO move:NO fromPath:nil toPath:nil];
  196. success();
  197. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  198. NSString *message = [NSString new];
  199. NSInteger errorCode = [self downloadThumbnailFailureResponse:response error:error message:&message];
  200. failure(message, errorCode);
  201. }];
  202. }
  203. }
  204. - (NSInteger)downloadThumbnailFailureResponse:(NSHTTPURLResponse *)response error:(NSError *)error message:(NSString **)message
  205. {
  206. NSInteger errorCode = response.statusCode;
  207. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  208. errorCode = error.code;
  209. // Error
  210. if (errorCode == 503)
  211. *message = NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil);
  212. else
  213. *message = [error.userInfo valueForKey:@"NSLocalizedDescription"];
  214. return errorCode;
  215. }
  216. #pragma --------------------------------------------------------------------------------------------
  217. #pragma mark ===== Read Folder =====
  218. #pragma --------------------------------------------------------------------------------------------
  219. - (void)readFolder
  220. {
  221. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  222. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  223. [communication setUserAgent:[CCUtility getUserAgent]];
  224. [communication readFolder:_metadataNet.serverUrl depth:_metadataNet.depth withUserSessionToken:nil onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer, NSString *token) {
  225. // Test active account
  226. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  227. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  228. if ([self.delegate respondsToSelector:@selector(readFolderSuccessFailure:metadataFolder:metadatas:message:errorCode:)])
  229. [self.delegate readFolderSuccessFailure:_metadataNet metadataFolder:nil metadatas:nil message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  230. } else {
  231. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
  232. NSMutableArray *metadatas = [NSMutableArray new];
  233. tableMetadata *metadataFolder = [tableMetadata new];
  234. _metadataNet.directoryID = [self readFolderSuccessServerUrl:_metadataNet.serverUrl items:items account:_metadataNet.account metadatas:&metadatas metadataFolder:&metadataFolder];
  235. dispatch_async(dispatch_get_main_queue(), ^{
  236. if ([self.delegate respondsToSelector:@selector(readFolderSuccessFailure:metadataFolder:metadatas:message:errorCode:)])
  237. [self.delegate readFolderSuccessFailure:_metadataNet metadataFolder:metadataFolder metadatas:metadatas message:nil errorCode:0];
  238. });
  239. });
  240. }
  241. [self complete];
  242. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer) {
  243. NSString *message = [NSString new];
  244. NSInteger errorCode = [self readFolderFailureServerUrl:_metadataNet.serverUrl response:response error:error message:&message];
  245. if ([self.delegate respondsToSelector:@selector(readFolderSuccessFailure:metadataFolder:metadatas:message:errorCode:)]) {
  246. [self.delegate readFolderSuccessFailure:_metadataNet metadataFolder:nil metadatas:nil message:message errorCode:errorCode];
  247. }
  248. [self complete];
  249. }];
  250. }
  251. - (void)readFolderWithServerUrl:(NSString *)serverUrl depth:(NSString *)depth account:(NSString *)account success:(void(^)(NSArray *metadatas, tableMetadata *metadataFolder, NSString *directoryID))success failure:(void (^)(NSString *message, NSInteger errorCode))failure
  252. {
  253. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  254. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  255. [communication setUserAgent:[CCUtility getUserAgent]];
  256. [communication readFolder:serverUrl depth:depth withUserSessionToken:nil onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer, NSString *token) {
  257. // Test active account
  258. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  259. if (![recordAccount.account isEqualToString:account]) {
  260. failure(NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil), k_CCErrorUserNotAvailble);
  261. } else {
  262. NSMutableArray *metadatas = [NSMutableArray new];
  263. tableMetadata *metadataFolder = [tableMetadata new];
  264. NSString *directoryID = [self readFolderSuccessServerUrl:serverUrl items:items account:account metadatas:&metadatas metadataFolder:&metadataFolder];
  265. success(metadatas, metadataFolder, directoryID);
  266. }
  267. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer) {
  268. NSString *message = [NSString new];
  269. NSInteger errorCode = [self readFolderFailureServerUrl:serverUrl response:response error:error message:&message];
  270. failure(message, errorCode);
  271. }];
  272. }
  273. - (NSInteger)readFolderFailureServerUrl:(NSString *)serverUrl response:(NSHTTPURLResponse *)response error:(NSError *)error message:(NSString **)message
  274. {
  275. NSInteger errorCode = response.statusCode;
  276. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  277. errorCode = error.code;
  278. // Error
  279. if (errorCode == 503)
  280. *message = NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil);
  281. else
  282. *message = [error.userInfo valueForKey:@"NSLocalizedDescription"];
  283. // Request trusted certificated
  284. if ([error code] == NSURLErrorServerCertificateUntrusted)
  285. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  286. // Activity
  287. [[NCManageDatabase sharedInstance] addActivityClient:serverUrl fileID:@"" action:k_activityDebugActionReadFolder selector:@"" note:[error.userInfo valueForKey:@"NSLocalizedDescription"] type:k_activityTypeFailure verbose:k_activityVerboseHigh activeUrl:_activeUrl];
  288. return errorCode;
  289. }
  290. - (NSString *)readFolderSuccessServerUrl:(NSString *)serverUrl items:(NSArray *)items account:(NSString *)account metadatas:(NSMutableArray **)metadatas metadataFolder:(tableMetadata **)metadataFolder
  291. {
  292. BOOL showHiddenFiles = [CCUtility getShowHiddenFiles];
  293. BOOL isFolderEncrypted = [CCUtility isFolderEncrypted:serverUrl account:account];
  294. // Check items > 0
  295. if ([items count] == 0) {
  296. #ifndef EXTENSION
  297. AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  298. [appDelegate messageNotification:@"Server error" description:@"Read Folder WebDAV : [items NULL] please fix" visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:k_CCErrorInternalError];
  299. #endif
  300. return nil;
  301. }
  302. // directory [0]
  303. OCFileDto *itemDtoFolder = [items objectAtIndex:0];
  304. //NSDate *date = [NSDate dateWithTimeIntervalSince1970:itemDtoDirectory.date];
  305. NSString *directoryID = [[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDtoFolder.isEncrypted favorite:itemDtoFolder.isFavorite fileID:itemDtoFolder.ocId permissions:itemDtoFolder.permissions serverUrl:serverUrl].directoryID;
  306. NSString *autoUploadFileName = [[NCManageDatabase sharedInstance] getAccountAutoUploadFileName];
  307. NSString *autoUploadDirectory = [[NCManageDatabase sharedInstance] getAccountAutoUploadDirectory:_activeUrl];
  308. NSString *directoryUser = [CCUtility getDirectoryActiveUser:_activeUser activeUrl:_activeUrl];
  309. NSString *directoryIDFolder;
  310. NSString *serverUrlFolder;
  311. // Metadata . (self Folder)
  312. if ([serverUrl isEqualToString:[CCUtility getHomeServerUrlActiveUrl:_activeUrl]]) {
  313. // root folder
  314. serverUrlFolder = @"..";
  315. directoryIDFolder = @"00000000-0000-0000-0000-000000000000";
  316. *metadataFolder = [CCUtility trasformedOCFileToCCMetadata:itemDtoFolder fileName:@"." serverUrl:serverUrlFolder directoryID:directoryIDFolder autoUploadFileName:autoUploadFileName autoUploadDirectory:autoUploadDirectory activeAccount:account directoryUser:directoryUser isFolderEncrypted:isFolderEncrypted];
  317. } else {
  318. serverUrlFolder = [CCUtility deletingLastPathComponentFromServerUrl:serverUrl];
  319. directoryIDFolder = [[NCManageDatabase sharedInstance] getDirectoryID:serverUrlFolder];
  320. if (!directoryIDFolder) {
  321. return directoryID;
  322. }
  323. *metadataFolder = [CCUtility trasformedOCFileToCCMetadata:itemDtoFolder fileName:[serverUrl lastPathComponent] serverUrl:serverUrlFolder directoryID:directoryIDFolder autoUploadFileName:autoUploadFileName autoUploadDirectory:autoUploadDirectory activeAccount:account directoryUser:directoryUser isFolderEncrypted:isFolderEncrypted];
  324. }
  325. NSArray *itemsSortedArray = [items sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
  326. NSString *first = [(OCFileDto*)a fileName];
  327. NSString *second = [(OCFileDto*)b fileName];
  328. return [[first lowercaseString] compare:[second lowercaseString]];
  329. }];
  330. for (NSUInteger i=1; i < [itemsSortedArray count]; i++) {
  331. OCFileDto *itemDto = [itemsSortedArray objectAtIndex:i];
  332. NSString *fileName = [itemDto.fileName stringByReplacingOccurrencesOfString:@"/" withString:@""];
  333. // Skip hidden files
  334. if (fileName.length > 0) {
  335. if (!showHiddenFiles && [[fileName substringToIndex:1] isEqualToString:@"."])
  336. continue;
  337. } else
  338. continue;
  339. if (itemDto.isDirectory) {
  340. (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDto.isEncrypted favorite:itemDto.isFavorite fileID:itemDto.ocId permissions:itemDto.permissions serverUrl:[CCUtility stringAppendServerUrl:serverUrl addFileName:fileName]];
  341. }
  342. // ----- BUG #942 ---------
  343. if ([itemDto.etag length] == 0) {
  344. #ifndef EXTENSION
  345. AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  346. [appDelegate messageNotification:@"Server error" description:@"Metadata fileID absent, record excluded, please fix" visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:k_CCErrorInternalError];
  347. #endif
  348. continue;
  349. }
  350. // ------------------------
  351. [*metadatas addObject:[CCUtility trasformedOCFileToCCMetadata:itemDto fileName:itemDto.fileName serverUrl:serverUrl directoryID:directoryID autoUploadFileName:autoUploadFileName autoUploadDirectory:autoUploadDirectory activeAccount:account directoryUser:directoryUser isFolderEncrypted:isFolderEncrypted]];
  352. }
  353. return directoryID;
  354. }
  355. #pragma --------------------------------------------------------------------------------------------
  356. #pragma mark ===== Search =====
  357. #pragma --------------------------------------------------------------------------------------------
  358. - (void)search
  359. {
  360. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  361. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  362. [communication setUserAgent:[CCUtility getUserAgent]];
  363. NSString *path = [_activeUrl stringByAppendingString:dav];
  364. NSString *folder = [_metadataNet.serverUrl stringByReplacingOccurrencesOfString:[CCUtility getHomeServerUrlActiveUrl:_activeUrl] withString:@""];
  365. NSString *dateLastModified;
  366. if (_metadataNet.date) {
  367. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  368. NSLocale *enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
  369. [dateFormatter setLocale:enUSPOSIXLocale];
  370. [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
  371. dateLastModified = [dateFormatter stringFromDate:_metadataNet.date];
  372. }
  373. [communication search:path folder:folder fileName: [NSString stringWithFormat:@"%%%@%%", _metadataNet.fileName] depth:_metadataNet.depth dateLastModified:dateLastModified contentType:_metadataNet.contentType withUserSessionToken:nil onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer, NSString *token) {
  374. // Test active account
  375. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  376. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  377. if ([self.delegate respondsToSelector:@selector(searchSuccessFailure:metadatas:message:errorCode:)])
  378. [self.delegate searchSuccessFailure:_metadataNet metadatas:nil message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  379. [self complete];
  380. return;
  381. }
  382. NSMutableArray *metadatas = [NSMutableArray new];
  383. BOOL showHiddenFiles = [CCUtility getShowHiddenFiles];
  384. NSString *autoUploadFileName = [[NCManageDatabase sharedInstance] getAccountAutoUploadFileName];
  385. NSString *autoUploadDirectory = [[NCManageDatabase sharedInstance] getAccountAutoUploadDirectory:_activeUrl];
  386. NSString *directoryUser = [CCUtility getDirectoryActiveUser:_activeUser activeUrl:_activeUrl];
  387. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
  388. for(OCFileDto *itemDto in items) {
  389. NSString *serverUrl, *directoryID;
  390. BOOL isFolderEncrypted;
  391. NSString *fileName = [itemDto.fileName stringByReplacingOccurrencesOfString:@"/" withString:@""];
  392. // Skip hidden files
  393. if (fileName.length > 0) {
  394. if (!showHiddenFiles && [[fileName substringToIndex:1] isEqualToString:@"."])
  395. continue;
  396. } else
  397. continue;
  398. // ----- BUG #942 ---------
  399. if ([itemDto.etag length] == 0) {
  400. #ifndef EXTENSION
  401. AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  402. [appDelegate messageNotification:@"Server error" description:@"Metadata fileID absent, record excluded, please fix" visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:k_CCErrorInternalError];
  403. #endif
  404. continue;
  405. }
  406. // ------------------------
  407. serverUrl = [itemDto.filePath stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@/files/%@", dav, _activeUserID] withString:@""];
  408. if ([serverUrl hasPrefix:@"/"])
  409. serverUrl = [serverUrl substringFromIndex:1];
  410. if ([serverUrl hasSuffix:@"/"])
  411. serverUrl = [serverUrl substringToIndex:[serverUrl length] - 1];
  412. serverUrl = [CCUtility stringAppendServerUrl:[_activeUrl stringByAppendingString:webDAV] addFileName:serverUrl];
  413. if (itemDto.isDirectory) {
  414. (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDto.isEncrypted favorite:itemDto.isFavorite fileID:itemDto.ocId permissions:itemDto.permissions serverUrl:[NSString stringWithFormat:@"%@/%@", serverUrl, fileName]];
  415. }
  416. directoryID = [[NCManageDatabase sharedInstance] getDirectoryID:serverUrl];
  417. isFolderEncrypted = [CCUtility isFolderEncrypted:serverUrl account:_metadataNet.account];
  418. [metadatas addObject:[CCUtility trasformedOCFileToCCMetadata:itemDto fileName:itemDto.fileName serverUrl:serverUrl directoryID:directoryID autoUploadFileName:autoUploadFileName autoUploadDirectory:autoUploadDirectory activeAccount:_metadataNet.account directoryUser:directoryUser isFolderEncrypted:isFolderEncrypted]];
  419. }
  420. dispatch_async(dispatch_get_main_queue(), ^{
  421. if ([self.delegate respondsToSelector:@selector(searchSuccessFailure:metadatas:message:errorCode:)])
  422. [self.delegate searchSuccessFailure:_metadataNet metadatas:metadatas message:nil errorCode:0];
  423. });
  424. });
  425. [self complete];
  426. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer) {
  427. NSInteger errorCode = response.statusCode;
  428. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  429. errorCode = error.code;
  430. // Error
  431. if ([self.delegate respondsToSelector:@selector(searchSuccessFailure:metadatas:message:errorCode:)]) {
  432. if (errorCode == 503)
  433. [self.delegate searchSuccessFailure:_metadataNet metadatas:nil message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  434. else
  435. [self.delegate searchSuccessFailure:_metadataNet metadatas:nil message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  436. }
  437. // Request trusted certificated
  438. if ([error code] == NSURLErrorServerCertificateUntrusted)
  439. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  440. [self complete];
  441. }];
  442. }
  443. #pragma --------------------------------------------------------------------------------------------
  444. #pragma mark ===== Setting Favorite =====
  445. #pragma --------------------------------------------------------------------------------------------
  446. - (void)settingFavorite
  447. {
  448. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  449. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  450. [communication setUserAgent:[CCUtility getUserAgent]];
  451. NSString *path = [_activeUrl stringByAppendingString:dav];
  452. [communication settingFavoriteServer:path andFileOrFolderPath:_metadataNet.fileName favorite:[_metadataNet.options boolValue] withUserSessionToken:nil onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer, NSString *token) {
  453. // Test active account
  454. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  455. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  456. if ([self.delegate respondsToSelector:@selector(settingFavoriteSuccessFailure:message:errorCode:)])
  457. [self.delegate settingFavoriteSuccessFailure:_metadataNet message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  458. [self complete];
  459. return;
  460. }
  461. if ([self.delegate respondsToSelector:@selector(settingFavoriteSuccessFailure:message:errorCode:)])
  462. [self.delegate settingFavoriteSuccessFailure:_metadataNet message:nil errorCode:0];
  463. [self complete];
  464. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer) {
  465. NSInteger errorCode = response.statusCode;
  466. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  467. errorCode = error.code;
  468. // Error
  469. if ([self.delegate respondsToSelector:@selector(settingFavoriteSuccessFailure:message:errorCode:)]) {
  470. if (errorCode == 503)
  471. [self.delegate settingFavoriteSuccessFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  472. else
  473. [self.delegate settingFavoriteSuccessFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  474. }
  475. // Request trusted certificated
  476. if ([error code] == NSURLErrorServerCertificateUntrusted)
  477. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  478. [self complete];
  479. }];
  480. }
  481. #pragma --------------------------------------------------------------------------------------------
  482. #pragma mark ===== Listing Favorites =====
  483. #pragma --------------------------------------------------------------------------------------------
  484. - (void)listingFavorites
  485. {
  486. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  487. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  488. [communication setUserAgent:[CCUtility getUserAgent]];
  489. NSString *path = [_activeUrl stringByAppendingString:dav];
  490. NSString *folder = [_metadataNet.serverUrl stringByReplacingOccurrencesOfString:[CCUtility getHomeServerUrlActiveUrl:_activeUrl] withString:@""];
  491. [communication listingFavorites:path folder:folder withUserSessionToken:nil onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer, NSString *token) {
  492. // Test active account
  493. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  494. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  495. if ([self.delegate respondsToSelector:@selector(listingFavoritesSuccessFailure:metadatas:message:errorCode:)])
  496. [self.delegate listingFavoritesSuccessFailure:_metadataNet metadatas:nil message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  497. [self complete];
  498. return;
  499. }
  500. NSMutableArray *metadatas = [NSMutableArray new];
  501. BOOL showHiddenFiles = [CCUtility getShowHiddenFiles];
  502. NSString *autoUploadFileName = [[NCManageDatabase sharedInstance] getAccountAutoUploadFileName];
  503. NSString *autoUploadDirectory = [[NCManageDatabase sharedInstance] getAccountAutoUploadDirectory:_activeUrl];
  504. NSString *directoryUser = [CCUtility getDirectoryActiveUser:_activeUser activeUrl:_activeUrl];
  505. // Order by fileNamePath
  506. items = [items sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  507. OCFileDto *record1 = obj1, *record2 = obj2;
  508. NSString *path1 = [[record1.filePath stringByAppendingString:record1.fileName] lowercaseString];
  509. NSString *path2 = [[record2.filePath stringByAppendingString:record2.fileName] lowercaseString];
  510. return [path1 compare:path2];
  511. }];
  512. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
  513. for(OCFileDto *itemDto in items) {
  514. NSString *serverUrl, *directoryID;
  515. BOOL isFolderEncrypted;
  516. NSString *fileName = [itemDto.fileName stringByReplacingOccurrencesOfString:@"/" withString:@""];
  517. // Skip hidden files
  518. if (fileName.length > 0) {
  519. if (!showHiddenFiles && [[fileName substringToIndex:1] isEqualToString:@"."])
  520. continue;
  521. } else
  522. continue;
  523. // ----- BUG #942 ---------
  524. if ([itemDto.etag length] == 0) {
  525. #ifndef EXTENSION
  526. AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  527. [appDelegate messageNotification:@"Server error" description:@"Metadata fileID absent, record excluded, please fix" visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:k_CCErrorInternalError];
  528. #endif
  529. continue;
  530. }
  531. // ------------------------
  532. serverUrl = [itemDto.filePath stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@/files/%@", dav, _activeUserID] withString:@""];
  533. if ([serverUrl hasPrefix:@"/"])
  534. serverUrl = [serverUrl substringFromIndex:1];
  535. if ([serverUrl hasSuffix:@"/"])
  536. serverUrl = [serverUrl substringToIndex:[serverUrl length] - 1];
  537. serverUrl = [CCUtility stringAppendServerUrl:[_activeUrl stringByAppendingString:webDAV] addFileName:serverUrl];
  538. if (itemDto.isDirectory) {
  539. (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDto.isEncrypted favorite:itemDto.isFavorite fileID:itemDto.ocId permissions:itemDto.permissions serverUrl:[NSString stringWithFormat:@"%@/%@", serverUrl, fileName]];
  540. }
  541. directoryID = [[NCManageDatabase sharedInstance] getDirectoryID:serverUrl];
  542. isFolderEncrypted = [CCUtility isFolderEncrypted:serverUrl account:_metadataNet.account];
  543. [metadatas addObject:[CCUtility trasformedOCFileToCCMetadata:itemDto fileName:itemDto.fileName serverUrl:serverUrl directoryID:directoryID autoUploadFileName:autoUploadFileName autoUploadDirectory:autoUploadDirectory activeAccount:_metadataNet.account directoryUser:directoryUser isFolderEncrypted:isFolderEncrypted]];
  544. }
  545. dispatch_async(dispatch_get_main_queue(), ^{
  546. if ([self.delegate respondsToSelector:@selector(listingFavoritesSuccessFailure:metadatas:message:errorCode:)])
  547. [self.delegate listingFavoritesSuccessFailure:_metadataNet metadatas:metadatas message:nil errorCode:0];
  548. });
  549. });
  550. [self complete];
  551. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer) {
  552. NSInteger errorCode = response.statusCode;
  553. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  554. errorCode = error.code;
  555. // Error
  556. if ([self.delegate respondsToSelector:@selector(listingFavoritesSuccessFailure:metadatas:message:errorCode:)]) {
  557. if (errorCode == 503)
  558. [self.delegate listingFavoritesSuccessFailure:_metadataNet metadatas:nil message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  559. else
  560. [self.delegate listingFavoritesSuccessFailure:_metadataNet metadatas:nil message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  561. }
  562. // Request trusted certificated
  563. if ([error code] == NSURLErrorServerCertificateUntrusted)
  564. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  565. [self complete];
  566. }];
  567. }
  568. #pragma --------------------------------------------------------------------------------------------
  569. #pragma mark ===== Create Folder =====
  570. #pragma --------------------------------------------------------------------------------------------
  571. - (void)createFolder
  572. {
  573. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  574. NSString *nameFolderURL = [NSString stringWithFormat:@"%@/%@", _metadataNet.serverUrl, _metadataNet.fileName];
  575. NSString *autoUploadFileName = [[NCManageDatabase sharedInstance] getAccountAutoUploadFileName];
  576. NSString *autoUploadDirectory = [[NCManageDatabase sharedInstance] getAccountAutoUploadDirectory:_activeUrl];
  577. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  578. [communication setUserAgent:[CCUtility getUserAgent]];
  579. [communication createFolder:nameFolderURL onCommunication:communication withForbiddenCharactersSupported:YES successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
  580. // Test active account
  581. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  582. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  583. if ([self.delegate respondsToSelector:@selector(createFolderSuccessFailure:message:errorCode:)])
  584. [self.delegate createFolderSuccessFailure:_metadataNet message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  585. [self complete];
  586. return;
  587. }
  588. NSDictionary *fields = [response allHeaderFields];
  589. _metadataNet.fileID = [CCUtility removeForbiddenCharactersFileSystem:[fields objectForKey:@"OC-FileId"]];
  590. _metadataNet.date = [CCUtility dateEnUsPosixFromCloud:[fields objectForKey:@"Date"]];
  591. if ([self.delegate respondsToSelector:@selector(createFolderSuccessFailure:message:errorCode:)])
  592. [self.delegate createFolderSuccessFailure:_metadataNet message:nil errorCode:0];
  593. [self complete];
  594. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  595. NSString *message;
  596. if (([_metadataNet.fileName isEqualToString:autoUploadFileName] == YES && [_metadataNet.serverUrl isEqualToString:autoUploadDirectory] == YES))
  597. message = nil;
  598. else
  599. message = [CCError manageErrorOC:response.statusCode error:error];
  600. NSInteger errorCode = response.statusCode;
  601. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  602. errorCode = error.code;
  603. if ([self.delegate respondsToSelector:@selector(createFolderSuccessFailure:message:errorCode:)])
  604. [self.delegate createFolderSuccessFailure:_metadataNet message:message errorCode:errorCode];
  605. // Request trusted certificated
  606. if ([error code] == NSURLErrorServerCertificateUntrusted)
  607. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  608. [self complete];
  609. } errorBeforeRequest:^(NSError *error) {
  610. NSString *message;
  611. if (([_metadataNet.fileName isEqualToString:autoUploadFileName] == YES && [_metadataNet.serverUrl isEqualToString:autoUploadDirectory] == YES))
  612. message = nil;
  613. else {
  614. if (error.code == OCErrorForbidenCharacters)
  615. message = NSLocalizedStringFromTable(@"_forbidden_characters_from_server_", @"Error", nil);
  616. else
  617. message = NSLocalizedStringFromTable(@"_unknow_response_server_", @"Error", nil);
  618. }
  619. // Error
  620. if ([self.delegate respondsToSelector:@selector(createFolderSuccessFailure:message:errorCode:)]) {
  621. if (error.code == 503)
  622. [self.delegate createFolderSuccessFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:error.code];
  623. else
  624. [self.delegate createFolderSuccessFailure:_metadataNet message:message errorCode:error.code];
  625. }
  626. [self complete];
  627. }];
  628. }
  629. #pragma --------------------------------------------------------------------------------------------
  630. #pragma mark ===== Delete =====
  631. #pragma --------------------------------------------------------------------------------------------
  632. - (void)deleteFileOrFolder
  633. {
  634. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  635. NSString *serverFileUrl = [NSString stringWithFormat:@"%@/%@", _metadataNet.serverUrl, _metadataNet.fileName];
  636. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  637. [communication setUserAgent:[CCUtility getUserAgent]];
  638. [communication deleteFileOrFolder:serverFileUrl onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
  639. // Test active account
  640. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  641. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  642. if ([self.delegate respondsToSelector:@selector(deleteFileOrFolderSuccessFailure:message:errorCode:)])
  643. [self.delegate deleteFileOrFolderSuccessFailure:_metadataNet message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  644. [self complete];
  645. return;
  646. }
  647. if ([_metadataNet.selector rangeOfString:selectorDelete].location != NSNotFound && [self.delegate respondsToSelector:@selector(deleteFileOrFolderSuccessFailure:message:errorCode:)])
  648. [self.delegate deleteFileOrFolderSuccessFailure:_metadataNet message:@"" errorCode:0];
  649. [self complete];
  650. } failureRquest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  651. NSInteger errorCode = response.statusCode;
  652. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  653. errorCode = error.code;
  654. // Error
  655. if ([self.delegate respondsToSelector:@selector(deleteFileOrFolderSuccessFailure:message:errorCode:)]) {
  656. if (errorCode == 503)
  657. [self.delegate deleteFileOrFolderSuccessFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  658. else
  659. [self.delegate deleteFileOrFolderSuccessFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  660. }
  661. // Request trusted certificated
  662. if ([error code] == NSURLErrorServerCertificateUntrusted)
  663. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  664. [self complete];
  665. }];
  666. }
  667. #pragma --------------------------------------------------------------------------------------------
  668. #pragma mark ===== Move =====
  669. #pragma --------------------------------------------------------------------------------------------
  670. - (void)moveFileOrFolder
  671. {
  672. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  673. NSString *origineURL = [NSString stringWithFormat:@"%@/%@", _metadataNet.serverUrl, _metadataNet.fileName];
  674. NSString *destinazioneURL = [NSString stringWithFormat:@"%@/%@", _metadataNet.serverUrlTo, _metadataNet.fileNameTo];
  675. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  676. [communication setUserAgent:[CCUtility getUserAgent]];
  677. [communication moveFileOrFolder:origineURL toDestiny:destinazioneURL onCommunication:communication withForbiddenCharactersSupported:YES successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
  678. if ([_metadataNet.selector isEqualToString:selectorRename] && [self.delegate respondsToSelector:@selector(renameSuccess:)])
  679. [self.delegate renameSuccess:_metadataNet];
  680. if ([_metadataNet.selector rangeOfString:selectorMove].location != NSNotFound && [self.delegate respondsToSelector:@selector(moveSuccess:)])
  681. [self.delegate moveSuccess:_metadataNet];
  682. [self complete];
  683. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  684. NSInteger errorCode = response.statusCode;
  685. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  686. errorCode = error.code;
  687. if ([self.delegate respondsToSelector:@selector(renameMoveFileOrFolderFailure:message:errorCode:)])
  688. [self.delegate renameMoveFileOrFolderFailure:_metadataNet message:[CCError manageErrorOC:response.statusCode error:error] errorCode:errorCode];
  689. // Request trusted certificated
  690. if ([error code] == NSURLErrorServerCertificateUntrusted)
  691. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  692. [self complete];
  693. } errorBeforeRequest:^(NSError *error) {
  694. NSString *message;
  695. if (error.code == OCErrorMovingTheDestinyAndOriginAreTheSame) {
  696. message = NSLocalizedStringFromTable(@"_error_folder_destiny_is_the_same_", @"Error", nil);
  697. } else if (error.code == OCErrorMovingFolderInsideHimself) {
  698. message = NSLocalizedStringFromTable(@"_error_folder_destiny_is_the_same_", @"Error", nil);
  699. } else if (error.code == OCErrorMovingDestinyNameHaveForbiddenCharacters) {
  700. message = NSLocalizedStringFromTable(@"_forbidden_characters_from_server_", @"Error", nil);
  701. } else {
  702. message = NSLocalizedStringFromTable(@"_unknow_response_server_", @"Error", nil);
  703. }
  704. // Error
  705. if ([self.delegate respondsToSelector:@selector(renameMoveFileOrFolderFailure:message:errorCode:)]) {
  706. if (error.code == 503)
  707. [self.delegate renameMoveFileOrFolderFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:error.code];
  708. else
  709. [self.delegate renameMoveFileOrFolderFailure:_metadataNet message:message errorCode:error.code];
  710. }
  711. [self complete];
  712. }];
  713. }
  714. #pragma --------------------------------------------------------------------------------------------
  715. #pragma mark ===== ReadFile =====
  716. #pragma --------------------------------------------------------------------------------------------
  717. - (void)readFile
  718. {
  719. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  720. NSString *fileName;
  721. if (_metadataNet.fileName) {
  722. fileName = [NSString stringWithFormat:@"%@/%@", _metadataNet.serverUrl, _metadataNet.fileName];
  723. } else {
  724. _metadataNet.fileName = @".";
  725. fileName = _metadataNet.serverUrl;
  726. }
  727. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  728. [communication setUserAgent:[CCUtility getUserAgent]];
  729. [communication readFile:fileName onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer) {
  730. // Test active account
  731. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  732. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  733. if ([self.delegate respondsToSelector:@selector(readFileSuccessFailure:metadata:message:errorCode:)])
  734. [self.delegate readFileSuccessFailure:_metadataNet metadata:nil message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  735. [self complete];
  736. return;
  737. }
  738. BOOL isFolderEncrypted = [CCUtility isFolderEncrypted:_metadataNet.serverUrl account:_metadataNet.account];
  739. if ([recordAccount.account isEqualToString:_metadataNet.account] && [items count] > 0) {
  740. tableMetadata *metadata = [tableMetadata new];
  741. OCFileDto *itemDto = [items objectAtIndex:0];
  742. NSString *directoryID = [[NCManageDatabase sharedInstance] getDirectoryID:_metadataNet.serverUrl];
  743. if (directoryID) {
  744. NSString *autoUploadFileName = [[NCManageDatabase sharedInstance] getAccountAutoUploadFileName];
  745. NSString *autoUploadDirectory = [[NCManageDatabase sharedInstance] getAccountAutoUploadDirectory:_activeUrl];
  746. NSString *directoryUser = [CCUtility getDirectoryActiveUser:_activeUser activeUrl:_activeUrl];
  747. metadata = [CCUtility trasformedOCFileToCCMetadata:itemDto fileName:_metadataNet.fileName serverUrl:_metadataNet.serverUrl directoryID:directoryID autoUploadFileName:autoUploadFileName autoUploadDirectory:autoUploadDirectory activeAccount:_metadataNet.account directoryUser:directoryUser isFolderEncrypted:isFolderEncrypted];
  748. if([self.delegate respondsToSelector:@selector(readFileSuccessFailure:metadata:message:errorCode:)])
  749. [self.delegate readFileSuccessFailure:_metadataNet metadata:metadata message:nil errorCode:0];
  750. } else {
  751. if([self.delegate respondsToSelector:@selector(readFileSuccessFailure:metadata:message:errorCode:)])
  752. [self.delegate readFileSuccessFailure:_metadataNet metadata:nil message:@"Directory not found" errorCode:k_CCErrorInternalError];
  753. }
  754. }
  755. // BUG 1038
  756. if ([items count] == 0) {
  757. #ifndef EXTENSION
  758. AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  759. [appDelegate messageNotification:@"Server error" description:@"Read File WebDAV : [items NULL] please fix" visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:k_CCErrorInternalError];
  760. #endif
  761. if([self.delegate respondsToSelector:@selector(readFileSuccessFailure:metadata:message:errorCode:)])
  762. [self.delegate readFileSuccessFailure:_metadataNet metadata:nil message:@"Read File WebDAV : [items NULL] please fix" errorCode:k_CCErrorInternalError];
  763. }
  764. [self complete];
  765. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  766. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  767. _metadataNet.errorRetry++;
  768. NSInteger errorCode = response.statusCode;
  769. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  770. errorCode = error.code;
  771. // Error
  772. if ([self.delegate respondsToSelector:@selector(readFileSuccessFailure:metadata:message:errorCode:)] && [recordAccount.account isEqualToString:_metadataNet.account]) {
  773. if (errorCode == 503)
  774. [self.delegate readFileSuccessFailure:_metadataNet metadata:nil message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  775. else
  776. [self.delegate readFileSuccessFailure:_metadataNet metadata:nil message:[CCError manageErrorOC:response.statusCode error:error] errorCode:errorCode];
  777. }
  778. // Request trusted certificated
  779. if ([error code] == NSURLErrorServerCertificateUntrusted)
  780. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  781. [self complete];
  782. }];
  783. }
  784. #pragma --------------------------------------------------------------------------------------------
  785. #pragma mark ===== Shared =====
  786. #pragma --------------------------------------------------------------------------------------------
  787. - (void)readShareServer
  788. {
  789. #ifndef EXTENSION
  790. AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  791. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  792. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  793. [communication setUserAgent:[CCUtility getUserAgent]];
  794. [communication readSharedByServer:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer) {
  795. // Test active account
  796. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  797. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  798. if ([self.delegate respondsToSelector:@selector(shareFailure:message:errorCode:)])
  799. [self.delegate shareFailure:_metadataNet message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  800. [self complete];
  801. return;
  802. }
  803. BOOL openWindow = NO;
  804. [appDelegate.sharesID removeAllObjects];
  805. if ([recordAccount.account isEqualToString:_metadataNet.account]) {
  806. for (OCSharedDto *item in items)
  807. [appDelegate.sharesID setObject:item forKey:[@(item.idRemoteShared) stringValue]];
  808. if ([_metadataNet.selector isEqual:selectorOpenWindowShare]) openWindow = YES;
  809. if ([_metadataNet.action isEqual:actionUpdateShare]) openWindow = YES;
  810. if ([_metadataNet.action isEqual:actionShare]) openWindow = YES;
  811. if ([_metadataNet.action isEqual:actionShareWith]) openWindow = YES;
  812. }
  813. if([self.delegate respondsToSelector:@selector(readSharedSuccess:items:openWindow:)])
  814. [self.delegate readSharedSuccess:_metadataNet items:appDelegate.sharesID openWindow:openWindow];
  815. [self complete];
  816. } failureRequest :^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  817. NSInteger errorCode = response.statusCode;
  818. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  819. errorCode = error.code;
  820. // Error
  821. if ([self.delegate respondsToSelector:@selector(shareFailure:message:errorCode:)]) {
  822. if (errorCode == 503)
  823. [self.delegate shareFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  824. else
  825. [self.delegate shareFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  826. }
  827. // Request trusted certificated
  828. if ([error code] == NSURLErrorServerCertificateUntrusted)
  829. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  830. [self complete];
  831. }];
  832. #endif
  833. }
  834. - (void)share
  835. {
  836. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  837. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  838. [communication setUserAgent:[CCUtility getUserAgent]];
  839. [communication shareFileOrFolderByServer:[_activeUrl stringByAppendingString:@"/"] andFileOrFolderPath:[_metadataNet.fileName encodeString:NSUTF8StringEncoding] andPassword:[_metadataNet.password encodeString:NSUTF8StringEncoding] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *token, NSString *redirectedServer) {
  840. [self readShareServer];
  841. } failureRequest :^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  842. NSInteger errorCode = response.statusCode;
  843. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  844. errorCode = error.code;
  845. // Error
  846. if ([self.delegate respondsToSelector:@selector(shareFailure:message:errorCode:)]) {
  847. if (errorCode == 503)
  848. [self.delegate shareFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  849. else
  850. [self.delegate shareFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  851. }
  852. // Request trusted certificated
  853. if ([error code] == NSURLErrorServerCertificateUntrusted)
  854. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  855. [self complete];
  856. }];
  857. }
  858. // * @param shareeType -> NSInteger: to set the type of sharee (user/group/federated)
  859. - (void)shareWith
  860. {
  861. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  862. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  863. [communication setUserAgent:[CCUtility getUserAgent]];
  864. [communication shareWith:_metadataNet.share shareeType:_metadataNet.shareeType inServer:[_activeUrl stringByAppendingString:@"/"] andFileOrFolderPath:[_metadataNet.fileName encodeString:NSUTF8StringEncoding] andPermissions:_metadataNet.sharePermission onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
  865. [self readShareServer];
  866. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  867. NSInteger errorCode = response.statusCode;
  868. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  869. errorCode = error.code;
  870. // Error
  871. if ([self.delegate respondsToSelector:@selector(shareFailure:message:errorCode:)]) {
  872. if (errorCode == 503)
  873. [self.delegate shareFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  874. else
  875. [self.delegate shareFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  876. }
  877. // Request trusted certificated
  878. if ([error code] == NSURLErrorServerCertificateUntrusted)
  879. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  880. [self complete];
  881. }];
  882. }
  883. - (void)updateShare
  884. {
  885. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  886. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  887. [communication setUserAgent:[CCUtility getUserAgent]];
  888. [communication updateShare:[_metadataNet.share intValue] ofServerPath:[_activeUrl stringByAppendingString:@"/"] withPasswordProtect:[_metadataNet.password encodeString:NSUTF8StringEncoding] andExpirationTime:_metadataNet.expirationTime andPermissions:_metadataNet.sharePermission onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
  889. [self readShareServer];
  890. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  891. #ifndef EXTENSION
  892. AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  893. [appDelegate messageNotification:@"_error_" description:[CCError manageErrorOC:response.statusCode error:error] visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:error.code];
  894. #endif
  895. NSInteger errorCode = response.statusCode;
  896. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  897. errorCode = error.code;
  898. // Error
  899. if ([self.delegate respondsToSelector:@selector(shareFailure:message:errorCode:)]) {
  900. if (errorCode == 503)
  901. [self.delegate shareFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  902. else
  903. [self.delegate shareFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  904. }
  905. // Request trusted certificated
  906. if ([error code] == NSURLErrorServerCertificateUntrusted)
  907. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  908. [self complete];
  909. }];
  910. }
  911. - (void)unShare
  912. {
  913. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  914. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  915. [communication setUserAgent:[CCUtility getUserAgent]];
  916. [communication unShareFileOrFolderByServer:[_activeUrl stringByAppendingString:@"/"] andIdRemoteShared:[_metadataNet.share intValue] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
  917. if([self.delegate respondsToSelector:@selector(unShareSuccess:)])
  918. [self.delegate unShareSuccess:_metadataNet];
  919. [self complete];
  920. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  921. #ifndef EXTENSION
  922. [(AppDelegate *)[[UIApplication sharedApplication] delegate] messageNotification:@"_error_" description:[CCError manageErrorOC:response.statusCode error:error] visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:error.code];
  923. #endif
  924. NSInteger errorCode = response.statusCode;
  925. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  926. errorCode = error.code;
  927. // Error
  928. if ([self.delegate respondsToSelector:@selector(shareFailure:message:errorCode:)]) {
  929. if (errorCode == 503)
  930. [self.delegate shareFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  931. else
  932. [self.delegate shareFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  933. }
  934. // Request trusted certificated
  935. if ([error code] == NSURLErrorServerCertificateUntrusted)
  936. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  937. [self complete];
  938. }];
  939. }
  940. - (void)getUserAndGroup
  941. {
  942. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  943. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  944. [communication setUserAgent:[CCUtility getUserAgent]];
  945. [communication searchUsersAndGroupsWith:_metadataNet.options forPage:1 with:50 ofServer:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *itemList, NSString *redirectedServer) {
  946. if([self.delegate respondsToSelector:@selector(getUserAndGroupSuccess:items:)])
  947. [self.delegate getUserAndGroupSuccess:_metadataNet items:itemList];
  948. [self complete];
  949. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  950. NSInteger errorCode = response.statusCode;
  951. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  952. errorCode = error.code;
  953. // Error
  954. if ([self.delegate respondsToSelector:@selector(getUserAndGroupFailure:message:errorCode:)]) {
  955. if (errorCode == 503)
  956. [self.delegate getUserAndGroupFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  957. else
  958. [self.delegate getUserAndGroupFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  959. }
  960. // Request trusted certificated
  961. if ([error code] == NSURLErrorServerCertificateUntrusted)
  962. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  963. [self complete];
  964. }];
  965. }
  966. - (void)getSharePermissionsFile
  967. {
  968. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  969. NSString *fileName = [NSString stringWithFormat:@"%@/%@", _metadataNet.serverUrl, _metadataNet.fileName];
  970. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  971. [communication setUserAgent:[CCUtility getUserAgent]];
  972. [communication getSharePermissionsFile:fileName onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *permissions, NSString *redirectedServer) {
  973. // Test active account
  974. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  975. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  976. if ([self.delegate respondsToSelector:@selector(getSharePermissionsFileFailure:message:errorCode:)])
  977. [self.delegate getSharePermissionsFileFailure:_metadataNet message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  978. [self complete];
  979. return;
  980. }
  981. if([self.delegate respondsToSelector:@selector(getSharePermissionsFileSuccess:permissions:)])
  982. [self.delegate getSharePermissionsFileSuccess:_metadataNet permissions:permissions];
  983. [self complete];
  984. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  985. NSInteger errorCode = response.statusCode;
  986. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  987. errorCode = error.code;
  988. // Error
  989. if ([self.delegate respondsToSelector:@selector(getSharePermissionsFileFailure:message:errorCode:)]) {
  990. if (errorCode == 503)
  991. [self.delegate getSharePermissionsFileFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  992. else
  993. [self.delegate getSharePermissionsFileFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  994. }
  995. // Request trusted certificated
  996. if ([error code] == NSURLErrorServerCertificateUntrusted)
  997. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  998. [self complete];
  999. }];
  1000. }
  1001. #pragma --------------------------------------------------------------------------------------------
  1002. #pragma mark ===== Activity =====
  1003. #pragma --------------------------------------------------------------------------------------------
  1004. - (void)getActivityServer
  1005. {
  1006. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1007. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1008. [communication setUserAgent:[CCUtility getUserAgent]];
  1009. [communication getActivityServer:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *listOfActivity, NSString *redirectedServer) {
  1010. // Test active account
  1011. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  1012. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  1013. if ([self.delegate respondsToSelector:@selector(getActivityServerSuccessFailure:listOfActivity:message:errorCode:)])
  1014. [self.delegate getActivityServerSuccessFailure:_metadataNet listOfActivity:nil message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  1015. [self complete];
  1016. return;
  1017. }
  1018. if ([self.delegate respondsToSelector:@selector(getActivityServerSuccessFailure:listOfActivity:message:errorCode:)])
  1019. [self.delegate getActivityServerSuccessFailure:_metadataNet listOfActivity:listOfActivity message:nil errorCode:0];
  1020. [self complete];
  1021. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1022. NSInteger errorCode = response.statusCode;
  1023. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1024. errorCode = error.code;
  1025. // Error
  1026. if ([self.delegate respondsToSelector:@selector(getActivityServerSuccessFailure:listOfActivity:message:errorCode:)]) {
  1027. if (errorCode == 503)
  1028. [self.delegate getActivityServerSuccessFailure:_metadataNet listOfActivity:nil message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  1029. else
  1030. [self.delegate getActivityServerSuccessFailure:_metadataNet listOfActivity:nil message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1031. }
  1032. // Request trusted certificated
  1033. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1034. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1035. [self complete];
  1036. }];
  1037. }
  1038. #pragma --------------------------------------------------------------------------------------------
  1039. #pragma mark ===== External Sites =====
  1040. #pragma --------------------------------------------------------------------------------------------
  1041. - (void)getExternalSitesServer
  1042. {
  1043. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1044. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1045. [communication setUserAgent:[CCUtility getUserAgent]];
  1046. [communication getExternalSitesServer:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *listOfExternalSites, NSString *redirectedServer) {
  1047. // Test active account
  1048. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  1049. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  1050. if ([self.delegate respondsToSelector:@selector(getExternalSitesServerSuccessFailure:listOfExternalSites:message:errorCode:)])
  1051. [self.delegate getExternalSitesServerSuccessFailure:_metadataNet listOfExternalSites:nil message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  1052. [self complete];
  1053. return;
  1054. }
  1055. if ([self.delegate respondsToSelector:@selector(getExternalSitesServerSuccessFailure:listOfExternalSites:message:errorCode:)])
  1056. [self.delegate getExternalSitesServerSuccessFailure:_metadataNet listOfExternalSites:listOfExternalSites message:nil errorCode:0];
  1057. [self complete];
  1058. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1059. NSInteger errorCode = response.statusCode;
  1060. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1061. errorCode = error.code;
  1062. // Error
  1063. if ([self.delegate respondsToSelector:@selector(getExternalSitesServerSuccessFailure:listOfExternalSites:message:errorCode:)]) {
  1064. if (errorCode == 503)
  1065. [self.delegate getExternalSitesServerSuccessFailure:_metadataNet listOfExternalSites:nil message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  1066. else
  1067. [self.delegate getExternalSitesServerSuccessFailure:_metadataNet listOfExternalSites:nil message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1068. }
  1069. // Request trusted certificated
  1070. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1071. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1072. [self complete];
  1073. }];
  1074. }
  1075. #pragma --------------------------------------------------------------------------------------------
  1076. #pragma mark ===== Middleware Ping =====
  1077. #pragma --------------------------------------------------------------------------------------------
  1078. /*
  1079. - (void)middlewarePing
  1080. {
  1081. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1082. [communication setCredentialsWithUser:_activeUser andPassword:_activePassword];
  1083. [communication setUserAgent:[CCUtility getUserAgent]];
  1084. [communication getMiddlewarePing:_metadataNet.serverUrl onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *listOfExternalSites, NSString *redirectedServer) {
  1085. [self complete];
  1086. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1087. NSInteger errorCode = response.statusCode;
  1088. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1089. errorCode = error.code;
  1090. // Error
  1091. if ([self.delegate respondsToSelector:@selector(getExternalSitesServerFailure:message:errorCode:)]) {
  1092. if (errorCode == 503)
  1093. [self.delegate getExternalSitesServerFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  1094. else
  1095. [self.delegate getExternalSitesServerFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1096. }
  1097. // Request trusted certificated
  1098. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1099. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1100. [self complete];
  1101. }];
  1102. }
  1103. */
  1104. #pragma --------------------------------------------------------------------------------------------
  1105. #pragma mark ===== Notification =====
  1106. #pragma --------------------------------------------------------------------------------------------
  1107. - (void)getNotificationServer
  1108. {
  1109. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1110. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1111. [communication setUserAgent:[CCUtility getUserAgent]];
  1112. [communication getNotificationServer:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *listOfNotifications, NSString *redirectedServer) {
  1113. // Test active account
  1114. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  1115. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  1116. if ([self.delegate respondsToSelector:@selector(getNotificationServerSuccessFailure:listOfNotifications:message:errorCode:)])
  1117. [self.delegate getNotificationServerSuccessFailure:_metadataNet listOfNotifications:nil message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  1118. [self complete];
  1119. return;
  1120. }
  1121. if ([self.delegate respondsToSelector:@selector(getNotificationServerSuccessFailure:listOfNotifications:message:errorCode:)])
  1122. [self.delegate getNotificationServerSuccessFailure:_metadataNet listOfNotifications:listOfNotifications message:nil errorCode:0];
  1123. [self complete];
  1124. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1125. NSInteger errorCode = response.statusCode;
  1126. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1127. errorCode = error.code;
  1128. // Error
  1129. if ([self.delegate respondsToSelector:@selector(getNotificationServerSuccessFailure:listOfNotifications:message:errorCode:)]) {
  1130. if (errorCode == 503)
  1131. [self.delegate getNotificationServerSuccessFailure:_metadataNet listOfNotifications:nil message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  1132. else
  1133. [self.delegate getNotificationServerSuccessFailure:_metadataNet listOfNotifications:nil message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1134. }
  1135. // Request trusted certificated
  1136. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1137. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1138. // Activity
  1139. [[NCManageDatabase sharedInstance] addActivityClient:_activeUrl fileID:@"" action:k_activityDebugActionGetNotification selector:@"" note:[error.userInfo valueForKey:@"NSLocalizedDescription"] type:k_activityTypeFailure verbose:k_activityVerboseHigh activeUrl:_activeUrl];
  1140. [self complete];
  1141. }];
  1142. }
  1143. - (void)setNotificationServer
  1144. {
  1145. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1146. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1147. [communication setUserAgent:[CCUtility getUserAgent]];
  1148. NSString *type = _metadataNet.options;
  1149. [communication setNotificationServer:_metadataNet.serverUrl type:type onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
  1150. // Test active account
  1151. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  1152. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  1153. if ([self.delegate respondsToSelector:@selector(setNotificationServerSuccessFailure:message:errorCode:)])
  1154. [self.delegate setNotificationServerSuccessFailure:_metadataNet message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  1155. [self complete];
  1156. return;
  1157. }
  1158. if ([self.delegate respondsToSelector:@selector(setNotificationServerSuccessFailure:message:errorCode:)])
  1159. [self.delegate setNotificationServerSuccessFailure:_metadataNet message:nil errorCode:0];
  1160. [self complete];
  1161. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1162. NSInteger errorCode = response.statusCode;
  1163. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1164. errorCode = error.code;
  1165. // Error
  1166. if ([self.delegate respondsToSelector:@selector(setNotificationServerSuccessFailure:message:errorCode:)]) {
  1167. if (errorCode == 503)
  1168. [self.delegate setNotificationServerSuccessFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  1169. else
  1170. [self.delegate setNotificationServerSuccessFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1171. }
  1172. // Request trusted certificated
  1173. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1174. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1175. [self complete];
  1176. }];
  1177. }
  1178. - (void)subscribingNextcloudServer
  1179. {
  1180. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1181. communication.kindOfCredential = credentialNotSet;
  1182. [communication setUserAgent:[CCUtility getUserAgent]];
  1183. NSDictionary *parameter = _metadataNet.options;
  1184. NSString *pushToken = [parameter objectForKey:@"pushToken"];
  1185. NSString *pushTokenHash = [parameter objectForKey:@"pushTokenHash"];
  1186. NSString *devicePublicKey = [parameter objectForKey:@"devicePublicKey"];
  1187. // encode URL
  1188. devicePublicKey = [devicePublicKey stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
  1189. [communication subscribingNextcloudServerPush:_activeUrl pushTokenHash:pushTokenHash devicePublicKey:devicePublicKey proxyServerPath: [NCBrandOptions sharedInstance].pushNotificationServer onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *publicKey, NSString *deviceIdentifier, NSString *signature, NSString *redirectedServer) {
  1190. // encode URL
  1191. deviceIdentifier = [deviceIdentifier stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
  1192. signature = [signature stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
  1193. publicKey = [publicKey stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
  1194. [communication subscribingPushProxy:[NCBrandOptions sharedInstance].pushNotificationServer pushToken:pushToken deviceIdentifier:deviceIdentifier deviceIdentifierSignature:signature userPublicKey:publicKey onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
  1195. // Activity
  1196. [[NCManageDatabase sharedInstance] addActivityClient:[NCBrandOptions sharedInstance].pushNotificationServer fileID:@"" action:k_activityDebugActionPushProxy selector:@"" note:@"Service registered." type:k_activityTypeSuccess verbose:k_activityVerboseHigh activeUrl:_activeUrl];
  1197. [self complete];
  1198. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1199. NSInteger errorCode = response.statusCode;
  1200. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1201. errorCode = error.code;
  1202. // Error
  1203. if ([self.delegate respondsToSelector:@selector(subscribingNextcloudServerFailure:message:errorCode:)]) {
  1204. if (errorCode == 503)
  1205. [self.delegate subscribingNextcloudServerFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  1206. else
  1207. [self.delegate subscribingNextcloudServerFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1208. }
  1209. // Request trusted certificated
  1210. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1211. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1212. // Activity
  1213. [[NCManageDatabase sharedInstance] addActivityClient:[NCBrandOptions sharedInstance].pushNotificationServer fileID:@"" action:k_activityDebugActionPushProxy selector:@"" note:[error.userInfo valueForKey:@"NSLocalizedDescription"] type:k_activityTypeFailure verbose:k_activityVerboseHigh activeUrl:_activeUrl];
  1214. [self complete];
  1215. }];
  1216. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1217. NSInteger errorCode = response.statusCode;
  1218. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1219. errorCode = error.code;
  1220. // Error
  1221. if ([self.delegate respondsToSelector:@selector(subscribingNextcloudServerFailure:message:errorCode:)]) {
  1222. if (errorCode == 503)
  1223. [self.delegate subscribingNextcloudServerFailure:_metadataNet message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  1224. else
  1225. [self.delegate subscribingNextcloudServerFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1226. }
  1227. // Request trusted certificated
  1228. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1229. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1230. // Activity
  1231. [[NCManageDatabase sharedInstance] addActivityClient:_activeUrl fileID:@"" action:k_activityDebugActionServerPush selector:@"" note:[error.userInfo valueForKey:@"NSLocalizedDescription"] type:k_activityTypeFailure verbose:k_activityVerboseHigh activeUrl:_activeUrl];
  1232. [self complete];
  1233. }];
  1234. }
  1235. #pragma --------------------------------------------------------------------------------------------
  1236. #pragma mark ===== User Profile =====
  1237. #pragma --------------------------------------------------------------------------------------------
  1238. - (void)getUserProfile
  1239. {
  1240. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1241. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1242. [communication setUserAgent:[CCUtility getUserAgent]];
  1243. [communication getUserProfileServer:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, OCUserProfile *userProfile, NSString *redirectedServer) {
  1244. // Test active account
  1245. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  1246. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  1247. if ([self.delegate respondsToSelector:@selector(getUserProfileSuccessFailure:userProfile:message:errorCode:)])
  1248. [self.delegate getUserProfileSuccessFailure:_metadataNet userProfile:nil message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  1249. [self complete];
  1250. return;
  1251. }
  1252. if ([self.delegate respondsToSelector:@selector(getUserProfileSuccessFailure:userProfile:message:errorCode:)])
  1253. [self.delegate getUserProfileSuccessFailure:_metadataNet userProfile:userProfile message:nil errorCode:0];
  1254. [self complete];
  1255. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1256. NSInteger errorCode = response.statusCode;
  1257. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1258. errorCode = error.code;
  1259. // Error
  1260. if ([self.delegate respondsToSelector:@selector(getUserProfileSuccessFailure:userProfile:message:errorCode:)]) {
  1261. if (errorCode == 503)
  1262. [self.delegate getUserProfileSuccessFailure:_metadataNet userProfile:nil message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  1263. else
  1264. [self.delegate getUserProfileSuccessFailure:_metadataNet userProfile:nil message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1265. }
  1266. // Request trusted certificated
  1267. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1268. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1269. [self complete];
  1270. }];
  1271. }
  1272. #pragma --------------------------------------------------------------------------------------------
  1273. #pragma mark ===== Capabilities =====
  1274. #pragma --------------------------------------------------------------------------------------------
  1275. - (void)getCapabilitiesOfServer
  1276. {
  1277. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1278. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1279. [communication setUserAgent:[CCUtility getUserAgent]];
  1280. [communication getCapabilitiesOfServer:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, OCCapabilities *capabilities, NSString *redirectedServer) {
  1281. // Test active account
  1282. tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
  1283. if (![recordAccount.account isEqualToString:_metadataNet.account]) {
  1284. if ([self.delegate respondsToSelector:@selector(getCapabilitiesOfServerSuccessFailure:capabilities:message:errorCode:)])
  1285. [self.delegate getCapabilitiesOfServerSuccessFailure:_metadataNet capabilities:nil message:NSLocalizedStringFromTable(@"_error_user_not_available_", @"Error", nil) errorCode:k_CCErrorUserNotAvailble];
  1286. [self complete];
  1287. return;
  1288. }
  1289. if ([self.delegate respondsToSelector:@selector(getCapabilitiesOfServerSuccessFailure:capabilities:message:errorCode:)])
  1290. [self.delegate getCapabilitiesOfServerSuccessFailure:_metadataNet capabilities:capabilities message:nil errorCode:0];
  1291. [self complete];
  1292. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1293. NSInteger errorCode = response.statusCode;
  1294. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1295. errorCode = error.code;
  1296. // Error
  1297. if ([self.delegate respondsToSelector:@selector(getCapabilitiesOfServerSuccessFailure:capabilities:message:errorCode:)]) {
  1298. if (errorCode == 503)
  1299. [self.delegate getCapabilitiesOfServerSuccessFailure:_metadataNet capabilities:nil message:NSLocalizedStringFromTable(@"_server_error_retry_", @"Error", nil) errorCode:errorCode];
  1300. else
  1301. [self.delegate getCapabilitiesOfServerSuccessFailure:_metadataNet capabilities:nil message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1302. }
  1303. // Request trusted certificated
  1304. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1305. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1306. // Activity
  1307. [[NCManageDatabase sharedInstance] addActivityClient:_activeUrl fileID:@"" action:k_activityDebugActionCapabilities selector:@"" note:[error.userInfo valueForKey:@"NSLocalizedDescription"] type:k_activityTypeFailure verbose:k_activityVerboseHigh activeUrl:_activeUrl];
  1308. [self complete];
  1309. }];
  1310. }
  1311. #pragma --------------------------------------------------------------------------------------------
  1312. #pragma mark ===== End-to-End Encryption =====
  1313. #pragma --------------------------------------------------------------------------------------------
  1314. - (void)getEndToEndPublicKeys
  1315. {
  1316. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1317. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1318. [communication setUserAgent:[CCUtility getUserAgent]];
  1319. [communication getEndToEndPublicKeys:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *publicKey, NSString *redirectedServer) {
  1320. _metadataNet.key = publicKey;
  1321. if ([self.delegate respondsToSelector:@selector(getEndToEndPublicKeysSuccess:)])
  1322. [self.delegate getEndToEndPublicKeysSuccess:_metadataNet];
  1323. [self complete];
  1324. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1325. NSInteger errorCode = response.statusCode;
  1326. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1327. errorCode = error.code;
  1328. // Error
  1329. if ([self.delegate respondsToSelector:@selector(getEndToEndPublicKeysFailure:message:errorCode:)])
  1330. [self.delegate getEndToEndPublicKeysFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1331. // Request trusted certificated
  1332. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1333. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1334. [self complete];
  1335. }];
  1336. }
  1337. - (void)getEndToEndPrivateKeyCipher
  1338. {
  1339. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1340. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1341. [communication setUserAgent:[CCUtility getUserAgent]];
  1342. [communication getEndToEndPrivateKeyCipher:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *privateKeyChiper, NSString *redirectedServer) {
  1343. _metadataNet.key = privateKeyChiper;
  1344. if ([self.delegate respondsToSelector:@selector(getEndToEndPrivateKeyCipherSuccess:)])
  1345. [self.delegate getEndToEndPrivateKeyCipherSuccess:_metadataNet];
  1346. [self complete];
  1347. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1348. NSInteger errorCode = response.statusCode;
  1349. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1350. errorCode = error.code;
  1351. // Error
  1352. if ([self.delegate respondsToSelector:@selector(getEndToEndPrivateKeyCipherFailure:message:errorCode:)])
  1353. [self.delegate getEndToEndPrivateKeyCipherFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1354. // Request trusted certificated
  1355. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1356. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1357. [self complete];
  1358. }];
  1359. }
  1360. - (void)signEndToEndPublicKey
  1361. {
  1362. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1363. // URL Encode
  1364. NSString *publicKey = [CCUtility URLEncodeStringFromString:_metadataNet.key];
  1365. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1366. [communication setUserAgent:[CCUtility getUserAgent]];
  1367. [communication signEndToEndPublicKey:[_activeUrl stringByAppendingString:@"/"] publicKey:publicKey onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *publicKey, NSString *redirectedServer) {
  1368. _metadataNet.key = publicKey;
  1369. if ([self.delegate respondsToSelector:@selector(signEndToEndPublicKeySuccess:)])
  1370. [self.delegate signEndToEndPublicKeySuccess:_metadataNet];
  1371. [self complete];
  1372. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1373. NSInteger errorCode = response.statusCode;
  1374. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1375. errorCode = error.code;
  1376. // Error
  1377. if ([self.delegate respondsToSelector:@selector(signEndToEndPublicKeyFailure:message:errorCode:)])
  1378. [self.delegate signEndToEndPublicKeyFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1379. // Request trusted certificated
  1380. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1381. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1382. [self complete];
  1383. }];
  1384. }
  1385. - (void)storeEndToEndPrivateKeyCipher
  1386. {
  1387. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1388. // URL Encode
  1389. NSString *privateKeyChiper = [CCUtility URLEncodeStringFromString:_metadataNet.keyCipher];
  1390. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1391. [communication setUserAgent:[CCUtility getUserAgent]];
  1392. [communication storeEndToEndPrivateKeyCipher:[_activeUrl stringByAppendingString:@"/"] privateKeyChiper:privateKeyChiper onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *privateKey, NSString *redirectedServer) {
  1393. if ([self.delegate respondsToSelector:@selector(storeEndToEndPrivateKeyCipherSuccess:)])
  1394. [self.delegate storeEndToEndPrivateKeyCipherSuccess:_metadataNet];
  1395. [self complete];
  1396. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1397. NSInteger errorCode = response.statusCode;
  1398. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1399. errorCode = error.code;
  1400. // Error
  1401. if ([self.delegate respondsToSelector:@selector(storeEndToEndPrivateKeyCipherFailure:message:errorCode:)])
  1402. [self.delegate storeEndToEndPrivateKeyCipherFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1403. // Request trusted certificated
  1404. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1405. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1406. [self complete];
  1407. }];
  1408. }
  1409. - (void)deleteEndToEndPublicKey
  1410. {
  1411. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1412. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1413. [communication setUserAgent:[CCUtility getUserAgent]];
  1414. [communication deleteEndToEndPublicKey:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
  1415. if ([self.delegate respondsToSelector:@selector(deleteEndToEndPublicKeySuccess:)])
  1416. [self.delegate deleteEndToEndPublicKeySuccess:_metadataNet];
  1417. [self complete];
  1418. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1419. NSInteger errorCode = response.statusCode;
  1420. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1421. errorCode = error.code;
  1422. // Error
  1423. if ([self.delegate respondsToSelector:@selector(deleteEndToEndPublicKeyFailure:message:errorCode:)])
  1424. [self.delegate deleteEndToEndPublicKeyFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1425. // Request trusted certificated
  1426. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1427. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1428. [self complete];
  1429. }];
  1430. }
  1431. - (void)deleteEndToEndPrivateKey
  1432. {
  1433. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1434. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1435. [communication setUserAgent:[CCUtility getUserAgent]];
  1436. [communication deleteEndToEndPrivateKey:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
  1437. if ([self.delegate respondsToSelector:@selector(deleteEndToEndPrivateKeySuccess:)])
  1438. [self.delegate deleteEndToEndPrivateKeySuccess:_metadataNet];
  1439. [self complete];
  1440. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1441. NSInteger errorCode = response.statusCode;
  1442. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1443. errorCode = error.code;
  1444. // Error
  1445. if ([self.delegate respondsToSelector:@selector(deleteEndToEndPrivateKeyFailure:message:errorCode:)])
  1446. [self.delegate deleteEndToEndPrivateKeyFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1447. // Request trusted certificated
  1448. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1449. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1450. [self complete];
  1451. }];
  1452. }
  1453. - (void)getEndToEndServerPublicKey
  1454. {
  1455. OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
  1456. [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
  1457. [communication setUserAgent:[CCUtility getUserAgent]];
  1458. [communication getEndToEndServerPublicKey:[_activeUrl stringByAppendingString:@"/"] onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *publicKey, NSString *redirectedServer) {
  1459. _metadataNet.key = publicKey;
  1460. if ([self.delegate respondsToSelector:@selector(getEndToEndServerPublicKeySuccess:)])
  1461. [self.delegate getEndToEndServerPublicKeySuccess:_metadataNet];
  1462. [self complete];
  1463. } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer) {
  1464. NSInteger errorCode = response.statusCode;
  1465. if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
  1466. errorCode = error.code;
  1467. // Error
  1468. if ([self.delegate respondsToSelector:@selector(getEndToEndServerPublicKeyFailure:message:errorCode:)])
  1469. [self.delegate getEndToEndServerPublicKeyFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
  1470. // Request trusted certificated
  1471. if ([error code] == NSURLErrorServerCertificateUntrusted)
  1472. [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
  1473. [self complete];
  1474. }];
  1475. }
  1476. @end
  1477. #pragma --------------------------------------------------------------------------------------------
  1478. #pragma mark ===== OCURLSessionManager =====
  1479. #pragma --------------------------------------------------------------------------------------------
  1480. @implementation OCURLSessionManager
  1481. - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
  1482. {
  1483. // The pinnning check
  1484. if ([[CCCertificate sharedManager] checkTrustedChallenge:challenge]) {
  1485. completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
  1486. } else {
  1487. completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
  1488. }
  1489. }
  1490. @end