Marino Faggiana 7 年之前
父節點
當前提交
4717b9cd36

+ 1 - 1
iOSClient/Library/OCCommunicationLib/OCCommunication.h

@@ -911,7 +911,7 @@ typedef enum {
 
 - (void)signEndToEndPublicKey:(NSString*)serverPath publicKey:(NSString *)publicKey onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *publicKey,NSString *redirectedServer)) successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest;
 
-- (void)storeEndToEndPrivateKeyCipher:(NSString*)serverPath privateKeyChiper:(NSString *)privateKeyChiper onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *redirectedServer)) successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest;
+- (void)storeEndToEndPrivateKeyCipher:(NSString*)serverPath privateKeyChiper:(NSString *)privateKeyChiper onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *privateKey, NSString *redirectedServer)) successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest;
 
 
 - (void)deleteEndToEndPublicKey:(NSString*)serverPath onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *redirectedServer)) successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest;

+ 40 - 4
iOSClient/Library/OCCommunicationLib/OCCommunication.m

@@ -2084,7 +2084,7 @@
         //Parse
         NSError *error;
         NSDictionary *jsongParsed = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];
-        NSLog(@"[LOG] Get E2E PublicKey : %@",jsongParsed);
+        NSLog(@"[LOG] Get E2E Server PublicKey : %@",jsongParsed);
         
         if (jsongParsed.allKeys > 0) {
             
@@ -2141,7 +2141,7 @@
         //Parse
         NSError *error;
         NSDictionary *jsongParsed = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];
-        NSLog(@"[LOG] Get E2E PublicKey : %@",jsongParsed);
+        NSLog(@"[LOG] Sign E2E PublicKey : %@",jsongParsed);
         
         if (jsongParsed.allKeys > 0) {
             
@@ -2181,7 +2181,7 @@
     }];
 }
 
-- (void)storeEndToEndPrivateKeyCipher:(NSString*)serverPath privateKeyChiper:(NSString *)privateKeyChiper onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *redirectedServer))successRequest  failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest {
+- (void)storeEndToEndPrivateKeyCipher:(NSString*)serverPath privateKeyChiper:(NSString *)privateKeyChiper onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *privateKey, NSString *redirectedServer))successRequest  failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest {
     
     serverPath = [serverPath stringByAppendingString:k_url_client_side_encryption];
     serverPath = [serverPath stringByAppendingString:@"/private-key"];
@@ -2192,8 +2192,44 @@
     
     [request storeEndToEndPrivateKeyCipher:serverPath privateKeyChiper:privateKeyChiper onCommunication:sharedOCComunication success:^(NSHTTPURLResponse *response, id responseObject) {
         
+        NSData *responseData = (NSData*) responseObject;
+        NSString *privateKey;
+        
+        //Parse
+        NSError *error;
+        NSDictionary *jsongParsed = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];
+        NSLog(@"[LOG] Store E2E PrivateKey : %@",jsongParsed);
+        
+        if (jsongParsed.allKeys > 0) {
+            
+            NSDictionary *ocs = [jsongParsed valueForKey:@"ocs"];
+            NSDictionary *meta = [ocs valueForKey:@"meta"];
+            NSDictionary *data = [ocs valueForKey:@"data"];
+            
+            NSInteger statusCode = [[meta valueForKey:@"statuscode"] integerValue];
+            
+            if (statusCode == kOCUserProfileAPISuccessful) {
+                
+                if ([data valueForKey:@"private-key"] && ![[data valueForKey:@"private-key"] isKindOfClass:[NSNull class]]) {
+                    
+                    privateKey = [data valueForKey:@"private-key"];
+                }
+                
+            } else {
+                
+                NSString *message = (NSString*)[meta objectForKey:@"message"];
+                
+                if ([message isKindOfClass:[NSNull class]]) {
+                    message = @"";
+                }
+                
+                NSError *error = [UtilsFramework getErrorWithCode:statusCode andCustomMessageFromTheServer:message];
+                failureRequest(response, error, request.redirectedServer);
+            }
+        }
+        
         //Return success
-        successRequest(response, request.redirectedServer);
+        successRequest(response, privateKey, request.redirectedServer);
         
     } failure:^(NSHTTPURLResponse *response, NSData *responseData, NSError *error) {
         

+ 4 - 3
iOSClient/Networking/OCNetworking.m

@@ -1788,10 +1788,11 @@
     [communication setCredentialsWithUser:_activeUser andUserID:_activeUserID andPassword:_activePassword];
     [communication setUserAgent:[CCUtility getUserAgent]];
     
-    [communication storeEndToEndPrivateKeyCipher:[_activeUrl stringByAppendingString:@"/"] privateKeyChiper:privateKeyChiper onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
-        
-        // 200 ok: body contain the public key
+    [communication storeEndToEndPrivateKeyCipher:[_activeUrl stringByAppendingString:@"/"] privateKeyChiper:privateKeyChiper onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *privateKey, NSString *redirectedServer) {
         
+        // 200 ok: body contain the private key
+        _metadataNet.key = privateKey;
+
         if ([self.delegate respondsToSelector:@selector(storeEndToEndPrivateKeyCipherSuccess:)])
             [self.delegate storeEndToEndPrivateKeyCipherSuccess:_metadataNet];
         

+ 0 - 3
iOSClient/Security/NCEndToEndEncryption.h

@@ -29,9 +29,6 @@
 
 + (instancetype)sharedManager;
 
-- (NSString *)getCSR;
-- (NSString *)getPrivateKey;
-
 - (void)encryptMetadata:(tableMetadata *)metadata activeUrl:(NSString *)activeUrl;
 - (void)decryptMetadata:(tableMetadata *)metadata activeUrl:(NSString *)activeUrl;
 

+ 0 - 62
iOSClient/Security/NCEndToEndEncryption.m

@@ -314,63 +314,12 @@ cleanup:
     return YES;
 }
 
-- (NSString *)getCSRFromDisk:(NSString *)directoryUser delete:(BOOL)delete
-{
-    NSError *error;
-    
-    NSString *csr = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNameCSR] encoding:NSUTF8StringEncoding error:&error];
-    
-    if (delete)
-    [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNameCSR] error:nil];
-    
-    if (error)
-    return nil;
-    else
-    return csr;
-}
-
-- (NSString *)getCSR
-{
-    return [[NSString alloc] initWithData:_csrData encoding:NSUTF8StringEncoding];
-}
-
-- (NSString *)getPrivateKeyFromDisk:(NSString *)directoryUser delete:(BOOL)delete
-{
-    NSError *error;
-    
-    NSString *privateKey = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNamePrivateKey] encoding:NSUTF8StringEncoding error:&error];
-    
-    if (delete)
-    [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNamePrivateKey] error:nil];
-    
-    if (error)
-    return nil;
-    else
-    return privateKey;
-}
-
-- (NSString *)getPrivateKey
-{
-    return [[NSString alloc] initWithData:_privateKeyData encoding:NSUTF8StringEncoding];
-}
-
 #
 #pragma mark - Register client for Server with exists Key pair
 #
 
 - (NSString *)createCSR:(NSString *)userID directoryUser:(NSString *)directoryUser
 {
-    /*
-    // Create Certificate, if do not exists [Disk Version]
-    if (![[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNameCSR]]) {
-        
-        if (![self generateCertificateX509WithUserID:userID directoryUser:directoryUser])
-            return nil;
-    }
-    
-    NSString *csr = [self getCSRFromDisk:directoryUser delete:NO];
-    */
-    
     // Create Certificate, if do not exists
     if (!_csrData) {
         if (![self generateCertificateX509WithUserID:userID directoryUser:directoryUser])
@@ -386,17 +335,6 @@ cleanup:
 {
     NSMutableData *privateKeyCipherData = [NSMutableData new];
 
-    /*
-    // Create Certificate, if do not exists [Disk Version]
-    if (![[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNamePrivateKey]]) {
-        
-        if (![self generateCertificateX509WithUserID:userID directoryUser:directoryUser])
-            return nil;
-    }
-     
-    NSData *privateKeyData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNamePrivateKey]];
-    */
-    
     if (!_privateKeyData) {
         if (![self generateCertificateX509WithUserID:userID directoryUser:directoryUser])
             return nil;

+ 1 - 1
iOSClient/Security/NCEntoToEndInterface.swift

@@ -267,7 +267,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
     func storeEnd(toEndPrivateKeyCipherSuccess metadataNet: CCMetadataNet!) {
         
         // Insert PrivateKey (end delete) and passphrase to Cheychain
-        guard let privateKey = NCEndToEndEncryption.sharedManager().getPrivateKey() else {
+        guard let privateKey = metadataNet.key else {
             
             appDelegate.messageNotification("E2E privateKey", description: "Error : privateKey not present", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)