182 lines
6.9 KiB
JavaScript
182 lines
6.9 KiB
JavaScript
// import { v4 as uuidv4, v6 as uuidv6 } from 'uuid';
|
|
const uuid = require('uuid');
|
|
// const bcrypt = require('bcryptjs');
|
|
const cryptojs = require('crypto-js');
|
|
const e = require('express');
|
|
const fs = require('fs');
|
|
const db = require('./db');
|
|
const moment = require("moment");
|
|
const vars = require('./vars');
|
|
const replaceColor = require('replace-color');
|
|
const { escapeXML } = require('ejs');
|
|
const imageDataURI = require('image-data-uri');
|
|
|
|
module.exports.sendfile = (fileName, response) => {
|
|
const filePath = "./"+fileName;
|
|
fs.exists(filePath, function (exists) {
|
|
if (exists) {
|
|
response.writeHead(200, {
|
|
"Content-Type": "application/octet-stream",
|
|
"Content-Disposition": "attachment; filename=" + fileName
|
|
});
|
|
fs.createReadStream(filePath).pipe(response);
|
|
return;
|
|
}
|
|
response.writeHead(400, { "Content-Type": "text/plain" });
|
|
response.end("ERROR File does not exist");
|
|
});
|
|
}
|
|
|
|
module.exports.sid = (cook,res,callback,auto = true,admin_check = false)=>{
|
|
try {
|
|
let uuid = cook["uuid"];
|
|
let sid = cook["sid"];
|
|
if(cook["uuid"] != null && cook["sid"] != null){
|
|
db.ggv("sids","`uid`","sid",`'${sid}'`,(sdata)=>{ sdata = sdata[0]
|
|
// console.log(sdata);
|
|
if(sdata != null){
|
|
db.ggv("users","`uuid`,`id`, `admin`","id",`'${sdata["uid"]}'`,(udata)=>{ udata = udata[0]
|
|
if (udata != null && udata["id"] == sdata["uid"] && uuid == udata["uuid"]){
|
|
if (!admin_check) callback(true);
|
|
else if (admin_check && udata["admin"] != false){
|
|
db.gv("admins","uid",`'${udata["id"]}'`,(adata)=>{ adata = adata[0]
|
|
if(adata != null){
|
|
callback(adata["rights"],true);
|
|
}
|
|
else{
|
|
db.sv("users","admin","0","id",udata["id"],()=>{},true);
|
|
db.dl("admins","uid",udata["id"],()=>{},true);
|
|
if(auto) res.redirect('/');
|
|
else if(!auto) callback(false);
|
|
}
|
|
},true)
|
|
}
|
|
else{
|
|
db.sv("users","admin","0","id",udata["id"],()=>{},true);
|
|
db.dl("admins","uid",udata["id"],()=>{},true);
|
|
if(auto) res.redirect('/');
|
|
else if(!auto) callback(false);
|
|
}
|
|
}
|
|
else{
|
|
// if(auto) res.send({out:"bad",err:"wrong"});
|
|
if(auto) res.redirect("/");
|
|
else if(!auto) callback(false);
|
|
}
|
|
});
|
|
}
|
|
else{
|
|
// if(auto) res.send({out:"bad",err:"expired"});
|
|
if(auto) res.redirect("/");
|
|
else if(!auto) callback(false);
|
|
}
|
|
});
|
|
}else{
|
|
// if(auto) res.send({out:"bad",err:"nocr"});
|
|
if(auto) res.redirect("/");
|
|
else if(!auto) callback(false);
|
|
}
|
|
} catch (error) {
|
|
this.log("backend sid checking err0r - "+error);
|
|
}
|
|
}
|
|
|
|
module.exports.log = (message) =>{
|
|
message = message.replaceAll("'","*")
|
|
var date = moment().format('YYYY-MM-DD');
|
|
var time = moment().format('hh:mm:ss');
|
|
let clog = `${date}_${time}|${message}`;
|
|
console.log(clog);
|
|
// if(vars.log_to_file) fs.appendFile('./logs.txt', `${clog} \n`, function (err) {if (err) throw err;});
|
|
if(vars.log_to_db) db.nr("logs","`date`,`time`,`log`",`'${date}','${time}','${message}'`,true);
|
|
}
|
|
|
|
module.exports.logs_file = (res)=>{
|
|
let path = './logs.txt';
|
|
fs.exists(path, function(exists) {
|
|
if(exists) {
|
|
fs.unlink(path,function(err){
|
|
if(err) throw err;
|
|
write_logs(res);
|
|
});
|
|
} else {
|
|
write_logs(res);
|
|
}
|
|
});
|
|
|
|
function write_logs(res){
|
|
db.gav("logs","0",(db_logs)=>{
|
|
db_logs.forEach(log => {
|
|
let date = moment(log[`date_time`]).utc().format('YYYY-MM-DD');
|
|
fs.appendFile(path, `${date}_${log["time"]}|${log["log"]} \n`, function (err) {
|
|
if (err) throw err;
|
|
if(log["id"] == db_logs.at(-1)["id"]){
|
|
res.download(path, (err) => {
|
|
if (err) { throw err; }
|
|
console.log("logs downloaded");
|
|
fs.unlink(path, (err) => {
|
|
if (err) { throw err; }
|
|
});
|
|
});
|
|
}
|
|
});
|
|
});
|
|
},true);
|
|
}
|
|
}
|
|
|
|
|
|
module.exports.get_uuid = (name = "/") =>{
|
|
// if (name != "/") name = this.encrypt(name,"name");
|
|
let unid = uuid.v4() + '%%'+name+'#e'+(621);
|
|
return unid;
|
|
}
|
|
|
|
module.exports.encrypt = (text,cipher) => {
|
|
// return bcrypt.hashSync(password,bcrypt.genSaltSync());
|
|
return cryptojs.AES.encrypt(text,cipher).toString();
|
|
}
|
|
|
|
module.exports.decrypt = (text,cipher) =>{
|
|
const en = cryptojs.AES.decrypt(text,cipher);
|
|
const de = en.toString(cryptojs.enc.Utf8);
|
|
// console.log(de + "-dec");
|
|
return de;
|
|
}
|
|
|
|
|
|
module.exports.img_recolor = (res,image,color) => {
|
|
// console.log(color);
|
|
image = `public/${image}`
|
|
let name = image.split("/").at(-2);
|
|
if (fs.existsSync(`public/img/object/${name}/colored/${color}.png`)) {
|
|
res.send(`/img/object/${name}/colored/${color}.png`)
|
|
}
|
|
else{
|
|
replaceColor({
|
|
image: image,
|
|
colors: {
|
|
type: 'hex',
|
|
targetColor: "#FFFFFF",
|
|
replaceColor: `#${color}`
|
|
},
|
|
deltaE: 10
|
|
})
|
|
.then((jimpObject) => {
|
|
if (!fs.existsSync(`public/img/object/${name}`)){fs.mkdirSync(`public/img/object/${name}`)}
|
|
jimpObject.write(`public/img/object/${name}/colored/${color}.png`, (err) => {
|
|
if (err) return console.log(err)
|
|
else{
|
|
imageDataURI.encodeFromFile(`public/img/object/${name}/colored/${color}.png`)
|
|
.then(data => {
|
|
res.send(data)
|
|
})
|
|
}
|
|
})
|
|
})
|
|
.catch((err) => {
|
|
console.log(err)
|
|
})
|
|
}
|
|
}
|