Fix refresh token coding and persistence.

This commit is contained in:
David Langley 2021-12-13 16:29:02 +00:00
parent 2fbd129456
commit b09cf74224
2 changed files with 23 additions and 25 deletions

View file

@ -187,6 +187,8 @@ static NSArray<NSNumber*> *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<NSNumber*> *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<NSNumber*> *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

View file

@ -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