import 'dart:convert'; import 'dart:typed_data'; import 'package:pointycastle/impl.dart'; import '/utils/encryption/aes_helper.dart'; import '/utils/encryption/crypto_utils.dart'; class ConversationUser { String id; String userId; String conversationId; String username; String associationKey; RSAPublicKey publicKey; bool admin; ConversationUser({ required this.id, required this.userId, required this.conversationId, required this.username, required this.associationKey, required this.publicKey, required this.admin, }); factory ConversationUser.fromJson(Map json, Uint8List symmetricKey) { String userId = AesHelper.aesDecrypt( symmetricKey, base64.decode(json['user_id']), ); String username = AesHelper.aesDecrypt( symmetricKey, base64.decode(json['username']), ); String associationKey = AesHelper.aesDecrypt( symmetricKey, base64.decode(json['association_key']), ); String admin = AesHelper.aesDecrypt( symmetricKey, base64.decode(json['admin']), ); String publicKeyString = AesHelper.aesDecrypt( symmetricKey, base64.decode(json['public_key']), ); RSAPublicKey publicKey = CryptoUtils.rsaPublicKeyFromPem(publicKeyString); return ConversationUser( id: json['id'], conversationId: json['conversation_detail_id'], userId: userId, username: username, associationKey: associationKey, publicKey: publicKey, admin: admin == 'true', ); } Map toJson() { return { 'id': id, 'user_id': userId, 'username': username, 'association_key': associationKey, 'asymmetric_public_key': publicKeyPem(), 'admin': admin ? 'true' : 'false', }; } Map toMap() { return { 'id': id, 'user_id': userId, 'conversation_id': conversationId, 'username': username, 'association_key': associationKey, 'asymmetric_public_key': publicKeyPem(), 'admin': admin ? 1 : 0, }; } String publicKeyPem() { return CryptoUtils.encodeRSAPublicKeyToPem(publicKey); } }