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 // check_for
module.exports.cv = (table,key,value,callback) => { 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 = ''; let log = '';
if (err) { if (err) {
console.log("sql err"); console.log("sql err");
@ -57,7 +57,7 @@ module.exports.cv = (table,key,value,callback) => {
module.exports.dl = (table,key,value,callback) => { module.exports.dl = (table,key,value,callback) => {
// console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); // 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) { if (err) {
console.log("sql err"); console.log("sql err");
throw err; throw err;
@ -70,7 +70,19 @@ module.exports.dl = (table,key,value,callback) => {
// get_from // get_from
module.exports.gv = (table,key,value,callback) => { module.exports.gv = (table,key,value,callback) => {
// console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); // 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) { if (err) {
console.log("sql err"); console.log("sql err");
throw err; throw err;
@ -83,7 +95,7 @@ module.exports.gv = (table,key,value,callback) => {
module.exports.ggv = (table,ekey,key,value,callback) => { module.exports.ggv = (table,ekey,key,value,callback) => {
// console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); // 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) { if (err) {
console.log("sql err"); console.log("sql err");
throw err; throw err;
@ -95,7 +107,7 @@ module.exports.ggv = (table,ekey,key,value,callback) => {
// set_in // set_in
module.exports.sv = (table,key,value,ekey,evalue,callback) => { 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+"'"); // console.log("UPDATE `"+table+"` SET `"+key+"` = '"+value+"' WHERE `"+ekey+"` = '"+evalue+"'");
if (err) { if (err) {
console.log("sql err"); console.log("sql err");
@ -108,7 +120,7 @@ module.exports.sv = (table,key,value,ekey,evalue,callback) => {
module.exports.nr = (table,keys,values) =>{ module.exports.nr = (table,keys,values) =>{
// console.log('INSERT INTO `'+table+'`('+keys+') VALUES ('+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) { if (err) {
console.log("sql err"); console.log("sql err");
throw 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);
}
})
}

52
func.js
View File

@ -9,7 +9,7 @@ const moment = require("moment");
const vars = require('./vars'); const vars = require('./vars');
module.exports.sendfile = (fileName, response) => { module.exports.sendfile = (fileName, response) => {
const filePath = "./files/"+fileName; const filePath = "./"+fileName;
fs.exists(filePath, function (exists) { fs.exists(filePath, function (exists) {
if (exists) { if (exists) {
response.writeHead(200, { response.writeHead(200, {
@ -49,6 +49,7 @@ module.exports.sendfile = (fileName, response) => {
// } // }
module.exports.sid = (cook,res,callback,auto = true)=>{ module.exports.sid = (cook,res,callback,auto = true)=>{
try {
let uuid = cook["uuid"]; let uuid = cook["uuid"];
let sid = cook["sid"]; let sid = cook["sid"];
if(cook["uuid"] != null && cook["sid"] != null){ if(cook["uuid"] != null && cook["sid"] != null){
@ -74,13 +75,54 @@ module.exports.sid = (cook,res,callback,auto = true)=>{
if(auto) res.send({out:"bad",err:"nocr"}); if(auto) res.send({out:"bad",err:"nocr"});
if(!auto) callback(false); if(!auto) callback(false);
} }
} catch (error) {
this.log("backend sid checking err0r - "+error);
}
} }
module.exports.log = (message) =>{ module.exports.log = (message) =>{
var date = moment().format('YYYY-MM-DD') var date = moment().format('YYYY-MM-DD');
var time = moment().format('hh:mm:ss') var time = moment().format('hh:mm:ss');
console.log(`${date}_${time}|${message}`); let clog = `${date}_${time}|${message}`;
db.nr("logs","`date`,`time`,`log`",`'${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; }
});
});
}
});
});
})
});
}
} }

View File

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

View File

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

View File

@ -3,6 +3,7 @@ const func = require('./func');
const vars = require('./vars'); const vars = require('./vars');
module.exports.load = (inp,cook,res)=>{ module.exports.load = (inp,cook,res)=>{
try {
db.gv("users","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0]; db.gv("users","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0];
db.gv("projects","uid",udata["id"],(pdata)=>{ db.gv("projects","uid",udata["id"],(pdata)=>{
let projt = null; let projt = null;
@ -21,17 +22,25 @@ module.exports.load = (inp,cook,res)=>{
} }
}) })
}) })
} catch (error) {
func.log("backend project loading error - ");
}
} }
module.exports.loads = (inp,cook,res)=>{ module.exports.loads = (inp,cook,res)=>{
try {
db.ggv("users","`id`","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0]; db.ggv("users","`id`","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0];
db.gv("projects","uid",udata["id"],(pdata)=>{ db.gv("projects","uid",udata["id"],(pdata)=>{
res.send({out:"good",body:pdata}); res.send({out:"good",body:pdata});
}) })
}) })
} catch (error) {
func.log("backend projects loading err0r - " - error);
}
} }
module.exports.save = (inp,cook,res)=>{ module.exports.save = (inp,cook,res)=>{
try {
db.gv("users","uuid",`'${cook["uuid"]}'`, (udata)=>{ udata = udata[0] db.gv("users","uuid",`'${cook["uuid"]}'`, (udata)=>{ udata = udata[0]
db.gv("projects","uid",udata["id"],(pdata)=>{ db.gv("projects","uid",udata["id"],(pdata)=>{
let projin = null; let projin = null;
@ -57,4 +66,7 @@ module.exports.save = (inp,cook,res)=>{
} }
}) })
}) })
} catch (error) {
func.log("backend project saving err0r - "+error);
}
} }

View File

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

View File

@ -40,7 +40,7 @@ function create(clas,x,y,body,id,size){
} }
else if (db_data != null){ else if (db_data != null){
obj.src = img; 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})`; // drag.transform = `translate(${drag.getAttribute("data-y")}px, ${drag.getAttribute("data-y")}px) scale(${db_data["width"] * 2} ${db_data["height"] * 2})`;
if(size){ if(size){
obj.style.width = `${db_data["width"] * 2}px`; obj.style.width = `${db_data["width"] * 2}px`;
@ -114,7 +114,7 @@ function load(objss){
function load_proj_cloud(){ function load_proj_cloud(){
document.getElementById("drags").innerHTML = ""; 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}) $.post( "/load_proj",{name:proj_name})
.done(function( res ) { .done(function( res ) {
if(res["out"] == "good"){ if(res["out"] == "good"){
@ -123,7 +123,7 @@ function load_proj_cloud(){
// console.log(JSON.parse(res["body"])); // console.log(JSON.parse(res["body"]));
// $.cookie("objs",res["body"]); // $.cookie("objs",res["body"]);
load(JSON.parse(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"){ else if(res["out"] == "bad proj"){
console.log("bad"); console.log("bad");
@ -139,7 +139,7 @@ function load_proj_local(){
if(localStorage.getItem(proj_name) == null){ if(localStorage.getItem(proj_name) == null){
save_local() 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 = ""; document.getElementById("drags").innerHTML = "";
load(JSON.parse(localStorage.getItem(proj_name))); load(JSON.parse(localStorage.getItem(proj_name)));
} }
@ -153,7 +153,7 @@ function save(callback){
// console.log(objs); // 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 => { 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 = ""; let scr = "";
console.log(canvas.toDataURL().length); // console.log(canvas.toDataURL().length);
scr = canvas.toDataURL(); scr = canvas.toDataURL();
// if (canvas.toDataURL().length < 120000) scr = canvas.toDataURL() // if (canvas.toDataURL().length < 120000) scr = canvas.toDataURL()
// console.log(scr); // console.log(scr);
@ -161,7 +161,7 @@ function save(callback){
.done(function( res ) { .done(function( res ) {
if(res["out"] == "good"){ if(res["out"] == "good"){
// console.log(scr) // console.log(scr)
console.log("good"); // console.log("good");
if(callback) callback(res); if(callback) callback(res);
} }
}) })
@ -232,10 +232,11 @@ interact('.trash').dropzone({
ondragenter: function (event) { ondragenter: function (event) {
var drag = event.relatedTarget; var drag = event.relatedTarget;
var zone = event.target; var zone = event.target;
delete objs[drag.classList[0]][drag.id]; console.log(drag.classList);
drag.remove(); 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'); zone.classList.add('drop-target');
drag.classList.add('can-drop'); 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');}, 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) { ondrop: function (event) {

20
user.js
View File

@ -3,6 +3,7 @@ const func = require('./func');
const vars = require('./vars'); const vars = require('./vars');
module.exports.login = (inp,cook,res)=>{ module.exports.login = (inp,cook,res)=>{
try{
let ilogin = func.decrypt(inp["login"],inp["sid"]); let ilogin = func.decrypt(inp["login"],inp["sid"]);
let ipass = func.decrypt(inp["pass"],inp["sid"]); let ipass = func.decrypt(inp["pass"],inp["sid"]);
@ -36,10 +37,14 @@ module.exports.login = (inp,cook,res)=>{
}); });
} }
}) })
} catch(error){
func.log("backend user logging in error - "+error);
}
// res.send("good"); // res.send("good");
} }
module.exports.reg = (inp,cook,res)=>{ module.exports.reg = (inp,cook,res)=>{
try {
let uuid = func.get_uuid(inp["login"]); let uuid = func.get_uuid(inp["login"]);
let admin = inp["admin"]; let admin = inp["admin"];
let pass = inp["pass"]; let pass = inp["pass"];
@ -78,9 +83,13 @@ module.exports.reg = (inp,cook,res)=>{
} }
res.send({out:"good", body:{uuid:uuid,login:login,admin:admin}}); 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)=>{ module.exports.get_cr = (inp,cook,res)=>{
try {
db.ggv("users","`login`,`admin`,`id`","uuid",`"${inp["uuid"]}"`,(udata)=>{udata = udata[0]; db.ggv("users","`login`,`admin`,`id`","uuid",`"${inp["uuid"]}"`,(udata)=>{udata = udata[0];
// delete re["sids"]; // delete re["sids"];
if(udata != null){ if(udata != null){
@ -89,9 +98,13 @@ module.exports.get_cr = (inp,cook,res)=>{
res.send({out:"bad"}); res.send({out:"bad"});
} }
}); });
} catch (error) {
func.log("backend user information pulling error - "+error);
}
} }
module.exports.clear_sid = (inp,cook,res)=>{ module.exports.clear_sid = (inp,cook,res)=>{
try {
if(inp["sid"] != null){ if(inp["sid"] != null){
// res.send({out:"good"}); // res.send({out:"good"});
db.dl("sids","sid",`'${inp["sid"]}'`,() =>{ db.dl("sids","sid",`'${inp["sid"]}'`,() =>{
@ -117,9 +130,13 @@ module.exports.clear_sid = (inp,cook,res)=>{
}); });
} }
res.send({out:"good"}); res.send({out:"good"});
} catch (error) {
func.log("backend user sid clearing error -"+error);
}
} }
module.exports.sid_log=(inp,cook,res,req)=>{ module.exports.sid_log=(inp,cook,res,req)=>{
try {
func.sid(cook,res,(include) => { func.sid(cook,res,(include) => {
if (include){ if (include){
res.send({out:"good",url:"/main"}); res.send({out:"good",url:"/main"});
@ -130,4 +147,7 @@ module.exports.sid_log=(inp,cook,res,req)=>{
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"]); 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) },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.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; height: 200px;
width: 200px; width: 200px;
} }
</style>
<style>
.main_sec{ .main_sec{
margin: auto; margin: auto;
/* display: flex; */ /* display: flex; */
text-align: center; text-align: center;
} }
#reg_form{ section{
width: 80vw; width: 80vw;
margin: auto; margin: auto;
} }
@ -34,61 +32,69 @@
<%- include('./static/start.ejs',{name:"admin",async: true}) %> <%- include('./static/start.ejs',{name:"admin",async: true}) %>
<%- include('./header.ejs') %> <%- include('./header.ejs') %>
<section class="main"> <h1 style="text-align: center;"><%= lang("hello admin") %></h1> <br>
<h1>hello admin</h1> <section>
<h1><%= lang("create new object") %></h1>
<div class="nobj"> <div class="nobj">
<div> <div>
<div class="img_preview"> <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> <input type="file" id="img_file" onchange="previewFile()" accept="image/*" value="" maxlength="1"><br>
</div> </div>
<div style="width: 200px; height: 200px;"> <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>
</div> </div>
<textarea name="" id="nobj_description" cols="30" rows="5" placeholder="object description"></textarea> <textarea id="nobj_description" cols="30" rows="5" placeholder="<%= lang("object description") %>"></textarea>
<div> <div>
<div class="nobj_options"> <div class="nobj_options">
<input type="text" id="nobj_name" placeholder="object name"> <input type="text" id="nobj_name" placeholder="<%= lang("object name") %>">
<button onclick="create_obj()">create object</button> <button onclick="create_obj()"><%= lang("create object")%></button>
<div id="obj_resp"></div> <div id="obj_resp"></div>
</div> </div>
<div id="obj_input"> <div id="obj_input">
<div> <div>
<div style="display: flex;width: 150px;justify-content: space-between;"> <div style="display: flex;width: 100%;justify-content: space-between;">
<label for="obj_height">height </label> <label for="obj_height"><%= lang("height") %> </label>
<div id="obj_height_value">100см</div> <div id="obj_height_value">100см</div>
</div> </div>
<input type="range" step="0.1" min="1" max="100" id="obj_height" value="100" oninput="obj_size_change('height')"> <input style="width: 100%;" type="range" step="0.5" min="1" max="100" id="obj_height" value="100" oninput="obj_size_change('height')">
</div> </div>
<div> <div>
<div style="display: flex;width: 150px;justify-content: space-between;"> <div style="display: flex;width: 100%;justify-content: space-between;">
<label for="obj_width">width</label> <label for="obj_width"><%= lang("width") %></label>
<div id="obj_width_value">100см</div> <div id="obj_width_value">100см</div>
</div> </div>
<input type="range" step="0.1" min="1" max="100" id="obj_width" value="100" oninput="obj_size_change('width')"> <input style="width: 100%;" type="range" step="0.5" min="1" max="100" id="obj_width" value="100" oninput="obj_size_change('width')">
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
<form action="" method="get" onsubmit="return false;" id="reg_form"> <section>
<h1>user registration</h1> <h1><%= lang("user registration") %></h1>
<section class="main_sec"> <div class="main_sec">
<div> <div>
<input type="text" id="login" name="login" placeholder="login"> <input type="text" id="login" name="login" placeholder="<%= lang("login") %>">
<input type="password" id="pass" name="pass" placeholder="password"> <input type="password" id="pass" name="pass" placeholder="<%= lang("password") %>">
<button onclick='reg();'>reg</button> <button onclick='reg();'><%= lang("register") %></button>
</div> </div>
<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"> <input type="checkbox" name="admin" value='false' id="admin_check">
</div> </div>
<div id="reg_response"></div> <div id="reg_response"></div>
</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> </section>
</form>
<%- include('./static/end.ejs') %> <%- include('./static/end.ejs') %>

View File

@ -44,7 +44,11 @@
border: 1px black solid; border: 1px black solid;
} }
</style> </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"> <header id="top_panel">
<!-- <div id="user_name"></div> --> <!-- <div id="user_name"></div> -->
@ -56,8 +60,6 @@
</header> </header>
<div id="user_menu" class="cmenu"></div> <div id="user_menu" class="cmenu"></div>
<script>get_from_uuid((res)=>{ <script>get_from_uuid((res)=>{
let uname = document.getElementById("user_name"); let uname = document.getElementById("user_name");
let menu = document.getElementById("user_menu"); let menu = document.getElementById("user_menu");
@ -65,26 +67,26 @@
let right = document.getElementById("top_panel_right"); let right = document.getElementById("top_panel_right");
let left = document.getElementById("top_panel_left"); 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>`; right.innerHTML += `<div id="user_name" class="menu_btn">${res["login"]}</div>`;
if (res["admin"] == true){ 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) => { onclick = (e) => {
e.preventDefault() // e.preventDefault()
// console.log(e); // console.log(e);
// console.log(document.getElementById(e.target.id).parentElement); // console.log(document.getElementById(e.target.id).parentElement);
if(e.target.onclick != null){ if(e.target.onclick != null){
if(document.title == "login"){ if(document.title == "login"){
console.log(document.title); // console.log(document.title);
log_by_sid(); log_by_sid();
}else if(document.title != "login"){ }else if(document.title != "login"){
check_sid(true); check_sid(true);
console.log("check"); // console.log("check");
} }
} }
if(e.target.id == "user_name"){ if(e.target.id == "user_name"){

View File

@ -45,7 +45,7 @@
<!-- <script src="/lib/interact.min.js"></script> --> <!-- <script src="/lib/interact.min.js"></script> -->
<section class="main"> <section class="main">
<button onclick="new_proj()">new project</button> <button onclick="new_proj()"><%= lang("new project") %></button>
<div id="projs_div"></div> <div id="projs_div"></div>
</section> </section>
@ -72,7 +72,7 @@
projs.forEach(proj => { projs.forEach(proj => {
// console.log(proj); // console.log(proj);
let div = document.getElementById("projs_div"); 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> </script>

View File

@ -108,11 +108,10 @@
</style> </style>
<%- include('./static/start.ejs',{name:proj_name,async: true}) %> <%- 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/interact.js"></script>
<script src="/lib/html2canvas.js"></script> <script src="/lib/html2canvas.js"></script>
<div id="drags"> <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 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> </div>
@ -126,32 +125,21 @@
<div id="wall_input"> <div id="wall_input">
<div> <div>
<div style="display: flex;width: 150px;justify-content: space-between;"> <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 id="wall_height_value">0</div>
</div> </div>
<input type="range" step="0.1" min="0" max="5" id="wall_height" value="2" oninput="wall_size_change('height')"> <input type="range" step="0.1" min="0" max="5" id="wall_height" value="2" oninput="wall_size_change('height')">
</div> </div>
<div> <div>
<div style="display: flex;width: 150px;justify-content: space-between;"> <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 id="wall_width_value">0</div>
</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()"> <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> </div>
<div class="czones"> <div class="czones"></div>
<!-- <div class="cube createzone"></div> <img class="trash" style="height: 100px; width: 100px;" src="/img/shadow-energy.gif" alt="<%= lang('black hole') %>">
<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> </div>
<div class="wall dropzone" id="wall"></div> <div class="wall dropzone" id="wall"></div>
@ -196,37 +184,37 @@
if($.cookie("cache") ==null)$.cookie("cache","true",{path:"/proj;SameSite=Strict"}); if($.cookie("cache") ==null)$.cookie("cache","true",{path:"/proj;SameSite=Strict"});
// console.log(proj_name); // console.log(proj_name);
let menu = document.getElementById("project_menu"); let menu = document.getElementById("project_menu");
document.getElementById("top_panel_left").innerHTML = `<div id='proj_menu' class="menu_btn">file</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()'>save to cloud</button> <br>"; 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()'>load from 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()'>save to local storage</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()'>load from local storage</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='if its on browser will stop large data in local storage (better performance)'><button onclick='cache_change(true);'>cache is off</button></div>"; 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='if its on browser will stop large data in local storage (better performance)'><button onclick='cache_change(false);'>cache is on</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){ function cache_change(to){
let cache_switch = document.getElementById("cache_switch"); 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"});} 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='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"});} 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){ 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)=>{ 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)=>{ setTimeout((res)=>{
document.getElementById("top_panel_center").innerText = `${proj_name} (cloud)`; document.getElementById("top_panel_center").innerText = `${proj_name} (<%=lang("cloud")%>)`;
},3000) },3000)
}) })
} }
function save_proj_local(type){ 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(); 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)=>{ setTimeout((res)=>{
document.getElementById("top_panel_center").innerText = `${proj_name} (local)`; document.getElementById("top_panel_center").innerText = `${proj_name} (<%=lang("local")%>)`;
},3000) },3000)
} }

View File

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