Browse Source

add check certificate untrusted

marinofaggiana 5 years ago
parent
commit
807e79a48e

+ 2 - 2
iOSClient/AppDelegate.m

@@ -327,8 +327,8 @@ PKPushRegistry *pushRegistry;
     }
     
     // check certificate untrusted (-1202)
-    if ([CCUtility getCertificateError]) {
-        [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:NSLocalizedString(@"_ssl_certificate_untrusted_", nil) viewController:self.window.rootViewController delegate:self];
+    if ([CCUtility getCertificateError:self.activeAccount]) {
+        [[CCCertificate sharedManager] presentViewControllerCertificateWithAccount:self.activeAccount delegate:self];
     }
 }
 

+ 2 - 2
iOSClient/Login/CCLogin.m

@@ -138,7 +138,7 @@
 {
     [super viewDidAppear:animated];
     
-    // Stop timer
+    // Stop timer error network
     [appDelegate.timerErrorNetworking invalidate];
 }
 
@@ -213,7 +213,7 @@
             
             if (errorCode == NSURLErrorServerCertificateUntrusted) {
                 
-                [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:message viewController:self delegate:self];
+                [[CCCertificate sharedManager] presentViewControllerCertificateWithAccount:nil delegate:self];
                 
             } else {
                 

+ 8 - 2
iOSClient/Networking/CCNetworking.m

@@ -392,6 +392,9 @@
     if ([CCUtility getPassword:metadata.account].length == 0) {
         [self.delegate downloadFileSuccessFailure:metadata.fileName fileID:metadata.fileID serverUrl:metadata.serverUrl selector:metadata.sessionSelector errorMessage:NSLocalizedString(@"_bad_username_password_", nil) errorCode:kOCErrorServerUnauthorized];
         return;
+    } else if ([CCUtility getCertificateError:metadata.account]) {
+        [self.delegate downloadFileSuccessFailure:metadata.fileName fileID:metadata.fileID serverUrl:metadata.serverUrl selector:metadata.sessionSelector errorMessage:NSLocalizedString(@"_ssl_certificate_untrusted_", nil) errorCode:NSURLErrorServerCertificateUntrusted];
+        return;
     }
     
     // File exists ?
@@ -548,7 +551,7 @@
             if (metadata && errorCode == kOCErrorServerUnauthorized)
                 [CCUtility setPassword:metadata.account password:nil];
             else if (metadata && errorCode == NSURLErrorServerCertificateUntrusted)
-                [CCUtility setCertificateError:YES];
+                [CCUtility setCertificateError:metadata.account error:YES];
 
             [[NCManageDatabase sharedInstance] setMetadataSession:nil sessionError:[CCError manageErrorKCF:errorCode withNumberError:NO] sessionSelector:nil sessionTaskIdentifier:k_taskIdentifierDone status:k_metadataStatusDownloadError predicate:[NSPredicate predicateWithFormat:@"fileID == %@", fileID]];
         }
@@ -618,6 +621,9 @@
     if ([CCUtility getPassword:metadata.account].length == 0) {
         [self.delegate uploadFileSuccessFailure:metadata.fileName fileID:metadata.fileID assetLocalIdentifier:metadata.assetLocalIdentifier serverUrl:metadata.serverUrl selector:metadata.sessionSelector errorMessage:NSLocalizedString(@"_bad_username_password_", nil) errorCode:kOCErrorServerUnauthorized];
         return;
+    } else if ([CCUtility getCertificateError:metadata.account]) {
+        [self.delegate uploadFileSuccessFailure:metadata.fileName fileID:metadata.fileID assetLocalIdentifier:metadata.assetLocalIdentifier serverUrl:metadata.serverUrl selector:metadata.sessionSelector errorMessage:NSLocalizedString(@"_ssl_certificate_untrusted_", nil) errorCode:NSURLErrorServerCertificateUntrusted];
+        return;
     }
     
     tableAccount *tableAccount = [[NCManageDatabase sharedInstance] getAccountWithPredicate:[NSPredicate predicateWithFormat:@"account == %@", metadata.account]];
@@ -1103,7 +1109,7 @@
             if (metadata && errorCode == kOCErrorServerUnauthorized)
                 [CCUtility setPassword:metadata.account password:nil];
             else if (metadata && errorCode == NSURLErrorServerCertificateUntrusted)
-                [CCUtility setCertificateError:YES];
+                [CCUtility setCertificateError:metadata.account error:YES];
             
             [[NCManageDatabase sharedInstance] setMetadataSession:nil sessionError:[CCError manageErrorKCF:errorCode withNumberError:NO] sessionSelector:nil sessionTaskIdentifier:k_taskIdentifierDone status:k_metadataStatusUploadError predicate:[NSPredicate predicateWithFormat:@"fileID == %@", tempFileID]];
             

+ 116 - 40
iOSClient/Networking/OCNetworking.m

@@ -311,6 +311,8 @@
         completion(account, 0, nil, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, 0, nil, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, 0, nil, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     [communication setCredentialsWithUser:tableAccount.user andUserID:tableAccount.userID andPassword:[CCUtility getPassword:account]];
@@ -362,7 +364,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -384,6 +386,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -409,7 +413,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -431,6 +435,8 @@
         completion(account, nil, nil, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, nil, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, nil, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -463,7 +469,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -492,6 +498,8 @@
         completion(account, nil, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *url = tableAccount.url;
@@ -586,7 +594,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -606,6 +614,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *autoUploadFileName = [[NCManageDatabase sharedInstance] getAccountAutoUploadFileName];
@@ -660,7 +670,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -680,6 +690,8 @@
         completion(account, nil, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *path = [NSString stringWithFormat:@"%@/%@", serverUrl, fileName];
@@ -717,7 +729,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         completion(account, nil, nil, message, errorCode);
@@ -746,6 +758,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    }  else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -768,7 +782,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -788,6 +802,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    }  else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -810,7 +826,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -847,6 +863,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    }  else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *path = [tableAccount.url stringByAppendingString:k_dav];
@@ -925,7 +943,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -992,6 +1010,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *file = [NSString stringWithFormat:@"%@/%@.ico", [CCUtility getDirectoryProviderStorageFileID:metadata.fileID], metadata.fileNameView];
@@ -1018,7 +1038,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1038,6 +1058,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1062,7 +1084,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1082,6 +1104,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *file = [NSString stringWithFormat:@"%@/%@.ico", [CCUtility getDirectoryProviderStorageFileID:fileID], fileName];
@@ -1114,7 +1138,7 @@
             if (errorCode == kOCErrorServerUnauthorized) {
                 [CCUtility setPassword:account password:nil];
             } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-                [CCUtility setCertificateError:YES];
+                [CCUtility setCertificateError:account error:YES];
             }
             
             // Error
@@ -1139,6 +1163,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *autoUploadFileName = [[NCManageDatabase sharedInstance] getAccountAutoUploadFileName];
@@ -1211,7 +1237,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1231,6 +1257,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *server = [tableAccount.url stringByAppendingString:k_dav];
@@ -1255,7 +1283,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1279,6 +1307,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1301,7 +1331,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1322,6 +1352,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1344,7 +1376,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1367,6 +1399,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1389,7 +1423,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1410,6 +1444,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1432,7 +1468,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1453,6 +1489,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1475,7 +1513,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1496,6 +1534,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1518,7 +1558,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1539,6 +1579,8 @@
         completion(account, 0, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, 0, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, 0, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1561,7 +1603,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1588,6 +1630,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     tableCapabilities *capabilities = [[NCManageDatabase sharedInstance] getCapabilitesWithAccount:account];
@@ -1615,7 +1659,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1635,6 +1679,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1657,7 +1703,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1678,6 +1724,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1700,7 +1748,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1721,6 +1769,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1743,7 +1793,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1764,6 +1814,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1786,7 +1838,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1807,6 +1859,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -1829,7 +1883,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1854,6 +1908,8 @@
         completion(account, nil, nil, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, nil, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, nil, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     devicePublicKey = [CCUtility URLEncodeStringFromString:devicePublicKey];
@@ -1891,7 +1947,7 @@
             if (errorCode == kOCErrorServerUnauthorized) {
                 [CCUtility setPassword:account password:nil];
             } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-                [CCUtility setCertificateError:YES];
+                [CCUtility setCertificateError:account error:YES];
             }
             
             // Error
@@ -1915,7 +1971,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -1935,6 +1991,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *proxyServer = [NCBrandOptions sharedInstance].pushNotificationServerProxy;
@@ -1965,7 +2023,7 @@
             if (errorCode == kOCErrorServerUnauthorized) {
                 [CCUtility setPassword:account password:nil];
             } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-                [CCUtility setCertificateError:YES];
+                [CCUtility setCertificateError:account error:YES];
             }
             
             // Error
@@ -1989,7 +2047,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -2054,6 +2112,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *fileIDServer = [[NCUtility sharedInstance] convertFileIDClientToFileIDServer:fileID];
@@ -2078,7 +2138,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -2098,6 +2158,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -2120,7 +2182,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -2140,6 +2202,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -2162,7 +2226,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -2182,6 +2246,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *fileNamePath = [CCUtility returnFileNamePathFromFileName:fileName serverUrl:serverUrl activeUrl:tableAccount.url];
@@ -2206,7 +2272,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -2230,6 +2296,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     OCCommunication *communication = [OCNetworking sharedManager].sharedOCCommunication;
@@ -2294,7 +2362,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -2314,6 +2382,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *path = [NSString stringWithFormat:@"%@%@/trashbin/%@/trash", tableAccount.url, k_dav, tableAccount.userID];
@@ -2338,7 +2408,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -2362,6 +2432,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *serverPath = [NSString stringWithFormat:@"%@/ocs/v2.php/apps/handwerkcloud/api/v1/settings/%@", serverUrl, tableAccount.userID];
@@ -2387,7 +2459,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -2407,6 +2479,8 @@
         completion(account, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     // Create JSON
@@ -2459,7 +2533,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error
@@ -2479,6 +2553,8 @@
         completion(account, nil, NSLocalizedString(@"_error_user_not_available_", nil), k_CCErrorUserNotAvailble);
     } else if ([CCUtility getPassword:account].length == 0) {
         completion(account, nil, NSLocalizedString(@"_bad_username_password_", nil), kOCErrorServerUnauthorized);
+    } else if ([CCUtility getCertificateError:account]) {
+        completion(account, nil, NSLocalizedString(@"_ssl_certificate_untrusted_", nil), NSURLErrorServerCertificateUntrusted);
     }
     
     NSString *serverPath = [NSString stringWithFormat:@"%@/ocs/v2.php/apps/handwerkcloud/api/v1/features/%@", serverUrl, tableAccount.userID];
@@ -2504,7 +2580,7 @@
         if (errorCode == kOCErrorServerUnauthorized) {
             [CCUtility setPassword:account password:nil];
         } else if (errorCode == NSURLErrorServerCertificateUntrusted) {
-            [CCUtility setCertificateError:YES];
+            [CCUtility setCertificateError:account error:YES];
         }
         
         // Error

+ 1 - 1
iOSClient/Security/CCCertificate.h

@@ -41,7 +41,7 @@
 - (BOOL)acceptCertificate;
 - (void)saveCertificate:(SecTrustRef) trust withName:(NSString *) certName;
 
-- (void)presentViewControllerCertificateWithTitle:(NSString *)title viewController:(UIViewController *)viewController delegate:(id)delegate;
+- (void)presentViewControllerCertificateWithAccount:(NSString *)account delegate:(id)delegate;
 
 @end
 

+ 14 - 9
iOSClient/Security/CCCertificate.m

@@ -24,6 +24,7 @@
 #import "CCUtility.h"
 #import "CCCertificate.h"
 #import "NCBridgeSwift.h"
+#import "AppDelegate.h"
 
 #import <openssl/x509.h>
 #import <openssl/bio.h>
@@ -139,33 +140,37 @@ static SecCertificateRef SecTrustGetLeafCertificate(SecTrustRef trust)
     X509_free(x509cert);
 }
 
-- (void)presentViewControllerCertificateWithTitle:(NSString *)title viewController:(UIViewController *)viewController delegate:(id)delegate
-{    
-    if (![viewController isKindOfClass:[UIViewController class]])
-        return;
-    
+- (void)presentViewControllerCertificateWithAccount:(NSString *)account delegate:(id)delegate
+{
+    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
     _delegate = delegate;
     
+    // Stop timer error network
+    [appDelegate.timerErrorNetworking invalidate];
+    
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
     
-        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:NSLocalizedString(@"_connect_server_anyway_", nil)  preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"_ssl_certificate_untrusted_", nil) message:NSLocalizedString(@"_connect_server_anyway_", nil)  preferredStyle:UIAlertControllerStyleAlert];
     
         [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_yes_", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
                                                            
             [[CCCertificate sharedManager] acceptCertificate];
-            [CCUtility setCertificateError:NO];
+            if (account != nil) [CCUtility setCertificateError:account error:NO];
+            [appDelegate startTimerErrorNetworking];
             
             if([self.delegate respondsToSelector:@selector(trustedCerticateAccepted)])
                 [self.delegate trustedCerticateAccepted];
         }]];
     
         [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_no_", nil) style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
-                                                           
+            
+            [appDelegate startTimerErrorNetworking];
+
             if([self.delegate respondsToSelector:@selector(trustedCerticateDenied)])
                 [self.delegate trustedCerticateDenied];
         }]];
         
-        [viewController presentViewController:alertController animated:YES completion:nil];
+        [appDelegate.window.rootViewController presentViewController:alertController animated:YES completion:nil];
     });
 }
 

+ 2 - 2
iOSClient/Utility/CCUtility.h

@@ -161,8 +161,8 @@
 
 + (NSData *)getDatabaseEncryptionKey;
 
-+ (BOOL)getCertificateError;
-+ (void)setCertificateError:(BOOL)error;
++ (BOOL)getCertificateError:(NSString *)account;
++ (void)setCertificateError:(NSString *)account error:(BOOL)error;
 
 // ===== Varius =====
 

+ 8 - 5
iOSClient/Utility/CCUtility.m

@@ -619,23 +619,26 @@
     [UICKeyChainStore setData:data forKey:@"databaseEncryptionKey" service:k_serviceShareKeyChain];
 }
 
-+ (BOOL)getCertificateError
++ (BOOL)getCertificateError:(NSString *)account
 {
-    NSString *error = [UICKeyChainStore stringForKey:@"certificateError" service:k_serviceShareKeyChain];
+    NSString *key = [@"certificateError" stringByAppendingString:account];
+    NSString *error = [UICKeyChainStore stringForKey:key service:k_serviceShareKeyChain];
     
     if (error == nil) {
         
-        [self setCertificateError:NO];
+        [self setCertificateError:account error:NO];
         return  NO;
     }
     
     return [error boolValue];
 }
 
-+ (void)setCertificateError:(BOOL)error
++ (void)setCertificateError:(NSString *)account error:(BOOL)error
 {
+    NSString *key = [@"certificateError" stringByAppendingString:account];
     NSString *sError = (error) ? @"true" : @"false";
-    [UICKeyChainStore setString:sError forKey:@"certificateError" service:k_serviceShareKeyChain];
+    
+    [UICKeyChainStore setString:sError forKey:key service:k_serviceShareKeyChain];
 }
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark ===== Various =====