- import 'dart:convert';
- import 'dart:typed_data';
-
- import 'package:Envelope/database/repositories/conversation_users_repository.dart';
- import 'package:pointycastle/pointycastle.dart';
-
- import '/database/models/conversation_users.dart';
- import '/database/models/my_profile.dart';
- import '/database/models/conversations.dart';
- import '/utils/encryption/crypto_utils.dart';
-
- const messageTypeReceiver = 'receiver';
- const messageTypeSender = 'sender';
-
- class Message {
- String id;
- String symmetricKey;
- String userSymmetricKey;
- String senderId;
- String senderUsername;
- String associationKey;
- String createdAt;
- bool failedToSend;
-
- Message({
- required this.id,
- required this.symmetricKey,
- required this.userSymmetricKey,
- required this.senderId,
- required this.senderUsername,
- required this.associationKey,
- required this.createdAt,
- required this.failedToSend,
- });
-
- Future<List<Map<String, String>>> payloadJsonBase(
- Uint8List symmetricKey,
- Uint8List userSymmetricKey,
- Conversation conversation,
- String messageId,
- String messageDataId,
- ) async {
- MyProfile profile = await MyProfile.getProfile();
- if (profile.publicKey == null) {
- throw Exception('Could not get profile.publicKey');
- }
-
- RSAPublicKey publicKey = profile.publicKey!;
-
- List<Map<String, String>> messages = [];
- List<ConversationUser> conversationUsers = await ConversationUsersRepository.getConversationUsers(conversation);
-
- for (var i = 0; i < conversationUsers.length; i++) {
- ConversationUser user = conversationUsers[i];
-
- if (profile.id == user.userId) {
- messages.add({
- 'id': messageId,
- 'message_data_id': messageDataId,
- 'symmetric_key': base64.encode(CryptoUtils.rsaEncrypt(
- userSymmetricKey,
- publicKey,
- )),
- 'association_key': user.associationKey,
- });
-
- continue;
- }
-
- ConversationUser conversationUser = await ConversationUsersRepository.getConversationUser(conversation, user.userId);
- RSAPublicKey friendPublicKey = conversationUser.publicKey;
-
- messages.add({
- 'message_data_id': messageDataId,
- 'symmetric_key': base64.encode(CryptoUtils.rsaEncrypt(
- userSymmetricKey,
- friendPublicKey,
- )),
- 'association_key': user.associationKey,
- });
- }
-
- return messages;
- }
-
- String getContent() {
- return '';
- }
-
- Map<String, dynamic> toMap() {
- return {
- 'id': id,
- 'symmetric_key': symmetricKey,
- 'user_symmetric_key': userSymmetricKey,
- 'sender_id': senderId,
- 'sender_username': senderUsername,
- 'association_key': associationKey,
- 'created_at': createdAt,
- 'failed_to_send': failedToSend ? 1 : 0,
- };
- }
- }
|