UNPKG

absenat

Version:

dedicated messaging service core

77 lines (76 loc) 2.27 kB
/** * @author mr-exception * @description generates the main message * @param {string} id * @param {array[string]} chunks * @param {string} dst_public_key */ const generateMessages = (id, chunks, dst_public_key) => { // declare count of chunks have to be sent const c = chunks.length; // devlare the array of sending chunks before encrypting const result = []; for (let i = 0; i < chunks.length; i++) { const chunk = { i, c, id, data: chunks[i], }; if (i === c - 1) chunk.pk = dst_public_key; result.push(chunk); } return result; } /** * @author mr-exception * @description converts a message into chunks * @param {string} id * @param {string} content * @param {string} dst_public_key */ const chunkStringMessage = (id, content, dst_public_key) => { const chunks = []; // creating rsa node from public key const dstPublicKey = createPublicKey(dst_public_key); for (let i = 0; i < content.length; i += 128) { chunks.push(dstPublicKey.encrypt(content.substring(i, i + 128))); } return generateMessages(id, chunks, dst_public_key); } /** * @author mr-exception * @description stringifies message * @param {string} id * @param {string} content * @param {string} dst_public_key */ global.chunkMessage = (id, content, dst_public_key) => { const message = JSON.stringify(content); return chunkStringMessage(id, message, dst_public_key); } /** * @author mr-exception * @description saves a chunked message into a single file and submits it in database * @param {string} id * @param {string} src_public_key * @param {string} dst_public_key * @param {array[Burffer]} chunks */ global.saveMessage = (id, src_public_key, dst_public_key, chunks) => { // saving message conent in a file if (!fs.existsSync('./storage')) { fs.mkdirSync('./storage'); if (!fs.existsSync('./storage/bridge')) { fs.mkdirSync('./storage/bridge'); } } const file = fs.createWriteStream(`./storage/bridge/${id}.data`); for (const i in chunks) { const data = Buffer.from(chunks[i]); file.write(data); } file.end(); // saving message informations in database db.saveBridgeMessage(id, src_public_key, dst_public_key, `./storage/bridge/${id}.data`); return true; }