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:
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user