Browse Source

initial commit of worker to load messages parallely successfull

master
nova 4 years ago
parent
commit
97a89e5624
  1. 1
      chatto/src/main/javascript/package.json
  2. 8
      chatto/src/main/javascript/ts/src/main.ts
  3. 14
      chatto/src/main/javascript/ts/src/model/ChatModelHelper.ts
  4. 1
      chatto/src/main/javascript/ts/src/service/EncryptionService.ts
  5. 15
      chatto/src/main/javascript/ts/src/service/SJCLEncryptionService.ts
  6. 5
      chatto/src/main/javascript/yarn.lock
  7. 10
      chatto/src/main/resources/static/js/worker.js

1
chatto/src/main/javascript/package.json

@ -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",

8
chatto/src/main/javascript/ts/src/main.ts

@ -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>';
});

14
chatto/src/main/javascript/ts/src/model/ChatModelHelper.ts

@ -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;

1
chatto/src/main/javascript/ts/src/service/EncryptionService.ts

@ -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>
}

15
chatto/src/main/javascript/ts/src/service/SJCLEncryptionService.ts

@ -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;
}
}

5
chatto/src/main/javascript/yarn.lock

@ -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

@ -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…
Cancel
Save