import 'dart:convert'; import 'package:pointycastle/export.dart'; import '/utils/encryption/crypto_utils.dart'; import '/utils/encryption/aes_helper.dart'; import '/utils/storage/database.dart'; Conversation findConversationByDetailId(List conversations, String id) { for (var conversation in conversations) { if (conversation.conversationDetailId == id) { return conversation; } } // Or return `null`. throw ArgumentError.value(id, "id", "No element with that id"); } class Conversation { String id; String userId; String conversationDetailId; String symmetricKey; bool admin; String name; Conversation({ required this.id, required this.userId, required this.conversationDetailId, required this.symmetricKey, required this.admin, required this.name, }); factory Conversation.fromJson(Map json, RSAPrivateKey privKey) { var symmetricKeyDecrypted = CryptoUtils.rsaDecrypt( base64.decode(json['symmetric_key']), privKey, ); var detailId = AesHelper.aesDecrypt( symmetricKeyDecrypted, base64.decode(json['conversation_detail_id']), ); var admin = AesHelper.aesDecrypt( symmetricKeyDecrypted, base64.decode(json['admin']), ); return Conversation( id: json['id'], userId: json['user_id'], conversationDetailId: detailId, symmetricKey: base64.encode(symmetricKeyDecrypted), admin: admin == 'true', name: 'Unknown', ); } @override String toString() { return ''' id: $id userId: $userId name: $name admin: $admin'''; } Map toMap() { return { 'id': id, 'user_id': userId, 'conversation_detail_id': conversationDetailId, 'symmetric_key': symmetricKey, 'admin': admin ? 1 : 0, 'name': name, }; } } // A method that retrieves all the dogs from the dogs table. Future> getConversations() async { final db = await getDatabaseConnection(); final List> maps = await db.query('conversations'); return List.generate(maps.length, (i) { return Conversation( id: maps[i]['id'], userId: maps[i]['user_id'], conversationDetailId: maps[i]['conversation_detail_id'], symmetricKey: maps[i]['symmetric_key'], admin: maps[i]['admin'] == 1, name: maps[i]['name'], ); }); }