marinofaggiana 6 years ago
parent
commit
f0363536b2

+ 2 - 6
iOSClient/AppDelegate.h

@@ -127,10 +127,6 @@
 
 @property (nonatomic, strong) NSMutableArray *sessionPendingStatusInUpload;
 
-@property (nonatomic, strong) NSString *pnDeviceIdentifier;
-@property (nonatomic, strong) NSString *pnDeviceIdentifierSignature;
-@property (nonatomic, strong) NSString *pnPublicKey;
-
 // Maintenance Mode
 @property BOOL maintenanceMode;
 
@@ -160,8 +156,8 @@
 - (NSString *)getTabBarControllerActiveServerUrl;
 
 // Push Notification
-- (void)subscribingNextcloudServerPushNotification:(NSString *)account url:(NSString *)url;
-- (void)unsubscribingNextcloudServerPushNotification:(NSString *)account;
+- (void)subscribingNextcloudServerPushNotification:(NSString *)account url:(NSString *)url token:(NSString *)token;
+- (void)unsubscribingNextcloudServerPushNotification:(NSString *)account url:(NSString *)url;
 
 // Theming Color
 - (void)settingThemingColorBrand;

+ 16 - 24
iOSClient/AppDelegate.m

@@ -396,7 +396,7 @@
 #pragma mark ===== Push Notification =====
 #pragma --------------------------------------------------------------------------------------------
 
-- (void)subscribingNextcloudServerPushNotification:(NSString *)account url:(NSString *)url
+- (void)subscribingNextcloudServerPushNotification:(NSString *)account url:(NSString *)url token:(NSString *)token
 {
     // test
     if (self.activeAccount.length == 0 || self.maintenanceMode)
@@ -404,22 +404,17 @@
     
     [[NCPushNotificationEncryption sharedInstance] generatePushNotificationsKeyPair:account];
 
-    NSString *pushToken = [CCUtility getPushNotificationToken];
-    NSString *pushTokenHash = [[NCEndToEndEncryption sharedManager] createSHA512:pushToken];
-    NSData *ncPNPublicKey = [CCUtility getPushNotificationPublicKey:account];
-    NSString *devicePublicKey = [[NSString alloc] initWithData:ncPNPublicKey encoding:NSUTF8StringEncoding];
+    NSString *pushTokenHash = [[NCEndToEndEncryption sharedManager] createSHA512:token];
+    NSData *pushPublicKey = [CCUtility getPushNotificationPublicKey:account];
+    NSString *pushDevicePublicKey = [[NSString alloc] initWithData:pushPublicKey encoding:NSUTF8StringEncoding];
     
-    self.pnDeviceIdentifier = nil;
-    self.pnDeviceIdentifierSignature = nil;
-    self.pnPublicKey = nil;
-
-    [[OCNetworking sharedManager] subscribingPushNotificationWithAccount:account url:url pushToken:pushToken Hash:pushTokenHash devicePublicKey:devicePublicKey completion:^(NSString *accountCompletion, NSString *deviceIdentifier, NSString *deviceIdentifierSignature, NSString *publicKey, NSString *message, NSInteger errorCode) {
+    [[OCNetworking sharedManager] subscribingPushNotificationWithAccount:account url:url pushToken:token Hash:pushTokenHash devicePublicKey:pushDevicePublicKey completion:^(NSString *accountCompletion, NSString *deviceIdentifier, NSString *deviceIdentifierSignature, NSString *publicKey, NSString *message, NSInteger errorCode) {
         
         if (errorCode == 0 && [accountCompletion isEqualToString:account]) {
             NSLog(@"[LOG] Subscribed to Push Notification server & proxy successfully.");
-            self.pnDeviceIdentifier = deviceIdentifier;
-            self.pnDeviceIdentifierSignature = deviceIdentifierSignature;
-            self.pnPublicKey = publicKey;
+            [CCUtility setPushNotificationToken:account token:token];
+            [CCUtility setPushNotificationDeviceIdentifier:account deviceIdentifier:deviceIdentifier];
+            [CCUtility setPushNotificationDeviceIdentifierSignature:account deviceIdentifierSignature:deviceIdentifierSignature];
         } else if (errorCode != 0) {
             NSLog(@"[LOG] Subscribed to Push Notification server & proxy error.");
         } else {
@@ -428,13 +423,16 @@
     }];
 }
 
-- (void)unsubscribingNextcloudServerPushNotification:(NSString *)account
+- (void)unsubscribingNextcloudServerPushNotification:(NSString *)account url:(NSString *)url
 {
     // test
     if (self.activeAccount.length == 0 || self.maintenanceMode)
         return;
     
-    [[OCNetworking sharedManager] unsubscribingPushNotificationWithAccount:account url:self.activeUrl deviceIdentifier:self.pnDeviceIdentifier deviceIdentifierSignature:self.pnDeviceIdentifierSignature publicKey:self.pnPublicKey completion:^(NSString *account, NSString *message, NSInteger errorCode) {
+    NSString *deviceIdentifier = [CCUtility getPushNotificationDeviceIdentifier:account];
+    NSString *deviceIdentifierSignature = [CCUtility getPushNotificationDeviceIdentifierSignature:account];
+    
+    [[OCNetworking sharedManager] unsubscribingPushNotificationWithAccount:account url:url deviceIdentifier:deviceIdentifier deviceIdentifierSignature:deviceIdentifierSignature publicKey:@"" completion:^(NSString *account, NSString *message, NSInteger errorCode) {
        
         if (errorCode == 0) {
             NSLog(@"[LOG] Unsubscribed to Push Notification server & proxy successfully.");
@@ -533,17 +531,11 @@
     
     NSLog(@"FCM registration token: %@", fcmToken);
     
-    NSString *token = [CCUtility getPushNotificationToken];
+    NSString *token = [CCUtility getPushNotificationToken:self.activeAccount];
     if (![token isEqualToString:fcmToken]) {
-        
-        // da fare per tutti gli utenti
-        
-        
-        
-        [CCUtility setPushNotificationToken:fcmToken];
+        [self unsubscribingNextcloudServerPushNotification:self.activeAccount url:self.activeUrl];
+        [self subscribingNextcloudServerPushNotification:self.activeAccount url:self.activeUrl token:fcmToken];
     }
-
-    //[self subscribingNextcloudServerPushNotification];
 }
 
 #pragma --------------------------------------------------------------------------------------------

+ 1 - 3
iOSClient/Settings/CCManageAccount.m

@@ -233,9 +233,7 @@
 #pragma --------------------------------------------------------------------------------------------
 
 - (void)deleteAccount:(NSString *)account
-{
-    [appDelegate unsubscribingNextcloudServerPushNotification:account];
-    
+{    
     [[NCManageDatabase sharedInstance] clearTable:[tableAccount class] account:account];
     [[NCManageDatabase sharedInstance] clearTable:[tableActivity class] account:account];
     [[NCManageDatabase sharedInstance] clearTable:[tableActivitySubjectRich class] account:account];

+ 6 - 2
iOSClient/Utility/CCUtility.h

@@ -138,8 +138,12 @@
 + (NSData *)getPushNotificationPublicKey:(NSString *)account;
 + (void)setPushNotificationPrivateKey:(NSString *)account data:(NSData *)data;
 + (NSData *)getPushNotificationPrivateKey:(NSString *)account;
-+ (void)setPushNotificationToken:(NSString *)token;
-+ (NSString *)getPushNotificationToken;
++ (void)setPushNotificationToken:(NSString *)account token:(NSString *)token;
++ (NSString *)getPushNotificationToken:(NSString *)account;
++ (void)setPushNotificationDeviceIdentifier:(NSString *)account deviceIdentifier:(NSString *)deviceIdentifier;
++ (NSString *)getPushNotificationDeviceIdentifier:(NSString *)account;
++ (void)setPushNotificationDeviceIdentifierSignature:(NSString *)account deviceIdentifierSignature:(NSString *)deviceIdentifierSignature;
++ (NSString *)getPushNotificationDeviceIdentifierSignature:(NSString *)account;
 
 + (NSInteger)getMediaWidthImage;
 + (void)setMediaWidthImage:(NSInteger)width;

+ 34 - 8
iOSClient/Utility/CCUtility.m

@@ -481,36 +481,62 @@
 
 + (void)setPushNotificationPublicKey:(NSString *)account data:(NSData *)data
 {
-    NSString *key = [@"ncPNPublicKey" stringByAppendingString:account];
+    NSString *key = [@"PNPublicKey" stringByAppendingString:account];
     [UICKeyChainStore setData:data forKey:key service:k_serviceShareKeyChain];
 }
 
 + (NSData *)getPushNotificationPublicKey:(NSString *)account
 {
-    NSString *key = [@"ncPNPublicKey" stringByAppendingString:account];
+    NSString *key = [@"PNPublicKey" stringByAppendingString:account];
     return [UICKeyChainStore dataForKey:key service:k_serviceShareKeyChain];
 }
 
 + (void)setPushNotificationPrivateKey:(NSString *)account data:(NSData *)data
 {
-    NSString *key = [@"ncPNPrivateKey" stringByAppendingString:account];
+    NSString *key = [@"PNPrivateKey" stringByAppendingString:account];
     [UICKeyChainStore setData:data forKey:key service:k_serviceShareKeyChain];
 }
 
 + (NSData *)getPushNotificationPrivateKey:(NSString *)account
 {
-    NSString *key = [@"ncPNPrivateKey" stringByAppendingString:account];
+    NSString *key = [@"PNPrivateKey" stringByAppendingString:account];
     return [UICKeyChainStore dataForKey:key service:k_serviceShareKeyChain];
 }
 
-+ (void)setPushNotificationToken:(NSString *)token
++ (void)setPushNotificationToken:(NSString *)account token:(NSString *)token
 {
-    [UICKeyChainStore setString:token forKey:@"ncPushToken" service:k_serviceShareKeyChain];
+    NSString *key = [@"PNToken" stringByAppendingString:account];
+    [UICKeyChainStore setString:token forKey:key service:k_serviceShareKeyChain];
 }
 
-+ (NSString *)getPushNotificationToken
++ (NSString *)getPushNotificationToken:(NSString *)account
 {
-    return [UICKeyChainStore stringForKey:@"ncPushToken" service:k_serviceShareKeyChain];
+    NSString *key = [@"PNToken" stringByAppendingString:account];
+    return [UICKeyChainStore stringForKey:key service:k_serviceShareKeyChain];
+}
+
++ (void)setPushNotificationDeviceIdentifier:(NSString *)account deviceIdentifier:(NSString *)deviceIdentifier
+{
+    NSString *key = [@"PNDeviceIdentifier" stringByAppendingString:account];
+    [UICKeyChainStore setString:deviceIdentifier forKey:key service:k_serviceShareKeyChain];
+}
+
++ (NSString *)getPushNotificationDeviceIdentifier:(NSString *)account
+{
+    NSString *key = [@"PNDeviceIdentifier" stringByAppendingString:account];
+    return [UICKeyChainStore stringForKey:key service:k_serviceShareKeyChain];
+}
+
++ (void)setPushNotificationDeviceIdentifierSignature:(NSString *)account deviceIdentifierSignature:(NSString *)deviceIdentifierSignature
+{
+    NSString *key = [@"PNDeviceIdentifierSignature" stringByAppendingString:account];
+    [UICKeyChainStore setString:deviceIdentifierSignature forKey:key service:k_serviceShareKeyChain];
+}
+
++ (NSString *)getPushNotificationDeviceIdentifierSignature:(NSString *)account
+{
+    NSString *key = [@"PNDeviceIdentifierSignature" stringByAppendingString:account];
+    return [UICKeyChainStore stringForKey:key service:k_serviceShareKeyChain];
 }
 
 + (NSInteger)getMediaWidthImage