TF-3082 Warn user and save identity cache on reload/session expired
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:tmail_ui_user/features/identity_creator/domain/model/identity_cache.dart';
|
||||
|
||||
abstract class IdentityCreatorDataSource {
|
||||
Future<void> saveIdentityCacheOnWeb(
|
||||
AccountId accountId,
|
||||
UserName userName,
|
||||
{required IdentityCache identityCache});
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:model/extensions/account_id_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
|
||||
import 'package:tmail_ui_user/features/identity_creator/data/datasource/identity_creator_data_source.dart';
|
||||
import 'package:tmail_ui_user/features/identity_creator/data/model/identity_cache_model.dart';
|
||||
import 'package:tmail_ui_user/features/identity_creator/domain/model/identity_cache.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||
import 'package:universal_html/html.dart';
|
||||
|
||||
class LocalIdentityCreatorDataSourceImpl implements IdentityCreatorDataSource {
|
||||
LocalIdentityCreatorDataSourceImpl(this._exceptionThrower);
|
||||
|
||||
final ExceptionThrower _exceptionThrower;
|
||||
|
||||
static const sessionStorageKeyword = 'identityCreatorSessionStorage';
|
||||
|
||||
@override
|
||||
Future<void> saveIdentityCacheOnWeb(
|
||||
AccountId accountId,
|
||||
UserName userName,
|
||||
{required IdentityCache identityCache}
|
||||
) async {
|
||||
return Future.sync(() {
|
||||
final cacheKey = _generateTupleKey(accountId, userName);
|
||||
Map<String, String> entries = {
|
||||
cacheKey: jsonEncode(IdentityCacheModel.fromDomain(identityCache).toJson())
|
||||
};
|
||||
window.sessionStorage.addAll(entries);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
|
||||
String _generateTupleKey(AccountId accountId, UserName userName) {
|
||||
return TupleKey(
|
||||
LocalIdentityCreatorDataSourceImpl.sessionStorageKeyword,
|
||||
accountId.asString,
|
||||
userName.value
|
||||
).toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:tmail_ui_user/features/identity_creator/domain/model/identity_cache.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/identity_action_type.dart';
|
||||
import 'package:tmail_ui_user/features/public_asset/data/model/public_assets_in_identity_arguments_model.dart';
|
||||
|
||||
part 'identity_cache_model.g.dart';
|
||||
|
||||
@JsonSerializable(includeIfNull: false, explicitToJson: true)
|
||||
class IdentityCacheModel extends IdentityCache {
|
||||
IdentityCacheModel({
|
||||
required super.identity,
|
||||
required super.identityActionType,
|
||||
required super.isDefault,
|
||||
required this.publicAssetsInIdentityArgumentsModel})
|
||||
: super(publicAssetsInIdentityArguments: publicAssetsInIdentityArgumentsModel);
|
||||
|
||||
final PublicAssetsInIdentityArgumentsModel? publicAssetsInIdentityArgumentsModel;
|
||||
|
||||
factory IdentityCacheModel.fromJson(Map<String, dynamic> json)
|
||||
=> _$IdentityCacheModelFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$IdentityCacheModelToJson(this);
|
||||
|
||||
factory IdentityCacheModel.fromDomain(IdentityCache identityCache) {
|
||||
return IdentityCacheModel(
|
||||
identity: identityCache.identity,
|
||||
identityActionType: identityCache.identityActionType,
|
||||
isDefault: identityCache.isDefault,
|
||||
publicAssetsInIdentityArgumentsModel: identityCache.publicAssetsInIdentityArguments == null
|
||||
? null
|
||||
: PublicAssetsInIdentityArgumentsModel.fromDomain(identityCache.publicAssetsInIdentityArguments!)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:tmail_ui_user/features/identity_creator/data/datasource/identity_creator_data_source.dart';
|
||||
import 'package:tmail_ui_user/features/identity_creator/domain/model/identity_cache.dart';
|
||||
import 'package:tmail_ui_user/features/identity_creator/domain/repository/identity_creator_repository.dart';
|
||||
|
||||
class IdentityCreatorRepositoryImpl implements IdentityCreatorRepository {
|
||||
IdentityCreatorRepositoryImpl(this._identityCreatorDataSource);
|
||||
|
||||
final IdentityCreatorDataSource _identityCreatorDataSource;
|
||||
|
||||
@override
|
||||
Future<void> saveIdentityCacheOnWeb(
|
||||
AccountId accountId,
|
||||
UserName userName,
|
||||
{required IdentityCache identityCache}
|
||||
) => _identityCreatorDataSource.saveIdentityCacheOnWeb(
|
||||
accountId,
|
||||
userName,
|
||||
identityCache: identityCache);
|
||||
}
|
||||
Reference in New Issue
Block a user