TF-2384 Merge Token with TokenOIDC to avoid confusion

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 9951d47a11bef36362cd2a5ad679a8a1fcaf022c)
This commit is contained in:
dab246
2023-12-24 18:57:34 +07:00
committed by Dat H. Pham
parent 293c58b239
commit 499141cdaa
12 changed files with 59 additions and 65 deletions
@@ -8,7 +8,6 @@ import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
import 'package:tmail_ui_user/features/home/domain/state/get_session_state.dart';
@@ -130,10 +129,10 @@ abstract class ReloadableController extends BaseController {
dynamicUrlInterceptors.setJmapUrl(tokenOidcSuccess.baseUrl.toString());
dynamicUrlInterceptors.changeBaseUrl(tokenOidcSuccess.baseUrl.toString());
authorizationInterceptors.setTokenAndAuthorityOidc(
newToken: tokenOidcSuccess.tokenOidc.toToken(),
newToken: tokenOidcSuccess.tokenOidc,
newConfig: tokenOidcSuccess.oidcConfiguration);
authorizationIsolateInterceptors.setTokenAndAuthorityOidc(
newToken: tokenOidcSuccess.tokenOidc.toToken(),
newToken: tokenOidcSuccess.tokenOidc,
newConfig: tokenOidcSuccess.oidcConfiguration);
}
@@ -11,7 +11,6 @@ import 'package:jmap_dart_client/http/http_client.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
import 'package:jmap_dart_client/jmap/core/capability/core_capability.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/patch_object.dart';
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
@@ -19,6 +18,7 @@ import 'package:jmap_dart_client/jmap/core/reference_id.dart';
import 'package:jmap_dart_client/jmap/core/reference_prefix.dart';
import 'package:jmap_dart_client/jmap/core/request/request_invocation.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/jmap_request.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/email/get/get_email_method.dart';
@@ -49,7 +49,7 @@ import 'package:model/extensions/list_email_extension.dart';
import 'package:model/extensions/list_email_id_extension.dart';
import 'package:model/extensions/mailbox_id_extension.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/oidc/token.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:path_provider/path_provider.dart';
import 'package:tmail_ui_user/features/base/mixin/handle_error_mixin.dart';
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart';
@@ -10,7 +10,6 @@ import 'package:model/account/authentication_type.dart';
import 'package:model/account/password.dart';
import 'package:model/download/download_task_id.dart';
import 'package:model/email/attachment.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/state/download_attachment_for_web_state.dart';
import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart';
@@ -45,7 +44,7 @@ class DownloadAttachmentForWebInteractor {
if (currentAccount.authenticationType == AuthenticationType.oidc) {
final tokenOidc = await _authenticationOIDCRepository.getStoredTokenOIDC(currentAccount.id);
accountRequest = AccountRequest.withOidc(token: tokenOidc.toToken());
accountRequest = AccountRequest.withOidc(token: tokenOidc);
} else {
final authenticationInfoCache = await credentialRepository.getAuthenticationInfoStored();
accountRequest = AccountRequest.withBasic(
@@ -1,9 +1,9 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/account/account_request.dart';
import 'package:model/account/authentication_type.dart';
import 'package:model/account/password.dart';
@@ -12,9 +12,9 @@ import 'package:model/email/attachment.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/state/download_attachments_state.dart';
import 'package:tmail_ui_user/features/login/domain/extensions/oidc_configuration_extensions.dart';
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart';
import 'package:tmail_ui_user/features/login/domain/extensions/oidc_configuration_extensions.dart';
import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart';
import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart';
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
@@ -46,7 +46,7 @@ class DownloadAttachmentsInteractor {
if (currentAccount.authenticationType == AuthenticationType.oidc) {
final tokenOidc = await _authenticationOIDCRepository.getStoredTokenOIDC(currentAccount.id);
accountRequest = AccountRequest.withOidc(token: tokenOidc.toToken());
accountRequest = AccountRequest.withOidc(token: tokenOidc);
} else {
final authenticationInfoCache = await credentialRepository.getAuthenticationInfoStored();
accountRequest = AccountRequest.withBasic(
@@ -96,22 +96,24 @@ class DownloadAttachmentsInteractor {
await _accountRepository.deleteCurrentAccount(accountCurrent.id);
await Future.wait([
_authenticationOIDCRepository.persistTokenOIDC(newTokenOIDC),
_accountRepository.setCurrentAccount(PersonalAccount(
await _authenticationOIDCRepository.persistTokenOIDC(newTokenOIDC);
await _accountRepository.setCurrentAccount(
PersonalAccount(
newTokenOIDC.tokenIdHash,
AuthenticationType.oidc,
isSelected: true,
accountId: accountId,
apiUrl: accountCurrent.apiUrl,
userName: accountCurrent.userName))
]);
userName: accountCurrent.userName
)
);
_authorizationInterceptors.setTokenAndAuthorityOidc(
newToken: newTokenOIDC.toToken(),
newToken: newTokenOIDC,
newConfig: oidcConfig);
final accountRequest = AccountRequest.withOidc(token: newTokenOIDC.toToken());
final accountRequest = AccountRequest.withOidc(token: newTokenOIDC);
final taskIds = await emailRepository.downloadAttachments(
attachments,
@@ -38,7 +38,7 @@ class ExportAttachmentInteractor {
if (currentAccount.authenticationType == AuthenticationType.oidc) {
final tokenOidc = await _authenticationOIDCRepository.getStoredTokenOIDC(currentAccount.id);
accountRequest = AccountRequest.withOidc(token: tokenOidc.toToken());
accountRequest = AccountRequest.withOidc(token: tokenOidc);
} else {
final authenticationInfoCache = await credentialRepository.getAuthenticationInfoStored();
accountRequest = AccountRequest.withBasic(
@@ -43,7 +43,6 @@ class AccountCacheManager {
return _accountCacheClient.insertItem(newAccountCache.id, newAccountCache);
}
Future<void> deleteCurrentAccount(String hashId) {
log('AccountCacheManager::deleteCurrentAccount(): $hashId');
return _accountCacheClient.deleteItem(hashId);
@@ -13,7 +13,6 @@ import 'package:model/account/password.dart';
import 'package:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/request/oidc_request.dart';
import 'package:model/oidc/response/oidc_response.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
import 'package:tmail_ui_user/features/home/domain/state/get_session_state.dart';
import 'package:tmail_ui_user/features/login/data/network/oidc_error.dart';
@@ -331,10 +330,10 @@ class LoginController extends ReloadableController {
dynamicUrlInterceptors.setJmapUrl(_currentBaseUrl?.toString());
dynamicUrlInterceptors.changeBaseUrl(_currentBaseUrl?.toString());
authorizationInterceptors.setTokenAndAuthorityOidc(
newToken: success.tokenOIDC.toToken(),
newToken: success.tokenOIDC,
newConfig: success.configuration);
authorizationIsolateInterceptors.setTokenAndAuthorityOidc(
newToken: success.tokenOIDC.toToken(),
newToken: success.tokenOIDC,
newConfig: success.configuration);
getSessionAction();
}
@@ -1,4 +1,5 @@
import 'dart:async';
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
@@ -10,7 +11,6 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/extensions/account_id_extensions.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart';
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
@@ -206,7 +206,7 @@ class SendingEmailWorker extends Worker {
void _handleGetAccountByOidcSuccess(GetStoredTokenOidcSuccess storedTokenOidcSuccess) {
_dynamicUrlInterceptors?.setJmapUrl(storedTokenOidcSuccess.baseUrl.toString());
_authorizationInterceptors?.setTokenAndAuthorityOidc(
newToken: storedTokenOidcSuccess.tokenOidc.toToken(),
newToken: storedTokenOidcSuccess.tokenOidc,
newConfig: storedTokenOidcSuccess.oidcConfiguration
);
_dynamicUrlInterceptors?.changeBaseUrl(storedTokenOidcSuccess.baseUrl.toString());
+3 -3
View File
@@ -4,12 +4,12 @@ import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/account/authentication_type.dart';
import 'package:model/account/password.dart';
import 'package:model/oidc/token.dart';
import 'package:model/oidc/token_oidc.dart';
class AccountRequest with EquatableMixin {
final UserName? userName;
final Password? password;
final Token? token;
final TokenOIDC? token;
final AuthenticationType authenticationType;
AccountRequest({
@@ -19,7 +19,7 @@ class AccountRequest with EquatableMixin {
this.authenticationType = AuthenticationType.none,
});
factory AccountRequest.withOidc({required Token token}) {
factory AccountRequest.withOidc({required TokenOIDC token}) {
return AccountRequest(
token: token,
authenticationType: AuthenticationType.oidc
@@ -0,0 +1,13 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:model/oidc/token_id.dart';
class TokenIdConverter implements JsonConverter<TokenId, String> {
const TokenIdConverter();
@override
TokenId fromJson(String json) => TokenId(json);
@override
String toJson(TokenId tokenId) => tokenId.uuid;
}
-33
View File
@@ -1,33 +0,0 @@
import 'package:core/utils/app_logger.dart';
import 'package:equatable/equatable.dart';
import 'package:model/oidc/token_id.dart';
class Token with EquatableMixin {
final String token;
final TokenId tokenId;
final String refreshToken;
final DateTime? expiredTime;
const Token(this.token, this.tokenId, this.refreshToken, {this.expiredTime});
@override
List<Object?> get props => [token, tokenId, refreshToken, expiredTime];
}
extension TokenExtension on Token {
bool isTokenValid() => token.isNotEmpty && tokenId.uuid.isNotEmpty;
bool get isExpired {
if (expiredTime != null) {
final now = DateTime.now();
log('TokenExtension::isExpired(): TIME_NOW: $now');
log('TokenExtension::isExpired(): EXPIRED_DATE: $expiredTime');
return expiredTime!.isBefore(now);
}
return false;
}
String get tokenIdHash => tokenId.uuid.hashCode.toString();
}
+21 -5
View File
@@ -1,8 +1,14 @@
import 'package:core/utils/app_logger.dart';
import 'package:equatable/equatable.dart';
import 'package:model/oidc/token.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:model/oidc/converter/token_id_converter.dart';
import 'package:model/oidc/token_id.dart';
part 'token_oidc.g.dart';
@TokenIdConverter()
@JsonSerializable(includeIfNull: false, explicitToJson: true)
class TokenOIDC with EquatableMixin {
final String token;
@@ -17,6 +23,10 @@ class TokenOIDC with EquatableMixin {
{this.expiredTime}
);
factory TokenOIDC.fromJson(Map<String, dynamic> json) => _$TokenOIDCFromJson(json);
Map<String, dynamic> toJson() => _$TokenOIDCToJson(this);
@override
List<Object?> get props => [token, tokenId, expiredTime, refreshToken];
}
@@ -25,9 +35,15 @@ extension TokenOIDCExtension on TokenOIDC {
bool isTokenValid() => token.isNotEmpty && tokenId.uuid.isNotEmpty;
Token toToken() {
return Token(token, tokenId, refreshToken, expiredTime: expiredTime);
}
String get tokenIdHash => tokenId.uuid.hashCode.toString();
bool get isExpired {
if (expiredTime != null) {
final now = DateTime.now();
log('TokenOIDC::isExpired(): TIME_NOW: $now');
log('TokenOIDC::isExpired(): EXPIRED_DATE: $expiredTime');
return expiredTime!.isBefore(now);
}
return false;
}
}