absenat
Version:
dedicated messaging service core
166 lines (158 loc) • 6.01 kB
JavaScript
const messages = {};
const handle_recieve_text_message = (contact_publickey, message) => {
const decryped_message = myPrivateKey.decrypt(message);
const message_json = JSON.parse(decryped_message);
let message_obj = messages[message_json.id];
if (!message_obj) {
message_obj = [];
}
message_obj[message_json.index] = message_json.message;
if (message_obj.length == message_json['length']) {
const message = message_obj.join('');
db.addRecieveingPrivateTextMessage(message_json.id, contact_publickey, message);
db.getContactByPublicKey(contact_publickey, contact => {
console.log(`${chalk.green(contact.nickname)}: ${message}`);
cli.finished();
});
} else {
messages[message_json.id] = message_obj;
}
};
const handle_recieve_image_message = (contact_publickey, message) => {
const decryped_message = myPrivateKey.decrypt(message);
const message_json = JSON.parse(decryped_message);
let message_obj = messages[message_json.id];
if (!message_obj) {
message_obj = [];
}
message_obj[message_json.index] = message_json.message;
if (message_obj.length == message_json['length']) {
const caption = message_json.caption;
const filename = message_json.filename;
if (!fs.existsSync('./storage')) {
fs.mkdirSync('./storage');
if (!fs.existsSync('./storage/images')) {
fs.mkdirSync('./storage/images');
}
}
const file = fs.createWriteStream(`./storage/images/${filename}`);
for (let i = 0; i < message_obj.length; i++) {
const data = Buffer.from(message_obj[i]);
file.write(data);
}
file.end();
db.addRecieveingPrivateImageMessage(message_json.id, contact_publickey, caption, `./storage/${filename}`, filename);
db.getContactByPublicKey(contact_publickey, contact => {
console.log(`${chalk.green(contact.nickname)}: ${filename} (${caption})`);
cli.finished();
});
} else {
messages[message_json.id] = message_obj;
}
};
const handle_recieve_audio_message = (contact_publickey, message) => {
const decryped_message = myPrivateKey.decrypt(message);
const message_json = JSON.parse(decryped_message);
let message_obj = messages[message_json.id];
if (!message_obj) {
message_obj = [];
}
message_obj[message_json.index] = message_json.message;
if (message_obj.length == message_json['length']) {
const caption = message_json.caption;
const filename = message_json.filename;
if (!fs.existsSync('./storage')) {
fs.mkdirSync('./storage');
if (!fs.existsSync('./storage/audios')) {
fs.mkdirSync('./storage/audios');
}
}
const file = fs.createWriteStream(`./storage/audios/${filename}`);
for (let i = 0; i < message_obj.length; i++) {
const data = Buffer.from(message_obj[i]);
file.write(data);
}
file.end();
db.addRecieveingPrivateAudioMessage(message_json.id, contact_publickey, caption, `./storage/${filename}`, filename);
db.getContactByPublicKey(contact_publickey, contact => {
console.log(`${chalk.green(contact.nickname)}: ${filename} (${caption})`);
cli.finished();
});
} else {
messages[message_json.id] = message_obj;
}
};
const handle_recieve_file_message = (contact_publickey, message) => {
const decryped_message = myPrivateKey.decrypt(message);
const message_json = JSON.parse(decryped_message);
let message_obj = messages[message_json.id];
if (!message_obj) {
message_obj = [];
}
message_obj[message_json.index] = message_json.message;
if (message_obj.length == message_json['length']) {
const caption = message_json.caption;
const filename = message_json.filename;
if (!fs.existsSync('./storage')) {
fs.mkdirSync('./storage');
if (!fs.existsSync('./storage/files')) {
fs.mkdirSync('./storage/files');
}
}
const file = fs.createWriteStream(`./storage/files/${filename}`);
for (let i = 0; i < message_obj.length; i++) {
const data = Buffer.from(message_obj[i]);
file.write(data);
}
file.end();
db.addRecieveingPrivateFileMessage(message_json.id, contact_publickey, caption, `./storage/${filename}`, filename);
db.getContactByPublicKey(contact_publickey, contact => {
console.log(`${chalk.green(contact.nickname)}: ${filename} (${caption})`);
cli.finished();
});
} else {
messages[message_json.id] = message_obj;
}
};
const handle_recieve_movie_message = (contact_publickey, message) => {
const decryped_message = myPrivateKey.decrypt(message);
const message_json = JSON.parse(decryped_message);
let message_obj = messages[message_json.id];
if (!message_obj) {
message_obj = [];
}
message_obj[message_json.index] = message_json.message;
if (message_obj.length == message_json['length']) {
const caption = message_json.caption;
const filename = message_json.filename;
if (!fs.existsSync('./storage')) {
fs.mkdirSync('./storage');
if (!fs.existsSync('./storage/movies')) {
fs.mkdirSync('./storage/movies');
}
}
const file = fs.createWriteStream(`./storage/movies/${filename}`);
for (let i = 0; i < message_obj.length; i++) {
const data = Buffer.from(message_obj[i]);
file.write(data);
}
file.end();
db.addRecieveingPrivateMovieMessage(message_json.id, contact_publickey, caption, `./storage/${filename}`, filename);
db.getContactByPublicKey(contact_publickey, contact => {
console.log(`${chalk.green(contact.nickname)}: ${filename} (${caption})`);
cli.finished();
});
} else {
messages[message_json.id] = message_obj;
}
};
const handle = (socket) => {
socket.on('text_message', handle_recieve_text_message);
socket.on('image_message', handle_recieve_image_message);
socket.on('audio_message', handle_recieve_audio_message);
socket.on('movie_message', handle_recieve_movie_message);
socket.on('file_message', handle_recieve_file_message);
}
module.exports = {
handle,
}