add object encryption

This commit is contained in:
marlon-erler
2024-07-11 12:25:45 +02:00
parent e45f9730d6
commit 1596e41b00
3 changed files with 61 additions and 37 deletions
+29 -17
View File
@@ -511,8 +511,14 @@
const { sender, body, channel, isoDate, messageObject } = JSON.parse( const { sender, body, channel, isoDate, messageObject } = JSON.parse(
data.messageBody data.messageBody
); );
if (messageObject && messageObject.id && messageObject.title) { if (messageObject) {
return this.handleMessageObject(messageObject); const decrypted = await decryptString(
messageObject,
this.encryptionKey.value
);
console.log(decrypted);
const object = JSON.parse(decrypted);
if (object.id && object.title) return this.handleMessageObject(object);
} }
this.handleMessage({ this.handleMessage({
sender, sender,
@@ -534,6 +540,18 @@
handleMessageObject = (messageObject) => { handleMessageObject = (messageObject) => {
this.objects.set(messageObject.id, messageObject); this.objects.set(messageObject.id, messageObject);
}; };
// sending
sendMessagesInOutbox = () => {
this.outbox.value.forEach(async (message) => {
const isSent = await this.sendMessage(message);
if (isSent == true) this.outbox.remove(message);
});
this.objectOutbox.value.forEach(async (object) => {
const chatMessage = await this.createChatMessage("", object);
const isSent = await this.sendMessage(chatMessage);
if (isSent == true) this.objectOutbox.remove(object.id);
});
};
// messages // messages
createChatMessage = async (messageText, messageObject) => { createChatMessage = async (messageText, messageObject) => {
const secondaryChannelNames = [ const secondaryChannelNames = [
@@ -550,7 +568,11 @@
body: messageText, body: messageText,
isoDate: (/* @__PURE__ */ new Date()).toISOString() isoDate: (/* @__PURE__ */ new Date()).toISOString()
}; };
if (messageObject) chatMessage.messageObject = messageObject; if (messageObject)
chatMessage.messageObject = await encryptString(
JSON.stringify(messageObject),
this.encryptionKey.value
);
return chatMessage; return chatMessage;
}; };
sendMessageFromComposer = async () => { sendMessageFromComposer = async () => {
@@ -567,15 +589,6 @@
if (this.cannotResendMessage.value == true) return; if (this.cannotResendMessage.value == true) return;
this.sendMessageFromText(chatMessage.body); this.sendMessageFromText(chatMessage.body);
}; };
sendMessagesInOutbox = () => {
this.outbox.value.forEach((message) => {
this.sendMessage(message);
});
this.objectOutbox.value.forEach(async (object) => {
const chatMessage = await this.createChatMessage("", object);
this.sendMessage(chatMessage);
});
};
clearMessages = () => { clearMessages = () => {
this.messages.clear(); this.messages.clear();
}; };
@@ -593,14 +606,13 @@
this.messages.callSubscriptions(); this.messages.callSubscriptions();
}; };
sendMessage = async (chatMessage) => { sendMessage = async (chatMessage) => {
if (isConnected.value == false || this.isSubscribed.value == false) return; if (isConnected.value == false || this.isSubscribed.value == false)
return false;
const encryptedBody = this.encryptionKey.value == "" ? chatMessage.body : await encryptString(chatMessage.body, this.encryptionKey.value); const encryptedBody = this.encryptionKey.value == "" ? chatMessage.body : await encryptString(chatMessage.body, this.encryptionKey.value);
chatMessage.body = encryptedBody; chatMessage.body = encryptedBody;
const messageString = JSON.stringify(chatMessage); const messageString = JSON.stringify(chatMessage);
UDN.sendMessage(chatMessage.channel, messageString); UDN.sendMessage(chatMessage.channel, messageString);
this.outbox.remove(chatMessage); return true;
if (chatMessage.messageObject)
this.objectOutbox.remove(chatMessage.messageObject.id);
}; };
// objects // objects
addObjectAndSend = (object) => { addObjectAndSend = (object) => {
@@ -1139,7 +1151,7 @@
"toggle:disabled": chat.cannotClearObjects "toggle:disabled": chat.cannotClearObjects
}, },
translation.clearObjects, translation.clearObjects,
/* @__PURE__ */ createElement("span", { class: "icon" }, "delete_sweep") /* @__PURE__ */ createElement("span", { class: "icon" }, "deployed_code")
), /* @__PURE__ */ createElement( ), /* @__PURE__ */ createElement(
"button", "button",
{ {
+31 -19
View File
@@ -22,7 +22,7 @@ export interface ChatMessage {
body: string; body: string;
isoDate: string; isoDate: string;
messageObject?: MessageObject; messageObject?: string;
} }
// object // object
@@ -154,8 +154,13 @@ export class Chat {
data.messageBody data.messageBody
); );
if (messageObject && messageObject.id && messageObject.title) { if (messageObject) {
return this.handleMessageObject(messageObject); const decrypted = await decryptString(
messageObject,
this.encryptionKey.value
);
const object = JSON.parse(decrypted);
if (object.id && object.title) return this.handleMessageObject(object);
} }
this.handleMessage({ this.handleMessage({
@@ -183,6 +188,20 @@ export class Chat {
this.objects.set(messageObject.id, messageObject); this.objects.set(messageObject.id, messageObject);
}; };
// sending
sendMessagesInOutbox = () => {
this.outbox.value.forEach(async (message) => {
const isSent = await this.sendMessage(message);
if (isSent == true) this.outbox.remove(message);
});
this.objectOutbox.value.forEach(async (object) => {
const chatMessage = await this.createChatMessage("", object);
const isSent = await this.sendMessage(chatMessage);
if (isSent == true) this.objectOutbox.remove(object.id);
});
};
// messages // messages
createChatMessage = async ( createChatMessage = async (
messageText: string, messageText: string,
@@ -206,7 +225,11 @@ export class Chat {
isoDate: new Date().toISOString(), isoDate: new Date().toISOString(),
}; };
if (messageObject) chatMessage.messageObject = messageObject; if (messageObject)
chatMessage.messageObject = await encryptString(
JSON.stringify(messageObject),
this.encryptionKey.value
);
return chatMessage; return chatMessage;
}; };
@@ -228,16 +251,6 @@ export class Chat {
this.sendMessageFromText(chatMessage.body); this.sendMessageFromText(chatMessage.body);
}; };
sendMessagesInOutbox = () => {
this.outbox.value.forEach((message) => {
this.sendMessage(message);
});
this.objectOutbox.value.forEach(async (object) => {
const chatMessage = await this.createChatMessage("", object);
this.sendMessage(chatMessage);
});
};
clearMessages = (): void => { clearMessages = (): void => {
this.messages.clear(); this.messages.clear();
}; };
@@ -258,8 +271,9 @@ export class Chat {
this.messages.callSubscriptions(); this.messages.callSubscriptions();
}; };
sendMessage = async (chatMessage: ChatMessage): Promise<void> => { sendMessage = async (chatMessage: ChatMessage): Promise<boolean> => {
if (isConnected.value == false || this.isSubscribed.value == false) return; if (isConnected.value == false || this.isSubscribed.value == false)
return false;
const encryptedBody = const encryptedBody =
this.encryptionKey.value == "" this.encryptionKey.value == ""
@@ -271,9 +285,7 @@ export class Chat {
const messageString = JSON.stringify(chatMessage); const messageString = JSON.stringify(chatMessage);
UDN.sendMessage(chatMessage.channel, messageString); UDN.sendMessage(chatMessage.channel, messageString);
this.outbox.remove(chatMessage); return true;
if (chatMessage.messageObject)
this.objectOutbox.remove(chatMessage.messageObject.id);
}; };
// objects // objects
+1 -1
View File
@@ -147,7 +147,7 @@ export function ChatOptionModal(chat: Chat, isPresented: React.State<boolean>) {
toggle:disabled={chat.cannotClearObjects} toggle:disabled={chat.cannotClearObjects}
> >
{translation.clearObjects} {translation.clearObjects}
<span class="icon">delete_sweep</span> <span class="icon">deployed_code</span>
</button> </button>
<button <button