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('