diff --git a/Riot/Modules/MatrixKit/Models/Account/MXKAccount.m b/Riot/Modules/MatrixKit/Models/Account/MXKAccount.m index b277fc443..359cf9ff4 100644 --- a/Riot/Modules/MatrixKit/Models/Account/MXKAccount.m +++ b/Riot/Modules/MatrixKit/Models/Account/MXKAccount.m @@ -187,6 +187,8 @@ static NSArray *initialSyncSilentErrorsHTTPStatusCodes; userId:userId accessToken:accessToken]; + mxCredentials.accessTokenExpiresAt = [coder decodeInt64ForKey:@"accessTokenExpiresAt"]; + mxCredentials.refreshToken = [coder decodeObjectForKey:@"refreshToken"]; mxCredentials.identityServer = _identityServerURL; mxCredentials.identityServerAccessToken = identityServerAccessToken; mxCredentials.deviceId = [coder decodeObjectForKey:@"deviceId"]; @@ -242,6 +244,12 @@ static NSArray *initialSyncSilentErrorsHTTPStatusCodes; [coder encodeObject:mxCredentials.homeServer forKey:@"homeserverurl"]; [coder encodeObject:mxCredentials.userId forKey:@"userid"]; [coder encodeObject:mxCredentials.accessToken forKey:@"accesstoken"]; + if (mxCredentials.accessTokenExpiresAt) { + [coder encodeInt64:mxCredentials.accessTokenExpiresAt forKey:@"accessTokenExpiresAt"]; + } + if (mxCredentials.refreshToken) { + [coder encodeObject:mxCredentials.refreshToken forKey:@"refreshToken"]; + } [coder encodeObject:mxCredentials.identityServerAccessToken forKey:@"identityserveraccesstoken"]; if (mxCredentials.deviceId) @@ -2225,29 +2233,4 @@ static NSArray *initialSyncSilentErrorsHTTPStatusCodes; } } -#pragma mark - Homeserver Access/Refresh Token updates - -- (void)registerRestClientDidRefreshTokensNotification -{ - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRestClientDidRefreshTokensNotification:) name:MXRestClientDidRefreshTokensNotification object:nil]; -} - -- (void)handleRestClientDidRefreshTokensNotification:(NSNotification*)notification -{ - NSDictionary *userInfo = notification.userInfo; - - NSString *userId = userInfo[MXIdentityServiceNotificationUserIdKey]; - NSString *identityServer = userInfo[MXIdentityServiceNotificationIdentityServerKey]; - NSString *accessToken = userInfo[MXIdentityServiceNotificationAccessTokenKey]; - - if (userId && identityServer && accessToken && [mxCredentials.identityServer isEqualToString:identityServer]) - { - mxCredentials.identityServerAccessToken = accessToken; - - // Archive updated field - [[MXKAccountManager sharedManager] saveAccounts]; - } -} - - @end diff --git a/Riot/Modules/MatrixKit/Models/Account/MXKAccountManager.m b/Riot/Modules/MatrixKit/Models/Account/MXKAccountManager.m index 0763dab53..080a7ace4 100644 --- a/Riot/Modules/MatrixKit/Models/Account/MXKAccountManager.m +++ b/Riot/Modules/MatrixKit/Models/Account/MXKAccountManager.m @@ -66,6 +66,8 @@ NSString *const MXKAccountManagerDataType = @"org.matrix.kit.MXKAccountManagerDa // Load existing accounts from local storage [self loadAccounts]; + + [self registerRestClientDidRefreshTokensNotification]; } return self; } @@ -723,4 +725,17 @@ NSString *const MXKAccountManagerDataType = @"org.matrix.kit.MXKAccountManagerDa } } +#pragma mark - Homeserver Access/Refresh Token updates + +- (void)registerRestClientDidRefreshTokensNotification +{ + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRestClientDidRefreshTokensNotification:) name:MXRestClientDidRefreshTokensNotification object:nil]; +} + +- (void)handleRestClientDidRefreshTokensNotification:(NSNotification*)notification +{ + [self saveAccounts]; +} + + @end