LMS/E-Learning-Backend-main/app/helper/helper.js
2025-09-01 19:37:35 +05:30

250 lines
7.2 KiB
JavaScript

const crypto = require('crypto');
const { uuid } = require('uuidv4');
const secret = require('../config/secrets.json');
var CryptoJS = require("crypto-js");
const nodemailer = require('nodemailer');
module.exports = {
CheckParameterValid: (jsonObj, check_keys, callback) => {
var is_valid = true;
var missing_parameter = "";
check_keys.forEach((key, indexOf) => {
if (!Object.prototype.hasOwnProperty.call(jsonObj, key)) {
is_valid = false;
missing_parameter += key + " ";
}
});
if (!is_valid) {
throw new HTTPError(422, "Missing parameter (" + missing_parameter + ")")
} else {
return callback();
}
},
CheckParameterValid_Socket: (client, name, jsonObj, check_keys, callback) => {
var is_valid = true;
var missing_parameter = "";
check_keys.forEach((key, indexOf) => {
if (!Object.prototype.hasOwnProperty.call(jsonObj, key)) {
is_valid = false;
missing_parameter += key + " ";
}
});
if (!is_valid) {
if (!app_debug_mode) {
missing_parameter = "";
}
client.emit(name, {
"success": "false",
"status": 0,
"message": "Missing parameter (" + missing_parameter + ")"
})
} else {
return callback();
}
},
remove_key_from_array: (arr, remove_key) => {
for (var i = remove_key.length - 1; i >= 0; i--) {
delete arr[remove_key[i]];
}
},
create_request_token: () => {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var result = '';
for (var i = 20; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
result = result + server_datetime('YYYYMMDDHHmmssms');
//Dlog ("Token :- "+ result );
return result;
},
image_name_genrate: () => {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var result = '';
for (var i = 10; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
return server_datetime('YYYYMMDDHHmmssms') + result + '.jpg';
},
file_name_generate: (extions) => {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var result = '';
for (var i = 10; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
return server_datetime('YYYYMMDDHHmmssms') + result + '.' + extions;
},
HTTPError: (statusCode, message) => {
return new HTTPError(statusCode, message);
},
Dlog: (log) => {
return Dlog(log);
},
getHashedPassword: (password) => {
return getHashedPassword(password);
},
generateAuthToken: () => {
return generateAuthToken();
},
sendMail: (data) => {
return sendMails(data);
},
catchError: (err) => {
return {
statusCode: err.statusCode || 500,
headers: { "Access-Control-Allow-Origin": "*" },
body: JSON.stringify({ message: err.message || 'Could not fetch the Data.' })
}
},
uploadFile: async (data) => {
if (secret.IMGUPLOAD == "true") {
// const base64Data = new Buffer.from(data.replace(/^data:(image|text)\/\w+;base64,/, ""), 'base64');
// // Getting the file type, ie: jpeg, png or gif
// const type = data.split(';')[0].split('/')[1];
// var s3Params_logo = {
// Bucket: 'cisspuploads',
// Key: uuid() + '.' + (type == "plain" ? 'txt' : type),
// Body: base64Data,
// ContentEncoding: 'base64',
// ACL: 'public-read'
// };
// const img = await s3.upload(s3Params_logo).promise();
// return img.Location;
return data;
} else {
return data;
}
},
groupBy: (array, key) => {
// Return the end result
return array.reduce(function (rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
},
deleteUser: async (data) => {
try {
// const cognito = new AWS.CognitoIdentityServiceProvider();
// return await cognito.adminDeleteUser({
// UserPoolId: process.env.USER_POOL_ID,
// Username: data,
// }).promise();
} catch (ex) {
return ex;
}
},
decryptRequest: (data) => {
return decryptRequest(data);
},
encryptPassword: (data) => {
return encryptPassword(data);
},
decryptPassword: (data) => {
return decryptPassword(data);
},
decryptUri: (data) => {
return decryptUri(data);
},
decodeImage: (data) => {
return decodeImage(data);
},
};
function Dlog(log) {
if (app_debug_mode) {
console.log(log)
}
}
function HTTPError(statusCode, message) {
const error = new Error(message)
error.statusCode = statusCode
return error
}
function getHashedPassword(password) {
const sha256 = crypto.createHash('sha256');
const hash = sha256.update(password).digest('base64');
return hash;
}
function generateAuthToken() {
return crypto.randomBytes(30).toString('hex');
}
async function sendMails(data) {
const transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: secret.FROM_EMAIL,
pass: secret.EMAIL_SECRET,
},
});
const mailOptions = {
from: secret.FROM_EMAIL,
to: data.to,
subject: data.subject,
html: data.text,
};
try {
await transporter.sendMail(mailOptions);
return {
statusCode: 200,
body: JSON.stringify({ message: 'Email sent successfully' }),
};
} catch (error) {
console.error('Error sending email:', error);
return {
statusCode: 500,
body: JSON.stringify({ message: 'Error sending email' }),
};
}
}
function decryptRequest(data) {
var bytes = CryptoJS.AES.decrypt(data, secret.ENC_SECRET);
// let ddd = {
// "email": "yashatestfirst@gmail.com"
// }
// var bytes2 = CryptoJS.AES.encrypt(JSON.stringify(ddd), secret.ENC_SECRET);
// var xyz = bytes2.toString();
return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
}
function decryptPassword(data) {
var bytes = CryptoJS.AES.decrypt(data, secret.ENC_SECRET);
return bytes.toString(CryptoJS.enc.Utf8)//JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
}
function encryptPassword(text) {
return CryptoJS.MD5(text).toString();
// return CryptoJS.AES.encrypt(text, secret.ENC_SECRET).toString();
}
function decryptUri(cipherText) {
var reb64 = CryptoJS.enc.Hex.parse(cipherText);
var bytes = reb64.toString(CryptoJS.enc.Base64);
var decrypt = CryptoJS.AES.decrypt(bytes, secret.ENC_SECRET);
var plain = decrypt.toString(CryptoJS.enc.Utf8);
return plain;
}
function decodeImage(data) {
const decoded = JSON.parse(CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(data)));
return decoded;
}