|
|
- 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<Conversation> 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 messageThreadKey;
- String symmetricKey;
- bool admin;
- String name;
- String? users;
-
- Conversation({
- required this.id,
- required this.userId,
- required this.conversationDetailId,
- required this.messageThreadKey,
- required this.symmetricKey,
- required this.admin,
- required this.name,
- this.users,
- });
-
-
- factory Conversation.fromJson(Map<String, dynamic> 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 threadKey = AesHelper.aesDecrypt(
- symmetricKeyDecrypted,
- base64.decode(json['message_thread_key']),
- );
-
- var admin = AesHelper.aesDecrypt(
- symmetricKeyDecrypted,
- base64.decode(json['admin']),
- );
-
- return Conversation(
- id: json['id'],
- userId: json['user_id'],
- conversationDetailId: detailId,
- messageThreadKey: threadKey,
- symmetricKey: base64.encode(symmetricKeyDecrypted),
- admin: admin == 'true',
- name: 'Unknown',
- );
- }
-
- @override
- String toString() {
- return '''
-
-
- id: $id
- userId: $userId
- name: $name
- admin: $admin''';
- }
-
- Map<String, dynamic> toMap() {
- return {
- 'id': id,
- 'user_id': userId,
- 'conversation_detail_id': conversationDetailId,
- 'message_thread_key': messageThreadKey,
- 'symmetric_key': symmetricKey,
- 'admin': admin ? 1 : 0,
- 'name': name,
- 'users': users,
- };
- }
- }
-
-
- // A method that retrieves all the dogs from the dogs table.
- Future<List<Conversation>> getConversations() async {
- final db = await getDatabaseConnection();
-
- final List<Map<String, dynamic>> 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'],
- messageThreadKey: maps[i]['message_thread_key'],
- symmetricKey: maps[i]['symmetric_key'],
- admin: maps[i]['admin'] == 1,
- name: maps[i]['name'],
- users: maps[i]['users'],
- );
- });
- }
|