From e628d10ec72b771e9529f4baf5e72250ffbc3551 Mon Sep 17 00:00:00 2001 From: N0rdye Date: Sat, 8 Jul 2023 03:47:32 +0500 Subject: [PATCH] update added: db users admin user edit cleared router cleared sql new sid creation new log creation cleaned code (a bit) ( removed db check value function and replaced with get one value. --- admin.js | 134 ++++++++++++++++ db.js | 126 +++++++-------- func.js | 99 ++++++------ index.js | 198 +++++++++++++++--------- object.js | 10 +- project.js | 2 +- public/lib/fn.js | 6 +- public/lib/inter.js | 54 +++++-- user.js | 49 +----- views/admin.ejs | 172 +------------------- views/admin/objects/object_creation.ejs | 127 +++++++++++++++ views/admin/objects/object_edit.ejs | 0 views/admin/users/user_edit.ejs | 163 +++++++++++++++++++ views/admin/users/user_reg.ejs | 44 ++++++ views/header.ejs | 106 +++++++------ views/login.ejs | 8 +- views/main.ejs | 10 +- views/project.ejs | 83 +++------- views/static/language.ejs | 56 ++++++- views/static/start.ejs | 18 +-- 20 files changed, 902 insertions(+), 563 deletions(-) create mode 100644 admin.js create mode 100644 views/admin/objects/object_creation.ejs create mode 100644 views/admin/objects/object_edit.ejs create mode 100644 views/admin/users/user_edit.ejs create mode 100644 views/admin/users/user_reg.ejs diff --git a/admin.js b/admin.js new file mode 100644 index 0000000..e161b25 --- /dev/null +++ b/admin.js @@ -0,0 +1,134 @@ +const db = require('./db'); +const func = require('./func'); +const { login } = require('./user'); +const vars = require('./vars'); + +module.exports.get_users = (inp,cook,res)=>{ + try{ + db.crc("users",(row_count)=>{ + // console.log(row_count); + db.gav("users",`${inp["from"]},${inp["load_interval"]}`,(data)=>{ + if(data["length"] > 0){ + res.send({body:data,count:row_count,out:"good"}); + } + else{ + res.send({out:"bad"}); + } + },true) + },true) + } catch(error){ + func.log("backend user getting in error - "+error); + } + // res.send("good"); +} + +module.exports.edit_user = (inp,cook,res)=>{ + try { + if(inp["key"] == "login"){ + db.ggv("users","id","login",`'${inp["value"]}'`,(login_in_use)=>{ login_in_use = login_in_use[0]; + if (login_in_use){ + res.send({out:"bad"}); + return; + } + else{ + change(); + db.ggv("admins","id","uid",`'${inp["id"]}'`,(admin)=>{ admin = admin[0] + if(admin) db.sv("admins","login",inp["value"],"id",admin["id"],()=>{},true); + },true); + } + }) + }else if (inp["key"] == "admin"){ + db.ggv("users","admin","id",`'${inp["id"]}'`,(admin)=>{ admin = admin[0]["admin"]; + if(!admin){ + db.nr("admins",`login,uid`,`'${inp["login"]}','${inp["id"]}'`,true); + db.sv("users","admin","1","id",inp["id"],()=>{},true); + } + else if(admin){ + db.dl("admins","uid",inp["id"],()=>{},true); + db.sv("users","admin","0","id",inp["id"],()=>{},true); + } + func.log(`admin ${cook["uuid"]} changed user ${inp["login"]} admin privileges to ${!admin}`); + res.send({out:"good"}); + // if (inp["value"] != "0"){ db.nr("admins",`login,uid`,`'${inp["login"]}','${inp["id"]}'`,true);} + // else { + // db.sv("users","admin","0","id",inp["id"],()=>{},true); + // db.dl("admins","uid",inp["id"],()=>{},true); + // } + // change(); + }) + }else {change();} + + function change(){ + db.sv("users",inp["key"],inp["value"],"id",inp["id"],(db_res)=>{ + func.log(`admin ${cook["uuid"]} changed user ${inp["login"]} ${inp["key"]} to ${inp["value"]}`); + res.send({out:"good"}); + },true) + } + } catch (error) { + func.log("backend user information changing error - "+error); + } +} + +module.exports.del_user = (inp,cook,res)=>{ + try { + db.dl("users","id",`'${inp["id"]}'`,()=>{ + func.log(`admin ${cook["uuid"]} deleted user ${inp["login"]}`); + res.send({out:"good"}); + },true); + } catch (error) { + func.log("backend user sid clearing error -"+error); + } +} + +module.exports.set_obj=(inp,cook,res)=>{ + try { + + } catch (error) { + func.log("backend user sid logging error - "+error); + } +} + +module.exports.reg = (inp,cook,res)=>{ + 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.ggv("users","id","login",`'${inp["login"]}'`, (ldata)=>{ldata = ldata[0] + db.ggv("users","id","uuid",`'${inp["uuid"]}'`,(udata) =>{udata = udata[0] + // 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; + } + },true) + },true) + } + function good_reg(){ + db.nr("users",'`login`,`pass`,`uuid`,`admin`',`'${login}','${pass}','${uuid}',${admin}`,true); + if (admin){ + db.ggv("users","`id`","uuid",`'${uuid}'`,(udata)=>{ udata = udata[0] + db.nr("admins",'`login`,`uid`',`'${login}',${udata["id"]}`,true); + },true) + } + res.send({out:"good", body:{uuid:uuid,login:login,admin:admin}}); + } + } catch (error) { + func.log("backend user registration error - "+error); + } +} \ No newline at end of file diff --git a/db.js b/db.js index a7ef70a..900c69a 100644 --- a/db.js +++ b/db.js @@ -1,126 +1,98 @@ const mysql = require('mysql'); const vars = require('./vars'); +const db_host = "localhost"; -const logcon = mysql.createConnection({ - host: 'db', +const admin = mysql.createConnection({ + host: db_host, + user: 'admin', + password: '484', + database: 'users' +}); + +const user = mysql.createConnection({ + host: db_host, user: 'user', password: 'user', database: 'users' }); -logcon.connect(); - -// check_for -module.exports.cv = (table,key,value,callback) => { - logcon.query(`SELECT * FROM ${table}`, (err, rows, fields) => { - let log = ''; - if (err) { - console.log("sql err"); - throw err; - } - rows.forEach(rec => { - if (rec[key]==value){ - log = rec[key]; - return; - } - }); - if (log != ''){ - callback(log); - } - else{ - callback(null); - } - }) +db = (prevs = false) => { + if(prevs) return admin; + else return user; } -// module.exports.ccv = (table,ekey,key,value,callback) => { -// logcon.query('SELECT * FROM `'+table+'`', (err, rows, fields) => { -// let log = ''; -// if (err) { -// console.log("sql err"); -// throw err; -// } -// rows.forEach(rec => { -// if (rec[key]==value){ -// log = rec[key]; -// return; -// } -// }); -// if (log != ''){ -// callback(log); -// } -// else{ -// callback(null); -// } -// }) -// } +admin.connect(); +user.connect(); -module.exports.dl = (table,key,value,callback) => { + +module.exports.dl = (table,key,value,callback,prevs = false) => { // console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); - logcon.query(`DELETE FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => { + db(prevs).query(`DELETE FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => { if (err) { console.log("sql err"); throw err; }else{ - callback(rows); + if(callback)callback(rows); } }) } -// get_from -module.exports.gv = (table,key,value,callback) => { +// get values where +module.exports.gv = (table,key,value,callback,prevs = false) => { // console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); - logcon.query(`SELECT * FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => { + db(prevs).query(`SELECT * FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => { if (err) { console.log("sql err"); throw err; }else{ - callback(rows); + if(callback)callback(rows); } }) } -module.exports.gav = (table,callback) => { +// get all from table +module.exports.gav = (table,limit = "0",callback,prevs = false) => { // console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); - logcon.query(`SELECT * FROM ${table} WHERE 1`, (err, rows, fields) => { + limit = (limit != "0")? `LIMIT ${limit}`:""; + db(prevs).query(`SELECT * FROM ${table} WHERE 1 ${limit}`, (err, rows, fields) => { if (err) { console.log("sql err"); throw err; }else{ - callback(rows); + if(callback)callback(rows); } }) } - -module.exports.ggv = (table,ekey,key,value,callback) => { +// get value where +module.exports.ggv = (table,ekey,key,value,callback,prevs = false) => { // console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); - logcon.query(`SELECT ${ekey} FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => { + db(prevs).query(`SELECT ${ekey} FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => { if (err) { console.log("sql err"); throw err; }else{ - callback(rows); + if(callback)callback(rows); } }) } -// set_in -module.exports.sv = (table,key,value,ekey,evalue,callback) => { - logcon.query(`UPDATE ${table} SET ${key} = '${value}' WHERE ${ekey} = '${evalue}'`, (err , rows) => { +// set value where +module.exports.sv = (table,key,value,ekey,evalue,callback,prevs = false) => { + db(prevs).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"); throw err; }else{ - callback(rows); + if(callback)callback(rows); } }) } - -module.exports.nr = (table,keys,values) =>{ +// new record +module.exports.nr = (table,keys,values,prevs = false) =>{ // console.log('INSERT INTO `'+table+'`('+keys+') VALUES ('+values+')'); - logcon.query(`INSERT INTO ${table} (${keys}) VALUES (${values})`,(err,res) =>{ + db(prevs).query(`INSERT INTO ${table} (${keys}) VALUES (${values})`,(err,res) =>{ if (err) { console.log("sql err"); throw err; @@ -129,15 +101,27 @@ module.exports.nr = (table,keys,values) =>{ } }) } - -module.exports.glv = (table,last_value,callback) =>{ +// get last value +module.exports.glv = (table,last_value,callback,prevs = false) =>{ // console.log('INSERT INTO `'+table+'`('+keys+') VALUES ('+values+')'); - logcon.query(`SELECT * FROM ${table} ORDER BY ${last_value} DESC LIMIT 1;`,(err,res) =>{ + db(prevs).query(`SELECT * FROM ${table} ORDER BY ${last_value} DESC LIMIT 1;`,(err,rows) =>{ if (err) { console.log("sql err"); throw err; }else{ - callback(res); + if(callback)callback(rows); + } + }) +} + +module.exports.crc = (table,callback,prevs = false) =>{ + // console.log('INSERT INTO `'+table+'`('+keys+') VALUES ('+values+')'); + db(prevs).query(`SELECT COUNT(*) FROM ${table}`,(err,rows) =>{ + if (err) { + console.log("sql err"); + throw err; + }else{ + if(callback)callback(rows[0]["COUNT(*)"]); } }) } \ No newline at end of file diff --git a/func.js b/func.js index 30bf355..afcdecd 100644 --- a/func.js +++ b/func.js @@ -24,31 +24,7 @@ module.exports.sendfile = (fileName, response) => { }); } -// module.exports.check_sid = (Cookies, callback) =>{ -// let uuid = Cookies["uuid"]; -// let sid = Cookies["sid"]; -// // console.log(uuid,sid); -// db.gv("users","uuid",`'${uuid}'`,(udata)=>{ udata = udata[0]; -// // console.log(udata); -// db.gv("sids","uid",udata["id"],(rdata)=>{ -// let valid = ""; -// rdata.forEach(rec => { -// if (rec["sid"] == sid){ -// valid = rec["sid"]; -// return; -// } -// }); -// if(valid != ""){ -// callback(true,udata); -// } -// else{ -// callback(false,udata); -// } -// }); -// }) -// } - -module.exports.sid = (cook,res,callback,auto = true)=>{ +module.exports.sid = (cook,res,callback,auto = true,admin_check = false)=>{ try { let uuid = cook["uuid"]; let sid = cook["sid"]; @@ -56,24 +32,43 @@ module.exports.sid = (cook,res,callback,auto = true)=>{ 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] + db.ggv("users","`uuid`,`id`, `admin`","id",`'${sdata["uid"]}'`,(udata)=>{ udata = udata[0] if (udata != null && udata["id"] == sdata["uid"] && uuid == udata["uuid"]){ - callback(true); + if (!admin_check) callback(true); + else if (admin_check && udata["admin"] != false){ + db.ggv("admins","`login`,`uid` ","uid",`'${udata["id"]}'`,(adata)=>{ adata = adata[0] + if(adata != null){ + callback(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) callback(false); + else if(!auto) callback(false); } }); } else{ if(auto) res.send({out:"bad",err:"expired"}); - if(!auto) callback(false); + else if(!auto) callback(false); } }); }else{ if(auto) res.send({out:"bad",err:"nocr"}); - if(!auto) callback(false); + else if(!auto) callback(false); } } catch (error) { this.log("backend sid checking err0r - "+error); @@ -81,12 +76,13 @@ module.exports.sid = (cook,res,callback,auto = true)=>{ } 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}'`); + if(vars.log_to_db) db.nr("logs","`date`,`time`,`log`",`'${date}','${time}','${message}'`,true); } module.exports.logs_file = (res)=>{ @@ -103,31 +99,30 @@ module.exports.logs_file = (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; } - }); - }); - } - }); - }); - }) - }); + 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 = () =>{ - let unid = uuid.v4() + '%%' + uuid.v4() +'#'+(621); +module.exports.get_uuid = (name = "") =>{ + name = (name != "")? this.encrypt(name,"name"):""; + let unid = uuid.v4() + '%%'+name+'#e'+(621); return unid; } diff --git a/index.js b/index.js index b3bf8ef..c9a8c5e 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,7 @@ const express = require('express'); const db = require('./db'); const func = require('./func'); const user = require('./user'); +const admin = require('./admin'); const obj = require('./object'); const proj = require('./project'); const vars = require('./vars'); @@ -36,6 +37,26 @@ app.use(express.static('public')); app.use(cookieParser()); + +/// user +app.get('/', (req, res) => { + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,(include)=>{ + if(include){ + res.redirect('main'); + } + else{ + res.redirect('login'); + } + },false) +}); +app.get("/login" , (req,res) =>{ + res.render('login'); +}) +app.get("/main", (req,res) =>{ + res.render('main'); +}); app.post('/back_login', (req, res) => { try { let inp = req.body; @@ -45,17 +66,6 @@ app.post('/back_login', (req, res) => { func.log("router login error - "+error); } }); - -app.post('/reg_user', (req, 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) =>{ try{ let inp = req.body; @@ -65,7 +75,6 @@ app.post("/sid_log",(req,res) =>{ func.log("router sid logging in error - "+error); } }) - app.post("/get_sid" , (req,res) =>{ try{ let inp = req.body; @@ -76,8 +85,6 @@ app.post("/get_sid" , (req,res) =>{ func.log("router sid getting error - "+error); } }); - - app.post("/clear_sid" , (req,res) =>{ try{ let inp = req.body; @@ -87,7 +94,6 @@ app.post("/clear_sid" , (req,res) =>{ func.log("router sid clearing error - "+error); } }); - app.post("/get_cr_uuid", (req,res) => { try{ let inp = req.body; @@ -99,7 +105,10 @@ app.post("/get_cr_uuid", (req,res) => { func.log("router getting user information by uuid error - "+error); } }) - +/// project +app.get("/proj/:name" , (req,res) =>{ + res.render('project',{proj_name:req.params["name"]}); +}) app.post("/save_proj", (req,res) => { try{ let inp = req.body; @@ -111,7 +120,6 @@ app.post("/save_proj", (req,res) => { func.log("router project saving error - "+error); } }) - app.post("/load_proj", (req,res) => { try{ let inp = req.body; @@ -123,7 +131,6 @@ app.post("/load_proj", (req,res) => { func.log("router project loading error - "+error); } }) - app.post("/get_projs", (req,res) => { try{ let inp = req.body; @@ -135,19 +142,6 @@ app.post("/get_projs", (req,res) => { func.log("router user projects getting error - "+error); } }) - -app.post("/new_obj", (req,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) => { try{ let inp = req.body; @@ -160,7 +154,6 @@ app.post("/get_objs", (req,res) => { func.log("router objects getting error - "+error); } }) - app.post("/get_obj", (req,res) => { try{ let inp = req.body; @@ -173,54 +166,115 @@ app.post("/get_obj", (req,res) => { func.log("router single object getting error - "+error); } }) - - +/// admin +app.get("/admin", (req,res) =>{ + try { + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + res.render('admin'); + },true,true) + } catch (error) { + func.log("router admin page error - "+error); + } +}); +// app.get("/admin/edit/:edit" , (req,res) =>{ +// try { +// let inp = req.body; +// let cook = req.cookies; +// func.sid(cook,res,()=>{ +// switch (req.params["edit"]) { +// case "users": +// res.render('admin/user_edit');break; +// case "projects": +// res.render('admin/project_edit');break; +// case "objects": +// res.render('admin/object_edit');break; +// } +// },true,true) +// } catch (error) { +// func.log("router admin edit page 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'); -}) - -app.get("/proj/:name" , (req,res) =>{ - res.render('project',{proj_name:req.params["name"]}); -}) - -app.get("/login" , (req,res) =>{ - res.render('login'); -}) - -app.get("/main", (req,res) =>{ - res.render('main'); -}); - -app.get("/admin", (req,res) =>{ - res.render('admin'); -}); - -// app.get("/test", (req,res) =>{ -// let inp = req.body; -// let cook = req.cookies; -// func.sid(cook,res,()=>{ -// console.log("asd"); -// }) - -// }); - -app.get('/', (req, res) => { - if(req.cookies["uuid"] != null){ - res.redirect('main'); +app.post("/new_obj", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + obj.new(inp,cook,res); + },true,true) + } catch (error) { + func.log("router object creating error - "+error); } - else{ - res.redirect('login'); +}) +app.post("/admin/users/get", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + admin.get_users(inp,cook,res); + },true,true) + } catch (error) { + func.log("router object creating error - "+error); } -}); +}) +app.post('/admin/users/reg', (req, res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + admin.reg(inp,cook,res); + },true,true) + } catch (error) { + func.log("router registration error - "+error); + } +}) +app.post("/admin/users/edit", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + admin.edit_user(inp,cook,res); + },true,true) + } catch (error) { + func.log("router object creating error - "+error); + } +}) +app.post("/admin/users/get/user", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + admin.get_users(inp,cook,res); + },true,true) + } catch (error) { + func.log("router object creating error - "+error); + } +}) +app.post("/admin/users/del/user", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + admin.del_user(inp,cook,res); + },true,true) + } catch (error) { + func.log("router object creating error - "+error); + } +}) +app.post("/admin/change_objs", (req,res) => { + try{let cook = req.cookies;func.sid(cook,res,()=>{func.logs_file(res);})} + catch (error) {func.log("router logs download error - "+error);} +}) + + + app.all('*', (req, res) => { res.status(404).send('

404! Page not


go to main page'); }); - app.listen(process.env.PORT || 8080, () => func.log("server for puzzle started UwU")); \ No newline at end of file diff --git a/object.js b/object.js index 81a7c84..9194230 100644 --- a/object.js +++ b/object.js @@ -27,15 +27,15 @@ module.exports.load = (inp,cook,res)=>{ module.exports.new = (inp,cook,res)=>{ try { - db.cv("objects","name",inp["name"],(include)=>{ - if(include){ + db.ggv("objects","id","name",`'${inp["name"]}'`,(db_name)=>{db_name= db_name[0] + if(db_name != null){ 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"]}'`); + else if (db_name == null){ + db.nr("objects","`name`,`img`,`height`,`width`,`description`",`'${inp["name"]}','${inp["img"]}','${inp["height"]}','${inp["width"]}','${inp["desc"]}'`,true); res.send({out:"good"}); } - }) + },true) } catch (error) { func.log("backend object creating error - "+error); } diff --git a/project.js b/project.js index 5e69a93..63a6492 100644 --- a/project.js +++ b/project.js @@ -59,7 +59,7 @@ module.exports.save = (inp,cook,res)=>{ 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"],()=>{}); + if(inp["img"] != "") db.sv("projects","img",inp["img"],"id",projin["id"],()=>{},"user"); func.log(`good boy ${udata["uuid"]} saved project ${projin["name"]} from ${cook["sid"]}`); // func.log("proj in"); res.send({out:"good"}); diff --git a/public/lib/fn.js b/public/lib/fn.js index e3e23c1..9100862 100644 --- a/public/lib/fn.js +++ b/public/lib/fn.js @@ -67,14 +67,14 @@ function check_sid(redirect = true){ } function logout(redirect = true) { - let dialog = confirm("logout?"); + let dialog = confirm(`${lang("logout")}?`); if(dialog){ clear_ck(redirect); } } -function ask() { - let name = prompt("please enter project name"); +function ask(text,def = "") { + let name = prompt(text,def); if(name != "" && name != " "){ return name; } diff --git a/public/lib/inter.js b/public/lib/inter.js index 42f6225..dd75afc 100644 --- a/public/lib/inter.js +++ b/public/lib/inter.js @@ -2,6 +2,7 @@ window.dragMoveListener = dragMoveListener; let root = document.getElementById("drags"); let objs = { height:"2",width:"4"}; let objs_store = {}; +let proj_from = "cloud"; function create(clas,x,y,body,id,size){ let main_clas = clas.split(" ")[0]; @@ -34,9 +35,15 @@ function create(clas,x,y,body,id,size){ function make(img){ if (db_data == null) { delete objs[main_clas][id]; - save(()=>{ - goto("/proj/"+proj_name); - }); + if(proj_from == "cloud"){ + save(()=>{ + goto("/proj/"+proj_name); + },false); + } + else if (proj_from == "local"){ + save_local(); + load_proj_local(); + } } else if (db_data != null){ obj.src = img; @@ -49,14 +56,14 @@ function create(clas,x,y,body,id,size){ } } }) - obj.setAttribute("max-width","100px"); root.append(obj); set_pos(obj,x,y); } function resize_drags(){ - document.getElementById('drags').style.left = $('.dropzone')[0].getBoundingClientRect().x; - document.getElementById('drags').style.width = $('.dropzone')[0].style.width; + document.getElementById('drags').setAttribute("data-x",document.getElementsByClassName("wall")[0].getBoundingClientRect().left.toString()+"px"); + document.getElementById('drags').style.left = document.getElementsByClassName("wall")[0].getBoundingClientRect().left.toString()+"px"; + document.getElementById('drags').style.width = document.getElementsByClassName("wall")[0].style.width; drag_start(); } @@ -108,11 +115,11 @@ function load(objss){ // document.getElementById("drags").style.left = $(".dropzone")[0].getBoundingClientRect().x; } }); - document.getElementById("drags").style.left = $(".dropzone")[0].getBoundingClientRect().x; - drag_start(); + resize_drags(); } function load_proj_cloud(){ + proj_from = "cloud"; document.getElementById("drags").innerHTML = ""; document.getElementById("top_panel_center").innerText = `${lang("loading")} ${proj_name} ${lang("from")} ${lang("cloud")}`; $.post( "/load_proj",{name:proj_name}) @@ -136,6 +143,7 @@ function load_proj_cloud(){ function load_proj_local(){ // document.getElementById("top_panel_center").innerText = `loading ${proj_name} from local storage`; + proj_from = "local"; if(localStorage.getItem(proj_name) == null){ save_local() } @@ -146,18 +154,30 @@ function load_proj_local(){ function save_local(){ // console.log(objs); + proj_from = "local"; localStorage.setItem(proj_name,JSON.stringify(objs)); } -function save(callback){ +function save(callback,with_pic = true){ // 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); - scr = canvas.toDataURL(); - // if (canvas.toDataURL().length < 120000) scr = canvas.toDataURL() - // console.log(scr); - $.post( "/save_proj", {proj:JSON.stringify(objs),name:proj_name,img:scr}) + proj_from = "cloud"; + if(with_pic){ + 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 src = ""; + src = canvas.toDataURL(); + make_save(src); + }); + } + else{ + make_save("none"); + } + function make_save(src = "none"){ + $.post( "/save_proj", {proj:JSON.stringify(objs),name:proj_name,img:src}) .done(function( res ) { if(res["out"] == "good"){ // console.log(scr) @@ -165,7 +185,7 @@ function save(callback){ if(callback) callback(res); } }) - }); + } } function load_objs(callback){ diff --git a/user.js b/user.js index ccccaf6..a71ed74 100644 --- a/user.js +++ b/user.js @@ -7,7 +7,7 @@ module.exports.login = (inp,cook,res)=>{ let ilogin = func.decrypt(inp["login"],inp["sid"]); let ipass = func.decrypt(inp["pass"],inp["sid"]); - db.cv("users","login",ilogin,(login) => { + db.ggv("users","id","login",`'${ilogin}'`,(login) => {login = login[0]; if(login == null){ res.status(210).send({out:"bad", err:"user"}); } @@ -20,7 +20,6 @@ module.exports.login = (inp,cook,res)=>{ // 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"}); @@ -32,7 +31,6 @@ module.exports.login = (inp,cook,res)=>{ else{ res.status(210).send({out:"bad", err:"pass"}); } - }) }); } @@ -43,51 +41,6 @@ module.exports.login = (inp,cook,res)=>{ // res.send("good"); } -module.exports.reg = (inp,cook,res)=>{ - 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"]}`); - }) - } - 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)=>{ try { db.ggv("users","`login`,`admin`,`id`","uuid",`"${inp["uuid"]}"`,(udata)=>{udata = udata[0]; diff --git a/views/admin.ejs b/views/admin.ejs index 2974f77..f895a19 100644 --- a/views/admin.ejs +++ b/views/admin.ejs @@ -1,92 +1,21 @@ + - <%- include('./static/start.ejs',{name:"admin",async: true}) %> <%- include('./header.ejs') %>

<%= lang("hello admin") %>


-

<%= lang("create new object") %>

-
-
-
-
-
- -
-
- <%= lang('Image preview') %> -
-
- -
-
- "> - -
-
-
-
-
- -
100см
-
- -
-
-
- -
100см
-
- -
-
-
-
+ <%- include('./admin/objects/object_creation.ejs') %>
-

<%= lang("user registration") %>

-
-
- "> - "> - -
-
- - -
-
-
+ <%- include('./admin/users/user_reg.ejs') %> + <%- include('./admin/users/user_edit.ejs') %>
@@ -96,95 +25,4 @@
-<%- include('./static/end.ejs') %> - - - - - \ No newline at end of file +<%- include('./static/end.ejs') %> \ No newline at end of file diff --git a/views/admin/objects/object_creation.ejs b/views/admin/objects/object_creation.ejs new file mode 100644 index 0000000..08a16b4 --- /dev/null +++ b/views/admin/objects/object_creation.ejs @@ -0,0 +1,127 @@ + + + +

<%= lang("create new object") %>

+
+
+
+
+
+ +
+
+ <%= lang('Image preview') %> +
+
+ +
+
+ "> + +
+
+
+
+
+ +
100см
+
+ +
+
+
+ +
100см
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/views/admin/objects/object_edit.ejs b/views/admin/objects/object_edit.ejs new file mode 100644 index 0000000..e69de29 diff --git a/views/admin/users/user_edit.ejs b/views/admin/users/user_edit.ejs new file mode 100644 index 0000000..5fed2e3 --- /dev/null +++ b/views/admin/users/user_edit.ejs @@ -0,0 +1,163 @@ + + +

<%=lang("users")%>

+
+
+

<%= lang("total") %>: 

0

+
<%=lang("from")%> 
0
 <%=lang("to")%> 
10
+
+
+
+
+
  • <%= lang("login") %>
    <%= lang("privileges") %>
    <%= lang("edit") %>
  • +
      +
    +
    +
    + + + diff --git a/views/admin/users/user_reg.ejs b/views/admin/users/user_reg.ejs new file mode 100644 index 0000000..3832ec6 --- /dev/null +++ b/views/admin/users/user_reg.ejs @@ -0,0 +1,44 @@ + +

    <%= lang("user registration") %>

    +
    +
    + "> + "> + +
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/views/header.ejs b/views/header.ejs index 5560b72..a54bd3c 100644 --- a/views/header.ejs +++ b/views/header.ejs @@ -37,7 +37,7 @@ } .cmenu{ position: fixed; - display: block; + display: grid; background: ghostwhite; color: black; cursor: pointer; @@ -60,54 +60,70 @@
    - \ No newline at end of file diff --git a/views/login.ejs b/views/login.ejs index 9ebc734..d1ab1b2 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -1,5 +1,4 @@ -<%- include('./static/start.ejs',{name:'login',async: true}) %> - + +<%- include('./static/start.ejs',{name:'login',async: true}) %> +
    @@ -23,8 +24,6 @@
    -<%- include('./static/end.ejs') %> - +<%- include('./static/end.ejs') %> \ No newline at end of file diff --git a/views/main.ejs b/views/main.ejs index c574384..1d51b12 100644 --- a/views/main.ejs +++ b/views/main.ejs @@ -1,3 +1,4 @@ + - <%- include('./static/start.ejs',{name:'main',async: true}) %> <%- include('./header.ejs') %> + +
    @@ -50,7 +52,6 @@
    -<%- include('./static/end.ejs') %> \ No newline at end of file + +<%- include('./static/end.ejs') %> \ No newline at end of file diff --git a/views/project.ejs b/views/project.ejs index 04ca495..3107818 100644 --- a/views/project.ejs +++ b/views/project.ejs @@ -1,3 +1,7 @@ +<%- include('./static/start.ejs',{name:proj_name,async:true}) %> +<%- include('./header.ejs') %> + + -<%- include('./static/start.ejs',{name:proj_name,async: true}) %> -<%- include('./header.ejs',{async: true}) %> - - - -
    - -
    @@ -128,7 +114,7 @@
    0
    - +
    @@ -142,31 +128,12 @@ <%= lang('black hole') %>
    +
    + -<%- include('./static/end.ejs') %> - \ No newline at end of file + +<%- include('./static/end.ejs') %> \ No newline at end of file diff --git a/views/static/language.ejs b/views/static/language.ejs index a40a39c..65818e1 100644 --- a/views/static/language.ejs +++ b/views/static/language.ejs @@ -15,16 +15,16 @@ language = { "width": "ширина", "img max size": "макс. размер 2мб", "user registration": "регистрация пользователя", - "create object": "создать обьект", + "create object": "создать объект", "admin": "админ", "register": "зарегистрировать", "download logs": "скачать логи", - "create new object": "создание нового обьекта", + "create new object": "создание нового объекта", "logs": "логи", "password": "пароль", "login": "логин", - "object name": "название обьекта", - "object description": "описание обьекта", + "object name": "название объекта", + "object description": "описание объекта", "black hole": "чёрная дыра", "project settings": "настройки проекта", "save to cloud": "сохранить в облако", @@ -43,8 +43,29 @@ language = { "loading": "загружается", "loaded": "загружено", "from": "из", - "to": "в", - "in": "в" + "in": "в", + "edit current / list": "редактирование / просмотр", + "users": "пользователи", + "objects": "объекты", + "back": "назад", + "next": "далле", + "edit": "радактирование", + "name": "имя", + "delete user": "удалить пользователя", + "change privileges": "изменить привилегии", + "change name": "изменить имя", + "change login": "изменить логин", + "change password": "изменить пароль", + "privileges": "привилегии", + "from": "от", + "to": "до", + "for": "для", + "to the": "на", + "total": "всего", + "are you sure you want to change": "вы точно хотите именить", + "admin privileges to": "превилегии администратора на", + "admin privileges": "превилегии администратора", + "are you sure you want to delete user": "вы точно хотите удалить пользователя" }, "en":{ "main page": "main page", @@ -85,8 +106,29 @@ language = { "loading": "loading", "loaded": "loaded", "from": "from", + "in": "in", + "back": "back", + "next": "next", + "edit": "edit", + "name": "name", + "users": "users", + "objects": "objects", + "delete user": "delete user", + "change privileges": "change privileges", + "change name": "change name", + "change login": "change login", + "change password": "change password", + "privileges": "privileges", + "edit current / list": "edit current / list", + "from": "from", "to": "to", - "in": "in" + "for": "for", + "to the": "to the", + "total": "total", + "are you sure you want to change": "are you sure you want to change", + "admin privileges to": "admin privileges to", + "admin privileges": "admin privileges", + "are you sure you want to delete user": "are you sure you want to delete user" } } %> \ No newline at end of file diff --git a/views/static/start.ejs b/views/static/start.ejs index 13cfb89..ca88a59 100644 --- a/views/static/start.ejs +++ b/views/static/start.ejs @@ -10,6 +10,15 @@ <%= name %> + -