initial commit of worker to load messages parallely successfull
This commit is contained in:
parent
2946f31124
commit
97a89e5624
@ -14,6 +14,7 @@
|
||||
"handlebars": "^4.5.3",
|
||||
"loglevel": "^1.6.6",
|
||||
"markdown-it": "^10.0.0",
|
||||
"promise-worker": "^2.0.1",
|
||||
"sjcl": "^1.0.8",
|
||||
"sprintf-js": "^1.1.2",
|
||||
"tsify": "^4.0.1",
|
||||
|
@ -113,6 +113,14 @@ const encryptionService: EncryptionService = new SJCLEncryptionService();
|
||||
let messageCipherDTO: MessageCipherDTO = encryptionService.encrypt("password", "data");
|
||||
console.log(encryptionService.decrypt("password", messageCipherDTO));
|
||||
|
||||
|
||||
async function func(): Promise<void> {
|
||||
const text = await encryptionService.decryptAsPromise("password", messageCipherDTO)
|
||||
log.debug(text);
|
||||
}
|
||||
|
||||
func();
|
||||
|
||||
Handlebars.registerHelper('avatar', function () {
|
||||
return '<div class="img_cont_msg"> <img src="https://static.turbosquid.com/Preview/001292/481/WV/_D.jpg" class="rounded-circle user_img_msg"> </div>';
|
||||
});
|
||||
|
@ -15,7 +15,9 @@ export class ChatModelHelper {
|
||||
switch (lastMessageTime) {
|
||||
case null: {
|
||||
const data: ChatMessageDTO[] = await this.getPaginatedMessagesAjax(userName, page!);
|
||||
return data.map(vm => this.toChatMessageVM(vm, passphrase)).reverse();
|
||||
const data2 = Promise.all(data.map(vm => this.toChatMessageVMAsync(vm, passphrase)).reverse());
|
||||
return data2;
|
||||
// return data.map(vm => this.toChatMessageVM(vm, passphrase)).reverse();
|
||||
}
|
||||
default: {
|
||||
const data: ChatMessageDTO[] = await this.getNewMessagesAjax(userName, lastMessageTime);
|
||||
@ -24,6 +26,16 @@ export class ChatModelHelper {
|
||||
}
|
||||
}
|
||||
|
||||
private static async toChatMessageVMAsync(chatMessageDTO: ChatMessageDTO, passphrase: string): Promise<ChatMessageViewModel> {
|
||||
const vm = new ChatMessageViewModel();
|
||||
vm.fromUser = chatMessageDTO.fromUser;
|
||||
vm.toUser = chatMessageDTO.toUser;
|
||||
// vm.messageTime = chatMessageDTO.messageTime;
|
||||
chatMessageDTO.messageTime == null ? log.error("Message time somehow null") : vm.messageTime = chatMessageDTO.messageTime;
|
||||
vm.message = await this._encryptionService.decryptAsPromise(passphrase, chatMessageDTO.messageCipher);
|
||||
return vm;
|
||||
}
|
||||
|
||||
private static toChatMessageVM(chatMessageDTO: ChatMessageDTO, passphrase: string): ChatMessageViewModel {
|
||||
const vm = new ChatMessageViewModel();
|
||||
vm.fromUser = chatMessageDTO.fromUser;
|
||||
|
@ -3,4 +3,5 @@ import { MessageCipherDTO } from "../dto/MessageCipherDTO";
|
||||
export interface EncryptionService {
|
||||
encrypt(passphrase: string, plainText: string): any;
|
||||
decrypt(passphrase: string, cipher: MessageCipherDTO): string;
|
||||
decryptAsPromise(passphrase: string, cipher: MessageCipherDTO): Promise<string>
|
||||
}
|
@ -1,15 +1,24 @@
|
||||
import { EncryptionService } from "./EncryptionService";
|
||||
import * as sjcl from "sjcl";
|
||||
import { MessageCipherDTO } from "../dto/MessageCipherDTO";
|
||||
|
||||
import PromiseWorker = require('promise-worker');
|
||||
export class SJCLEncryptionService implements EncryptionService {
|
||||
private readonly params = { mode: "gcm", ts: 128, adata: "", iter: 10000 }
|
||||
private readonly _params = { mode: "gcm", ts: 128, adata: "", iter: 10000 };
|
||||
private readonly _worker = new Worker('/js/worker.js');
|
||||
// @ts-ignore
|
||||
private readonly _promiseWorker = new PromiseWorker(this._worker);
|
||||
|
||||
public encrypt(passphrase: string, plainText: string): MessageCipherDTO {
|
||||
// @ts-ignore
|
||||
return JSON.parse(sjcl.encrypt(passphrase, plainText, this.params) as string) as MessageCipherDTO;
|
||||
return JSON.parse(sjcl.encrypt(passphrase, plainText, this._params) as string) as MessageCipherDTO;
|
||||
}
|
||||
|
||||
public decrypt(passphrase: string, cipher: MessageCipherDTO): string {
|
||||
return sjcl.decrypt(passphrase, JSON.stringify(cipher), undefined, undefined);
|
||||
}
|
||||
|
||||
public async decryptAsPromise(passphrase: string, cipher: MessageCipherDTO): Promise<string> {
|
||||
const decrypted = await this._promiseWorker.postMessage({"passphrase": passphrase, "cipher": cipher})
|
||||
return decrypted;
|
||||
}
|
||||
}
|
@ -1718,6 +1718,11 @@ process@^0.11.10, process@~0.11.0:
|
||||
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
|
||||
|
||||
promise-worker@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/promise-worker/-/promise-worker-2.0.1.tgz#63bb532624ecd40cdb335b51bb7830c3c892aa6c"
|
||||
integrity sha512-jR7vHqMEwWJ15i9vA3qyCKwRHihyLJp1sAa3RyY5F35m3u5s2lQUfq0nzVjbA8Xc7+3mL3Y9+9MHBO9UFRpFxA==
|
||||
|
||||
public-encrypt@^4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
|
||||
|
10
chatto/src/main/resources/static/js/worker.js
Normal file
10
chatto/src/main/resources/static/js/worker.js
Normal file
@ -0,0 +1,10 @@
|
||||
// worker.js
|
||||
importScripts('https://unpkg.com/promise-worker/dist/promise-worker.register.js');
|
||||
importScripts('https://cdnjs.cloudflare.com/ajax/libs/sjcl/1.0.8/sjcl.min.js');
|
||||
|
||||
registerPromiseWorker((payload) => {
|
||||
// console.log(payload)
|
||||
// console.log('decrypted = ' + sjcl.decrypt(payload.passphrase, JSON.stringify(payload.cipher)));
|
||||
// return 'pong';
|
||||
return sjcl.decrypt(payload.passphrase, JSON.stringify(payload.cipher))
|
||||
});
|
Loading…
Reference in New Issue
Block a user