added multiple language support

This commit is contained in:
N0rdye 2023-07-06 17:13:59 +05:00
parent 1f5085490f
commit c25bd2e274
16 changed files with 605 additions and 350 deletions

36
db.js
View File

@ -12,7 +12,7 @@ logcon.connect();
// check_for
module.exports.cv = (table,key,value,callback) => {
logcon.query('SELECT * FROM `'+table+'`', (err, rows, fields) => {
logcon.query(`SELECT * FROM ${table}`, (err, rows, fields) => {
let log = '';
if (err) {
console.log("sql err");
@ -57,7 +57,7 @@ module.exports.cv = (table,key,value,callback) => {
module.exports.dl = (table,key,value,callback) => {
// console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value);
logcon.query('DELETE FROM `'+table+'` WHERE `'+key+'` = '+value, (err, rows, fields) => {
logcon.query(`DELETE FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => {
if (err) {
console.log("sql err");
throw err;
@ -70,7 +70,19 @@ module.exports.dl = (table,key,value,callback) => {
// get_from
module.exports.gv = (table,key,value,callback) => {
// console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value);
logcon.query('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value, (err, rows, fields) => {
logcon.query(`SELECT * FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => {
if (err) {
console.log("sql err");
throw err;
}else{
callback(rows);
}
})
}
module.exports.gav = (table,callback) => {
// console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value);
logcon.query(`SELECT * FROM ${table} WHERE 1`, (err, rows, fields) => {
if (err) {
console.log("sql err");
throw err;
@ -83,7 +95,7 @@ module.exports.gv = (table,key,value,callback) => {
module.exports.ggv = (table,ekey,key,value,callback) => {
// console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value);
logcon.query('SELECT '+ekey+' FROM `'+table+'` WHERE `'+key+'` = '+value, (err, rows, fields) => {
logcon.query(`SELECT ${ekey} FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => {
if (err) {
console.log("sql err");
throw err;
@ -95,7 +107,7 @@ module.exports.ggv = (table,ekey,key,value,callback) => {
// set_in
module.exports.sv = (table,key,value,ekey,evalue,callback) => {
logcon.query("UPDATE `"+table+"` SET `"+key+"` = '"+value+"' WHERE `"+ekey+"` = '"+evalue+"'", (err , rows) => {
logcon.query(`UPDATE ${table} SET ${key} = '${value}' WHERE ${ekey} = '${evalue}'`, (err , rows) => {
// console.log("UPDATE `"+table+"` SET `"+key+"` = '"+value+"' WHERE `"+ekey+"` = '"+evalue+"'");
if (err) {
console.log("sql err");
@ -108,7 +120,7 @@ module.exports.sv = (table,key,value,ekey,evalue,callback) => {
module.exports.nr = (table,keys,values) =>{
// console.log('INSERT INTO `'+table+'`('+keys+') VALUES ('+values+')');
logcon.query('INSERT INTO `'+table+'`('+keys+') VALUES ('+values+')',(err,res) =>{
logcon.query(`INSERT INTO ${table} (${keys}) VALUES (${values})`,(err,res) =>{
if (err) {
console.log("sql err");
throw err;
@ -117,3 +129,15 @@ module.exports.nr = (table,keys,values) =>{
}
})
}
module.exports.glv = (table,last_value,callback) =>{
// console.log('INSERT INTO `'+table+'`('+keys+') VALUES ('+values+')');
logcon.query(`SELECT * FROM ${table} ORDER BY ${last_value} DESC LIMIT 1;`,(err,res) =>{
if (err) {
console.log("sql err");
throw err;
}else{
callback(res);
}
})
}

100
func.js
View File

@ -9,7 +9,7 @@ const moment = require("moment");
const vars = require('./vars');
module.exports.sendfile = (fileName, response) => {
const filePath = "./files/"+fileName;
const filePath = "./"+fileName;
fs.exists(filePath, function (exists) {
if (exists) {
response.writeHead(200, {
@ -49,38 +49,80 @@ module.exports.sendfile = (fileName, response) => {
// }
module.exports.sid = (cook,res,callback,auto = true)=>{
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`","id",`'${sdata["uid"]}'`,(udata)=>{ udata = udata[0]
if (udata != null && udata["id"] == sdata["uid"] && uuid == udata["uuid"]){
callback(true);
}
else{
if(auto) res.send({out:"bad",err:"wrong"});
if(!auto) callback(false);
}
});
}
else{
if(auto) res.send({out:"bad",err:"expired"});
if(!auto) callback(false);
}
});
}else{
if(auto) res.send({out:"bad",err:"nocr"});
if(!auto) callback(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`","id",`'${sdata["uid"]}'`,(udata)=>{ udata = udata[0]
if (udata != null && udata["id"] == sdata["uid"] && uuid == udata["uuid"]){
callback(true);
}
else{
if(auto) res.send({out:"bad",err:"wrong"});
if(!auto) callback(false);
}
});
}
else{
if(auto) res.send({out:"bad",err:"expired"});
if(!auto) callback(false);
}
});
}else{
if(auto) res.send({out:"bad",err:"nocr"});
if(!auto) callback(false);
}
} catch (error) {
this.log("backend sid checking err0r - "+error);
}
}
module.exports.log = (message) =>{
var date = moment().format('YYYY-MM-DD')
var time = moment().format('hh:mm:ss')
console.log(`${date}_${time}|${message}`);
db.nr("logs","`date`,`time`,`log`",`'${date}','${time}','${message}'`);
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}'`);
}
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",(db_logs)=>{
db.glv(`logs`,`id`,(last)=>{last = last[0];
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"] == last["id"]-1){
res.download(path, (err) => {
if (err) { throw err; }
console.log("logs downloaded");
fs.unlink(path, (err) => {
if (err) { throw err; }
});
});
}
});
});
})
});
}
}

159
index.js
View File

@ -37,96 +37,149 @@ app.use(cookieParser());
app.post('/back_login', (req, res) => {
let inp = req.body;
let cook = req.cookies;
user.login(inp,cook,res);
try {
let inp = req.body;
let cook = req.cookies;
user.login(inp,cook,res);
} catch (error) {
func.log("router login error - "+error);
}
});
app.post('/reg_user', (req, res) => {
let inp = req.body;
let cook = req.cookies;
user.reg(inp,cook,res)
try{
let inp = req.body;
let cook = req.cookies;
user.reg(inp,cook,res)
} catch (error) {
func.log("router registration error - "+error);
}
})
app.post("/sid_log",(req,res) =>{
let inp = req.body;
let cook = req.cookies;
user.sid_log(inp,cook,res,req);
try{
let inp = req.body;
let cook = req.cookies;
user.sid_log(inp,cook,res,req);
} catch (error) {
func.log("router sid logging in error - "+error);
}
})
app.post("/get_sid" , (req,res) =>{
let inp = req.body;
let sid = func.get_uuid();
res.cookie("sid",sid,{maxAge:(vars.week),path:"/;SameSite=Strict"});
res.send({out:"good"});
try{
let inp = req.body;
let sid = func.get_uuid();
res.cookie("sid",sid,{maxAge:(vars.week),path:"/;SameSite=Strict"});
res.send({out:"good"});
} catch (error) {
func.log("router sid getting error - "+error);
}
});
app.post("/clear_sid" , (req,res) =>{
let inp = req.body;
let cook = req.cookies;
user.clear_sid(inp,cook,res);
try{
let inp = req.body;
let cook = req.cookies;
user.clear_sid(inp,cook,res);
} catch (error) {
func.log("router sid clearing error - "+error);
}
});
app.post("/get_cr_uuid", (req,res) => {
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
user.get_cr(inp,cook,res);
})
try{
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
user.get_cr(inp,cook,res);
})
} catch (error) {
func.log("router getting user information by uuid error - "+error);
}
})
app.post("/save_proj", (req,res) => {
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
proj.save(inp,cook,res);
})
try{
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
proj.save(inp,cook,res);
})
} catch (error) {
func.log("router project saving error - "+error);
}
})
app.post("/load_proj", (req,res) => {
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
proj.load(inp,cook,res);
})
try{
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
proj.load(inp,cook,res);
})
} catch (error) {
func.log("router project loading error - "+error);
}
})
app.post("/get_projs", (req,res) => {
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
proj.loads(inp,cook,res);
})
try{
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
proj.loads(inp,cook,res);
})
} catch (error) {
func.log("router user projects getting error - "+error);
}
})
app.post("/new_obj", (req,res) => {
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
obj.new(inp,cook,res);
})
try{
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
obj.new(inp,cook,res);
})
} catch (error) {
func.log("router object creating error - "+error);
}
})
app.post("/get_objs", (req,res) => {
let inp = req.body;
let cook = req.cookies;
// func.log(inp["name"]);
func.sid(cook,res,()=>{
obj.loads(inp,cook,res);
})
try{
let inp = req.body;
let cook = req.cookies;
// func.log(inp["name"]);
func.sid(cook,res,()=>{
obj.loads(inp,cook,res);
})
} catch (error) {
func.log("router objects getting error - "+error);
}
})
app.post("/get_obj", (req,res) => {
let inp = req.body;
let cook = req.cookies;
// func.log(inp["name"]);
func.sid(cook,res,()=>{
obj.load(inp,cook,res);
})
try{
let inp = req.body;
let cook = req.cookies;
// func.log(inp["name"]);
func.sid(cook,res,()=>{
obj.load(inp,cook,res);
})
} catch (error) {
func.log("router single object getting error - "+error);
}
})
app.get("/get_logs", (req,res) => {
try{let cook = req.cookies;func.sid(cook,res,()=>{func.logs_file(res);})}
catch (error) {func.log("router logs download error - "+error);}
})
// pages
app.get("/reg" , (req,res) =>{
res.render('reg');

View File

@ -3,28 +3,40 @@ const func = require('./func');
const vars = require('./vars');
module.exports.loads = (inp,cook,res)=>{
db.ggv("objects","`name`,`id`,`height`,`width`,`description`","gid",0,(odata)=>{
// func.log(odata);
res.send({out:"good",body:odata});
})
try {
db.ggv("objects","`name`,`id`,`height`,`width`,`description`","gid",0,(odata)=>{
// func.log(odata);
res.send({out:"good",body:odata});
})
} catch (error) {
func.log("backend objects loading error - "+error);
}
}
module.exports.load = (inp,cook,res)=>{
let keys = inp["key"];
db.ggv("objects",keys,"name",`'${inp["name"]}'`,(odata)=>{
// func.log(odata);
res.send({out:"good",body:odata[0]});
})
try {
let keys = inp["key"];
db.ggv("objects",keys,"name",`'${inp["name"]}'`,(odata)=>{
// func.log(odata);
res.send({out:"good",body:odata[0]});
})
} catch (error) {
func.log("backend single object loading err0r - "+error);
}
}
module.exports.new = (inp,cook,res)=>{
db.cv("objects","name",inp["name"],(include)=>{
if(include){
res.send({out:"bad",err:"name"});
}
else if (!include){
db.nr("objects","`name`,`img`,`height`,`width`,`description`",`'${inp["name"]}','${inp["img"]}','${inp["height"]}','${inp["width"]}','${inp["desc"]}'`);
res.send({out:"good"});
}
})
try {
db.cv("objects","name",inp["name"],(include)=>{
if(include){
res.send({out:"bad",err:"name"});
}
else if (!include){
db.nr("objects","`name`,`img`,`height`,`width`,`description`",`'${inp["name"]}','${inp["img"]}','${inp["height"]}','${inp["width"]}','${inp["desc"]}'`);
res.send({out:"good"});
}
})
} catch (error) {
func.log("backend object creating error - "+error);
}
}

View File

@ -3,58 +3,70 @@ const func = require('./func');
const vars = require('./vars');
module.exports.load = (inp,cook,res)=>{
db.gv("users","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0];
db.gv("projects","uid",udata["id"],(pdata)=>{
let projt = null;
// func.log(inp["name"]);
pdata.forEach(proj => {
if(proj["name"] == inp["name"]){
projt = proj;
try {
db.gv("users","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0];
db.gv("projects","uid",udata["id"],(pdata)=>{
let projt = null;
// func.log(inp["name"]);
pdata.forEach(proj => {
if(proj["name"] == inp["name"]){
projt = proj;
}
})
if (projt != null){
func.log(`good boy ${udata["uuid"]} loaded project ${projt["name"]} from ${cook["sid"]}`);
res.send({out:"good",body:projt["body"]});
}
else{
res.send({out:"bad proj"});
}
})
if (projt != null){
func.log(`good boy ${udata["uuid"]} loaded project ${projt["name"]} from ${cook["sid"]}`);
res.send({out:"good",body:projt["body"]});
}
else{
res.send({out:"bad proj"});
}
})
})
} catch (error) {
func.log("backend project loading error - ");
}
}
module.exports.loads = (inp,cook,res)=>{
db.ggv("users","`id`","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0];
db.gv("projects","uid",udata["id"],(pdata)=>{
res.send({out:"good",body:pdata});
try {
db.ggv("users","`id`","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0];
db.gv("projects","uid",udata["id"],(pdata)=>{
res.send({out:"good",body:pdata});
})
})
})
} catch (error) {
func.log("backend projects loading err0r - " - error);
}
}
module.exports.save = (inp,cook,res)=>{
db.gv("users","uuid",`'${cook["uuid"]}'`, (udata)=>{ udata = udata[0]
db.gv("projects","uid",udata["id"],(pdata)=>{
let projin = null;
// func.log(pdata);
pdata.forEach(projt => {
if(projt["name"] == inp["name"] && projt["uid"] == udata["id"]){
projin = projt;
return;
try {
db.gv("users","uuid",`'${cook["uuid"]}'`, (udata)=>{ udata = udata[0]
db.gv("projects","uid",udata["id"],(pdata)=>{
let projin = null;
// func.log(pdata);
pdata.forEach(projt => {
if(projt["name"] == inp["name"] && projt["uid"] == udata["id"]){
projin = projt;
return;
}
})
if(projin == null){
// func.log("proj not in");
// func.log(pname,udata["id"],proj);
func.log(`good boy ${udata["uuid"]} created project ${inp["name"]} from ${cook["sid"]}`);
db.nr("projects","`uid`,`name`,`body`,`img`",`'${udata["id"]}','${inp["name"]}','${inp["proj"]}','${inp["img"]}'`);
res.send({out:"good"});
} else if (projin != null){
db.sv("projects","body",inp["proj"],"id",projin["id"],()=>{});
if(inp["img"] != "") db.sv("projects","img",inp["img"],"id",projin["id"],()=>{});
func.log(`good boy ${udata["uuid"]} saved project ${projin["name"]} from ${cook["sid"]}`);
// func.log("proj in");
res.send({out:"good"});
}
})
if(projin == null){
// func.log("proj not in");
// func.log(pname,udata["id"],proj);
func.log(`good boy ${udata["uuid"]} created project ${inp["name"]} from ${cook["sid"]}`);
db.nr("projects","`uid`,`name`,`body`,`img`",`'${udata["id"]}','${inp["name"]}','${inp["proj"]}','${inp["img"]}'`);
res.send({out:"good"});
} else if (projin != null){
db.sv("projects","body",inp["proj"],"id",projin["id"],()=>{});
if(inp["img"] != "") db.sv("projects","img",inp["img"],"id",projin["id"],()=>{});
func.log(`good boy ${udata["uuid"]} saved project ${projin["name"]} from ${cook["sid"]}`);
// func.log("proj in");
res.send({out:"good"});
}
})
})
} catch (error) {
func.log("backend project saving err0r - "+error);
}
}

View File

@ -36,23 +36,23 @@ function clear_ck(redirect = true){
let sid = $.cookie("sid");
$.removeCookie("uuid");
$.removeCookie('sid');
console.log("sid");
// console.log("sid");
setTimeout(()=>{
$.post( "/clear_sid",{uuid:uuid,sid:sid})
.done(function( res ) {
console.log("sid");
// console.log("sid");
if(res["out"] == "good"){
// get_sid();
if (redirect) goto("/login");
}
console.log("clear");
// console.log("clear");
})
},100)
}
function check_sid(redirect = true){
console.log("checking sid");
// console.log("checking sid");
if($.cookie('sid') == null || $.cookie('uuid') == null){
clear_ck(redirect);
}

View File

@ -40,7 +40,7 @@ function create(clas,x,y,body,id,size){
}
else if (db_data != null){
obj.src = img;
obj.title = `${db_data["name"]}\n${db_data["description"]}\nwidth:${db_data["width"]}см height:${db_data["height"]}см`;
obj.title = `${db_data["name"]}\n${db_data["description"]}\n${lang("width")}:${db_data["width"]}см ${lang("height")}:${db_data["height"]}см`;
// drag.transform = `translate(${drag.getAttribute("data-y")}px, ${drag.getAttribute("data-y")}px) scale(${db_data["width"] * 2} ${db_data["height"] * 2})`;
if(size){
obj.style.width = `${db_data["width"] * 2}px`;
@ -114,7 +114,7 @@ function load(objss){
function load_proj_cloud(){
document.getElementById("drags").innerHTML = "";
document.getElementById("top_panel_center").innerText = `loading ${proj_name} from cloud`;
document.getElementById("top_panel_center").innerText = `${lang("loading")} ${proj_name} ${lang("from")} ${lang("cloud")}`;
$.post( "/load_proj",{name:proj_name})
.done(function( res ) {
if(res["out"] == "good"){
@ -123,7 +123,7 @@ function load_proj_cloud(){
// console.log(JSON.parse(res["body"]));
// $.cookie("objs",res["body"]);
load(JSON.parse(res["body"]));
document.getElementById("top_panel_center").innerText = `${proj_name} (cloud)`;
document.getElementById("top_panel_center").innerText = `${proj_name} (${lang("cloud")})`;
}
else if(res["out"] == "bad proj"){
console.log("bad");
@ -139,7 +139,7 @@ function load_proj_local(){
if(localStorage.getItem(proj_name) == null){
save_local()
}
document.getElementById("top_panel_center").innerText = `${proj_name} (local)`;
document.getElementById("top_panel_center").innerText = `${proj_name} (${lang("local")})`;
document.getElementById("drags").innerHTML = "";
load(JSON.parse(localStorage.getItem(proj_name)));
}
@ -153,7 +153,7 @@ function save(callback){
// console.log(objs);
html2canvas(document.querySelector("body"),{height: document.getElementById("wall").style.height.split("p")[0], width:document.getElementById("wall").style.width.split("p")[0], y:document.getElementById("wall").getBoundingClientRect().top,x:document.getElementById("wall").getBoundingClientRect().left}).then(canvas => {
let scr = "";
console.log(canvas.toDataURL().length);
// console.log(canvas.toDataURL().length);
scr = canvas.toDataURL();
// if (canvas.toDataURL().length < 120000) scr = canvas.toDataURL()
// console.log(scr);
@ -161,7 +161,7 @@ function save(callback){
.done(function( res ) {
if(res["out"] == "good"){
// console.log(scr)
console.log("good");
// console.log("good");
if(callback) callback(res);
}
})
@ -232,10 +232,11 @@ interact('.trash').dropzone({
ondragenter: function (event) {
var drag = event.relatedTarget;
var zone = event.target;
delete objs[drag.classList[0]][drag.id];
drag.remove();
console.log(drag.classList);
if(objs[drag.classList[0]] != null&&objs[drag.classList[0]][drag.id] != null) delete objs[drag.classList[0]][drag.id];
zone.classList.add('drop-target');
drag.classList.add('can-drop');
drag.remove();
},
ondragleave: function (event) {var drag = event.relatedTarget;var zone = event.target;zone.classList.remove('drop-target');drag.classList.remove('in_zone');drag.classList.remove('can-drop');},
ondrop: function (event) {

226
user.js
View File

@ -3,131 +3,151 @@ const func = require('./func');
const vars = require('./vars');
module.exports.login = (inp,cook,res)=>{
let ilogin = func.decrypt(inp["login"],inp["sid"]);
let ipass = func.decrypt(inp["pass"],inp["sid"]);
try{
let ilogin = func.decrypt(inp["login"],inp["sid"]);
let ipass = func.decrypt(inp["pass"],inp["sid"]);
db.cv("users","login",ilogin,(login) => {
if(login == null){
res.status(210).send({out:"bad", err:"user"});
}
else if (login != null){
db.gv("users","login",`'${ilogin}'`,(udata)=>{udata = udata[0];
db.ggv("sids","`sid`","uid",udata["id"],(sdata)=>{sdata = sdata[0];
// console.log(sdata);
if(ipass == udata["pass"]){
if (sdata != null){
// res.send({out:"logged",sid:sdata["sid"]});
// console.log(sdata);
db.dl("sids","uid",`'${udata["id"]}'`,() =>{});
db.cv("users","login",ilogin,(login) => {
if(login == null){
res.status(210).send({out:"bad", err:"user"});
}
else if (login != null){
db.gv("users","login",`'${ilogin}'`,(udata)=>{udata = udata[0];
db.ggv("sids","`sid`","uid",udata["id"],(sdata)=>{sdata = sdata[0];
// console.log(sdata);
if(ipass == udata["pass"]){
if (sdata != null){
// res.send({out:"logged",sid:sdata["sid"]});
// console.log(sdata);
db.dl("sids","uid",`'${udata["id"]}'`,() =>{});
}
func.log("good boy "+udata["uuid"]+" logged in by login & pass from "+cook["sid"]);
res.cookie("uuid",udata["uuid"],{maxAge:vars.week,path:"/;SameSite=Strict"});
// db.sv("users","sids",sids += inp["sid"]+";","uuid",udata["uuid"],()=>{});
db.nr("sids",'`sid`,`uid`',`'${cook["sid"]}','${udata["id"]}'`);
res.send({out:"goto",url:"/main"});
}
else{
res.status(210).send({out:"bad", err:"pass"});
}
func.log("good boy "+udata["uuid"]+" logged in by login & pass from "+cook["sid"]);
res.cookie("uuid",udata["uuid"],{maxAge:vars.week,path:"/;SameSite=Strict"});
// db.sv("users","sids",sids += inp["sid"]+";","uuid",udata["uuid"],()=>{});
db.nr("sids",'`sid`,`uid`',`'${cook["sid"]}','${udata["id"]}'`);
res.send({out:"goto",url:"/main"});
}
else{
res.status(210).send({out:"bad", err:"pass"});
}
})
});
}
})
})
});
}
})
} catch(error){
func.log("backend user logging in error - "+error);
}
// res.send("good");
}
module.exports.reg = (inp,cook,res)=>{
let uuid = func.get_uuid(inp["login"]);
let admin = inp["admin"];
let pass = inp["pass"];
let login = inp["login"];
check_db();
function check_db() {
db.cv("users","login",inp["login"], (ldata)=>{
db.cv("users","login",inp["uuid"],(udata) =>{
// func.log("/reg_user same login recs = "+ldata);
// func.log("/reg_user same uuid recs = "+udata);
if(udata==null && ldata==null){
good_reg();
// func.log("/reg_user good reg");
func.log(`good boy ${uuid} registered user ${login} with uuid = ${uuid} admin = ${admin}`);
try {
let uuid = func.get_uuid(inp["login"]);
let admin = inp["admin"];
let pass = inp["pass"];
let login = inp["login"];
check_db();
function check_db() {
db.cv("users","login",inp["login"], (ldata)=>{
db.cv("users","login",inp["uuid"],(udata) =>{
// func.log("/reg_user same login recs = "+ldata);
// func.log("/reg_user same uuid recs = "+udata);
if(udata==null && ldata==null){
good_reg();
// func.log("/reg_user good reg");
func.log(`good boy ${uuid} registered user ${login} with uuid = ${uuid} admin = ${admin}`);
}
else if(udata!=null){
uuid = func.get_uuid(inp["login"]);
check_db();
// res.send({out:"bad", body:"uuid"});
}
else if (ldata != null){
func.log(`bad boy ${uuid} tried to register user ${login} with uuid = ${uuid} admin = ${admin} but login in use`);
res.send({out:"bad", body:"login"});
return;
}
})
})
}
function good_reg(){
db.nr("users",'`login`,`pass`,`uuid`,`admin`',`'${login}','${pass}','${uuid}',${admin}`);
if (admin){
db.ggv("users","`id`","uuid",`'${uuid}'`,(udata)=>{ udata = udata[0]
db.nr("admins",'`login`,`uid`',`'${login}',${udata["id"]}`);
}
else if(udata!=null){
uuid = func.get_uuid(inp["login"]);
check_db();
// res.send({out:"bad", body:"uuid"});
}
else if (ldata != null){
func.log(`bad boy ${uuid} tried to register user ${login} with uuid = ${uuid} admin = ${admin} but login in use`);
res.send({out:"bad", body:"login"});
return;
}
})
})
}
res.send({out:"good", body:{uuid:uuid,login:login,admin:admin}});
function good_reg(){
db.nr("users",'`login`,`pass`,`uuid`,`admin`',`'${login}','${pass}','${uuid}',${admin}`);
if (admin){
db.ggv("users","`id`","uuid",`'${uuid}'`,(udata)=>{ udata = udata[0]
db.nr("admins",'`login`,`uid`',`'${login}',${udata["id"]}`);
})
}
res.send({out:"good", body:{uuid:uuid,login:login,admin:admin}});
}
} catch (error) {
func.log("backend user registration error - "+error);
}
}
module.exports.get_cr = (inp,cook,res)=>{
db.ggv("users","`login`,`admin`,`id`","uuid",`"${inp["uuid"]}"`,(udata)=>{udata = udata[0];
// delete re["sids"];
if(udata != null){
res.send({out:"good",body:udata});
}else{
res.send({out:"bad"});
}
});
try {
db.ggv("users","`login`,`admin`,`id`","uuid",`"${inp["uuid"]}"`,(udata)=>{udata = udata[0];
// delete re["sids"];
if(udata != null){
res.send({out:"good",body:udata});
}else{
res.send({out:"bad"});
}
});
} catch (error) {
func.log("backend user information pulling error - "+error);
}
}
module.exports.clear_sid = (inp,cook,res)=>{
if(inp["sid"] != null){
// res.send({out:"good"});
db.dl("sids","sid",`'${inp["sid"]}'`,() =>{
func.log("good boy "+inp["uuid"] + " logged out from "+inp["sid"]);
});
// db.ggv("sids","id","sid",`'${cook["sid"]}'`,(sids)=>{
// Object.entries(sids).forEach(([key,value])=>{
// db.dl("sids","id",`'${value["id"]}'`,() =>{});
// })
// })
}
else if(inp["uuid"] != null){
// res.send({out:"good"});
db.ggv("users","id","uuid",`'${inp["uuid"]}'`,(udata)=>{udata = udata[0]
db.dl("sids","uid",`'${udata["id"]}'`,() =>{
try {
if(inp["sid"] != null){
// res.send({out:"good"});
db.dl("sids","sid",`'${inp["sid"]}'`,() =>{
func.log("good boy "+inp["uuid"] + " logged out from "+inp["sid"]);
});
// db.ggv("sids","id","uid",`'${udata["id"]}'`,(sids)=>{
// Object.entries(sids).forEach(([key,value])=>{
// db.dl("sids","id",`'${value["id"]}'`,() =>{});
// })
// })
});
// db.ggv("sids","id","sid",`'${cook["sid"]}'`,(sids)=>{
// Object.entries(sids).forEach(([key,value])=>{
// db.dl("sids","id",`'${value["id"]}'`,() =>{});
// })
// })
}
else if(inp["uuid"] != null){
// res.send({out:"good"});
db.ggv("users","id","uuid",`'${inp["uuid"]}'`,(udata)=>{udata = udata[0]
db.dl("sids","uid",`'${udata["id"]}'`,() =>{
func.log("good boy "+inp["uuid"] + " logged out from "+inp["sid"]);
});
// db.ggv("sids","id","uid",`'${udata["id"]}'`,(sids)=>{
// Object.entries(sids).forEach(([key,value])=>{
// db.dl("sids","id",`'${value["id"]}'`,() =>{});
// })
// })
});
}
res.send({out:"good"});
} catch (error) {
func.log("backend user sid clearing error -"+error);
}
res.send({out:"good"});
}
module.exports.sid_log=(inp,cook,res,req)=>{
func.sid(cook,res,(include) => {
if (include){
res.send({out:"good",url:"/main"});
if(req.headers.referer.split("http://n0rsrv2:3002/")[1] == "login") func.log("good boy "+ id["uuid"]+" logged in by sid logs from " + id["sid"]);
}
else if (!include){
res.send({out:"bad"});
if(req.headers.referer.split("http://n0rsrv2:3002/")[1] == "login") func.log("bad boy "+ id["uuid"]+" tried to login by sid but sid expired from " + id["sid"]);
}
},false)
try {
func.sid(cook,res,(include) => {
if (include){
res.send({out:"good",url:"/main"});
if(req.headers.referer.split("http://n0rsrv2:3002/")[1] == "login") func.log("good boy "+ id["uuid"]+" logged in by sid logs from " + id["sid"]);
}
else if (!include){
res.send({out:"bad"});
if(req.headers.referer.split("http://n0rsrv2:3002/")[1] == "login") func.log("bad boy "+ id["uuid"]+" tried to login by sid but sid expired from " + id["sid"]);
}
},false)
} catch (error) {
func.log("backend user sid logging error - "+error);
}
}

View File

@ -1 +1,3 @@
module.exports.week = 7 * 24 * 3600 * 1000;
module.exports.log_to_file = true;
module.exports.log_to_db = true;

View File

@ -18,14 +18,12 @@
height: 200px;
width: 200px;
}
</style>
<style>
.main_sec{
margin: auto;
/* display: flex; */
text-align: center;
}
#reg_form{
section{
width: 80vw;
margin: auto;
}
@ -34,61 +32,69 @@
<%- include('./static/start.ejs',{name:"admin",async: true}) %>
<%- include('./header.ejs') %>
<section class="main">
<h1>hello admin</h1>
<h1 style="text-align: center;"><%= lang("hello admin") %></h1> <br>
<section>
<h1><%= lang("create new object") %></h1>
<div class="nobj">
<div>
<div class="img_preview">
<label for="img_file">max size 2mb</label><br>
<label for="img_file"><%= lang("img max size") %></label><br>
<input type="file" id="img_file" onchange="previewFile()" accept="image/*" value="" maxlength="1"><br>
</div>
<div style="width: 200px; height: 200px;">
<img src="" id="img_prev" height="100" alt="Image preview...">
<img src="" id="img_prev" height="100" alt="<%= lang('Image preview') %>">
</div>
</div>
<textarea name="" id="nobj_description" cols="30" rows="5" placeholder="object description"></textarea>
<div>
<div class="nobj_options">
<input type="text" id="nobj_name" placeholder="object name">
<button onclick="create_obj()">create object</button>
<div id="obj_resp"></div>
</div>
<div id="obj_input">
<div>
<div style="display: flex;width: 150px;justify-content: space-between;">
<label for="obj_height">height </label>
<div id="obj_height_value">100см</div>
<textarea id="nobj_description" cols="30" rows="5" placeholder="<%= lang("object description") %>"></textarea>
<div>
<div class="nobj_options">
<input type="text" id="nobj_name" placeholder="<%= lang("object name") %>">
<button onclick="create_obj()"><%= lang("create object")%></button>
<div id="obj_resp"></div>
</div>
<div id="obj_input">
<div>
<div style="display: flex;width: 100%;justify-content: space-between;">
<label for="obj_height"><%= lang("height") %> </label>
<div id="obj_height_value">100см</div>
</div>
<input style="width: 100%;" type="range" step="0.5" min="1" max="100" id="obj_height" value="100" oninput="obj_size_change('height')">
</div>
<input type="range" step="0.1" min="1" max="100" id="obj_height" value="100" oninput="obj_size_change('height')">
</div>
<div>
<div style="display: flex;width: 150px;justify-content: space-between;">
<label for="obj_width">width</label>
<div id="obj_width_value">100см</div>
<div>
<div style="display: flex;width: 100%;justify-content: space-between;">
<label for="obj_width"><%= lang("width") %></label>
<div id="obj_width_value">100см</div>
</div>
<input style="width: 100%;" type="range" step="0.5" min="1" max="100" id="obj_width" value="100" oninput="obj_size_change('width')">
</div>
<input type="range" step="0.1" min="1" max="100" id="obj_width" value="100" oninput="obj_size_change('width')">
</div>
</div>
</div>
</div>
</section>
<form action="" method="get" onsubmit="return false;" id="reg_form">
<h1>user registration</h1>
<section class="main_sec">
<section>
<h1><%= lang("user registration") %></h1>
<div class="main_sec">
<div>
<input type="text" id="login" name="login" placeholder="login">
<input type="password" id="pass" name="pass" placeholder="password">
<button onclick='reg();'>reg</button>
<input type="text" id="login" name="login" placeholder="<%= lang("login") %>">
<input type="password" id="pass" name="pass" placeholder="<%= lang("password") %>">
<button onclick='reg();'><%= lang("register") %></button>
</div>
<div>
<label for="admin_check">admin</label>
<label for="admin_check"><%= lang("admin") %></label>
<input type="checkbox" name="admin" value='false' id="admin_check">
</div>
<div id="reg_response"></div>
</section>
</form>
</div>
</section>
<section style="display: flex; justify-content: space-between;">
<h1><%= lang("logs") %></h1> <br>
<div class="logs_div" style="margin: auto 0px;display: flex;">
<button onclick="goto('/get_logs');"><%= lang("download logs") %></button>
</div>
</section>
<%- include('./static/end.ejs') %>

View File

@ -44,7 +44,11 @@
border: 1px black solid;
}
</style>
<script>
"<%- include('./static/language.ejs') %>"
let language = JSON.parse('<%= lang_json() %>'.replaceAll("&#34;",'"'));
lang = (text)=>{return language["<%= cur_lang %>"][text]}
</script>
<header id="top_panel">
<!-- <div id="user_name"></div> -->
@ -56,8 +60,6 @@
</header>
<div id="user_menu" class="cmenu"></div>
<script>get_from_uuid((res)=>{
let uname = document.getElementById("user_name");
let menu = document.getElementById("user_menu");
@ -65,26 +67,26 @@
let right = document.getElementById("top_panel_right");
let left = document.getElementById("top_panel_left");
if(document.title != "main") menu.innerHTML += `<button onclick="goto('/');">main page</button> <br>`;
if(document.title != "main") menu.innerHTML += `<button onclick="goto('/');"><%= lang("main page") %></button> <br>`;
right.innerHTML += `<div id="user_name" class="menu_btn">${res["login"]}</div>`;
if (res["admin"] == true){
menu.innerHTML += `<button onclick='goto("/admin")'>admin panel</button><br>`;
menu.innerHTML += `<button onclick='goto("/admin")'><%= lang("admin panel") %></button><br>`;
}
menu.innerHTML += "<button onclick='logout();'>logout</button><br>";
menu.innerHTML += "<button onclick='logout();'><%= lang('logout') %></button><br>";
});
onclick = (e) => {
e.preventDefault()
// e.preventDefault()
// console.log(e);
// console.log(document.getElementById(e.target.id).parentElement);
if(e.target.onclick != null){
if(document.title == "login"){
console.log(document.title);
// console.log(document.title);
log_by_sid();
}else if(document.title != "login"){
check_sid(true);
console.log("check");
// console.log("check");
}
}
if(e.target.id == "user_name"){

View File

@ -45,7 +45,7 @@
<!-- <script src="/lib/interact.min.js"></script> -->
<section class="main">
<button onclick="new_proj()">new project</button>
<button onclick="new_proj()"><%= lang("new project") %></button>
<div id="projs_div"></div>
</section>
@ -72,7 +72,7 @@
projs.forEach(proj => {
// console.log(proj);
let div = document.getElementById("projs_div");
div.innerHTML += `<button id='proj_${proj["name"]}' class='proj' onclick="goto('/proj/${proj["name"]}')"><img height="200" width="290" src='${proj["img"]}' alt='${proj["name"]}'></img> <br>${proj["name"]}</button>`;
div.innerHTML += `<button id='proj_${proj["name"]}' class='proj' onclick="goto('/proj/${proj["name"]}')">${proj["name"]}<br><img height="200" width="290" src='${proj["img"]}' alt='${proj["name"]}'></img></button>`;
});
});
</script>

View File

@ -108,11 +108,10 @@
</style>
<%- include('./static/start.ejs',{name:proj_name,async: true}) %>
<%- include('./header.ejs') %>
<%- include('./header.ejs',{async: true}) %>
<script src="/lib/interact.js"></script>
<script src="/lib/html2canvas.js"></script>
<div id="drags">
<!-- <div class="cube drag spawn" id="cube_0" style="transform: translate(197.7px, 57.8667px);" data-x="197.6999969482422" data-y="57.866668701171875" >cube</div> -->
</div>
@ -126,32 +125,21 @@
<div id="wall_input">
<div>
<div style="display: flex;width: 150px;justify-content: space-between;">
<label for="wall_height">height </label>
<label for="wall_height"><%= lang("height") %> </label>
<div id="wall_height_value">0</div>
</div>
<input type="range" step="0.1" min="0" max="5" id="wall_height" value="2" oninput="wall_size_change('height')">
</div>
<div>
<div style="display: flex;width: 150px;justify-content: space-between;">
<label for="wall_width">width</label>
<label for="wall_width"><%= lang("width") %></label>
<div id="wall_width_value">0</div>
</div>
<input type="range" step="0.1" min="0" max="7" id="wall_width" value="4" oninput="wall_size_change('width')" onchange="resize_drags()">
</div>
</div>
<div class="czones">
<!-- <div class="cube createzone"></div>
<div class="buble createzone"></div>
<div class="buble createzone"></div>
<div class="buble createzone"></div>
<div class="buble createzone"></div>
<div class="buble createzone"></div>
<div class="buble createzone"></div>
<div class="buble createzone"></div>
<div class="buble createzone"></div>
<div class="buble createzone"></div> -->
</div>
<img class="trash" style="height: 100px; width: 100px;" src="/img/shadow-energy.gif" alt="black hole">
<div class="czones"></div>
<img class="trash" style="height: 100px; width: 100px;" src="/img/shadow-energy.gif" alt="<%= lang('black hole') %>">
</div>
<div class="wall dropzone" id="wall"></div>
@ -196,37 +184,37 @@
if($.cookie("cache") ==null)$.cookie("cache","true",{path:"/proj;SameSite=Strict"});
// console.log(proj_name);
let menu = document.getElementById("project_menu");
document.getElementById("top_panel_left").innerHTML = `<div id='proj_menu' class="menu_btn">file</div>`;
menu.innerHTML += "<button id='proj_csave_btn' onclick='save_proj()'>save to cloud</button> <br>";
menu.innerHTML += "<button id='proj_cload_btn' onclick='load_proj_cloud()'>load from cloud</button> <br>";
menu.innerHTML += "<button id='proj_lsave_btn' onclick='save_proj_local()'>save to local storage</button> <br>";
menu.innerHTML += "<button id='proj_lload_btn' onclick='load_proj_local()'>load from local storage</button> <br>";
if ($.cookie("cache") == "false") menu.innerHTML += "<div id='cache_switch' title='if its on browser will stop large data in local storage (better performance)'><button onclick='cache_change(true);'>cache is off</button></div>";
else if ($.cookie("cache") == "true") menu.innerHTML += "<div id='cache_switch' title='if its on browser will stop large data in local storage (better performance)'><button onclick='cache_change(false);'>cache is on</button></div>";
document.getElementById("top_panel_left").innerHTML = `<div id='proj_menu' class="menu_btn"><%= lang("project settings") %></div>`;
menu.innerHTML += "<button id='proj_csave_btn' onclick='save_proj()'><%= lang(`save to cloud`) %></button> <br>";
menu.innerHTML += "<button id='proj_cload_btn' onclick='load_proj_cloud()'><%=lang('load from cloud')%></button> <br>";
menu.innerHTML += "<button id='proj_lsave_btn' onclick='save_proj_local()'><%=lang('save to local') %></button> <br>";
menu.innerHTML += "<button id='proj_lload_btn' onclick='load_proj_local()'><%=lang('load from local')%></button> <br>";
if ($.cookie("cache") == "false") menu.innerHTML += "<div id='cache_switch' title='<%=lang('cache_title')%>'><button onclick='cache_change(true);'><%=lang('cache_off')%></button></div>";
else if ($.cookie("cache") == "true") menu.innerHTML += "<div id='cache_switch' title='<%=lang('cache_title')%>'><button onclick='cache_change(false);'><%=lang('cache_on')%></button></div>";
function cache_change(to){
let cache_switch = document.getElementById("cache_switch");
if(to) {cache_switch.innerHTML = "<button onclick='cache_change(false);' title='if its on browser will stop large data in local storage (better performance)'>cache is on</button></div>";$.cookie("cache","true",{path:"/proj;SameSite=Strict"});}
else if(!to) {cache_switch.innerHTML = "<button onclick='cache_change(true);' title='if its on browser will stop large data in local storage (better performance)'>cache is off</button></div>";$.cookie("cache","false",{path:"/proj;SameSite=Strict"});}
if(to) {cache_switch.innerHTML = "<button onclick='cache_change(false);' title='<%=lang('cache_title')%>'><%=lang('cache_on')%></button></div>";$.cookie("cache","true",{path:"/proj;SameSite=Strict"});}
else if(!to) {cache_switch.innerHTML = "<button onclick='cache_change(true);' title='<%=lang('cache_title')%>'><%=lang('cache_off')%></button></div>";$.cookie("cache","false",{path:"/proj;SameSite=Strict"});}
}
function save_proj(type){
document.getElementById('top_panel_center').innerHTML=`saving ${proj_name}`;
document.getElementById('top_panel_center').innerHTML=` <%=lang("saving")%> ${proj_name}`;
save((res)=>{
document.getElementById('top_panel_center').innerHTML=`saved ${proj_name} to cloud`;
document.getElementById('top_panel_center').innerHTML=`<%=lang("saved")%> ${proj_name} <%=lang("to cloud")%>`;
setTimeout((res)=>{
document.getElementById("top_panel_center").innerText = `${proj_name} (cloud)`;
document.getElementById("top_panel_center").innerText = `${proj_name} (<%=lang("cloud")%>)`;
},3000)
})
}
function save_proj_local(type){
document.getElementById('top_panel_center').innerHTML=`saving ${proj_name}`;
document.getElementById('top_panel_center').innerHTML=` <%=lang("saving")%> ${proj_name}`;
save_local();
document.getElementById('top_panel_center').innerHTML=`saved ${proj_name} to local storage`;
document.getElementById('top_panel_center').innerHTML=`<%=lang("saved")%> ${proj_name} <%=lang("to local")%>`;
setTimeout((res)=>{
document.getElementById("top_panel_center").innerText = `${proj_name} (local)`;
document.getElementById("top_panel_center").innerText = `${proj_name} (<%=lang("local")%>)`;
},3000)
}

View File

@ -13,11 +13,11 @@
}
$(window).focus(function(){
if(document.title == "login"){
console.log(document.title);
// console.log(document.title);
log_by_sid();
}else if(document.title != "login"){
check_sid(true);
console.log("check");
// console.log("check");
}
});
</script>

92
views/static/language.ejs Normal file
View File

@ -0,0 +1,92 @@
<%
cur_lang = "ru";
lang = (text) => language[cur_lang][text];
ch_lang = (lang) => cur_lang = lang;
lang_json = () => JSON.stringify(language);
language = {
"ru":{
"main page": "проекты",
"admin panel": "админ панель",
"logout": "выйти",
"new project": "создать новый проект",
"Image preview": "превью картинки...",
"hello admin": "привет админ",
"height": "высота",
"width": "ширина",
"img max size": "макс. размер 2мб",
"user registration": "регистрация пользователя",
"create object": "создать обьект",
"admin": "админ",
"register": "зарегистрировать",
"download logs": "скачать логи",
"create new object": "создание нового обьекта",
"logs": "логи",
"password": "пароль",
"login": "логин",
"object name": "название обьекта",
"object description": "описание обьекта",
"black hole": "чёрная дыра",
"project settings": "настройки проекта",
"save to cloud": "сохранить в облако",
"load from cloud": "загрузить из облака",
"save to local": "сохранить в локальное хранилище",
"load from local": "загрузить из локального хранилища",
"cache_title": "если включено большые файлы будут сохраняться на локальное хранильще (улучшенная проиводительность)",
"cache_on": "кеш включен",
"cache_off": "кеш выключен",
"to local": "в локальное хранилище",
"local": "локальное хранилище",
"to cloud": "в облако",
"cloud": "облако",
"saved": "сохранено",
"saving": "сохраняется",
"loading": "загружается",
"loaded": "загружено",
"from": "из",
"to": "в",
"in": "в"
},
"en":{
"main page": "main page",
"admin panel": "admin panel",
"Image preview": "Image preview...",
"hello admin": "hello admin",
"height": "height",
"width": "width",
"img max size": "max size 2mb",
"user registration": "user registration",
"create object": "create object",
"admin": "admin",
"register": "register",
"download logs": "download logs",
"create new object": "create new object",
"cache_title": "if its on browser will store large data in local storage (better performance)",
"logout": "logout",
"new project": "new project",
"logs": "logs",
"password": "password",
"login": "login",
"object name": "object name",
"object description": "object description",
"black hole": "black hole",
"project settings": "project settings",
"save to cloud": "save to cloud",
"load from cloud": "load from cloud",
"save to local": "save to local",
"load from local": "load from local",
"cache_on": "cache is on",
"cache_off": "cache is off",
"to local": "to local",
"local": "local",
"to cloud": "to cloud",
"cloud": "cloud",
"saved": "saved",
"saving": "saving",
"loading": "loading",
"loaded": "loaded",
"from": "from",
"to": "to",
"in": "in"
}
}
%>

View File

@ -1,11 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<script src="/lib/ejs.js"></script>
<script src="/lib/fn.js"></script>
<!-- <script src="/lib/interact.min.js"></script> -->
<script src="/lib/jquery.js"></script>
<script src="/lib/jquery.cookie.js"></script>
<script src="/lib/ejs.js"></script>
<script src="/lib/aes.js"></script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -22,12 +22,13 @@
</style>
<script>
if(document.title == "login"){
console.log(document.title);
// console.log(document.title);
log_by_sid();
}else if(document.title != "login"){
check_sid(true);
console.log("check");
// console.log("check");
}
</script>
</head>
<body>