diff --git a/db.js b/db.js index d8bbff6..a0abcae 100644 --- a/db.js +++ b/db.js @@ -1,7 +1,8 @@ const mysql = require('mysql'); +const vars = require('./vars'); const logcon = mysql.createConnection({ - host: 'db', + host: 'localhost', user: 'user', password: 'user', database: 'users' @@ -32,6 +33,28 @@ module.exports.cv = (table,key,value,callback) => { }) } +// 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); +// } +// }) +// } + module.exports.dl = (table,key,value,callback) => { // console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); logcon.query('DELETE FROM `'+table+'` WHERE `'+key+'` = '+value, (err, rows, fields) => { @@ -57,15 +80,28 @@ module.exports.gv = (table,key,value,callback) => { }) } + +module.exports.ggv = (table,ekey,key,value,callback) => { + // console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); + logcon.query('SELECT '+ekey+' FROM `'+table+'` WHERE `'+key+'` = '+value, (err, rows, fields) => { + if (err) { + console.log("sql err"); + throw err; + }else{ + callback(rows); + } + }) +} + // set_in module.exports.sv = (table,key,value,ekey,evalue,callback) => { - logcon.query("UPDATE `"+table+"` SET `"+key+"` = '"+value+"' WHERE `"+ekey+"` = '"+evalue+"'", (err , res) => { + logcon.query("UPDATE `"+table+"` SET `"+key+"` = '"+value+"' WHERE `"+ekey+"` = '"+evalue+"'", (err , rows) => { // console.log("UPDATE `"+table+"` SET `"+key+"` = '"+value+"' WHERE `"+ekey+"` = '"+evalue+"'"); if (err) { console.log("sql err"); throw err; }else{ - callback(res); + callback(rows); } }) } diff --git a/func.js b/func.js index db7d936..26243d7 100644 --- a/func.js +++ b/func.js @@ -5,6 +5,8 @@ const cryptojs = require('crypto-js'); const e = require('express'); const fs = require('fs'); const db = require('./db'); +const moment = require("moment"); +const vars = require('./vars'); module.exports.sendfile = (fileName, response) => { const filePath = "./files/"+fileName; @@ -46,9 +48,42 @@ module.exports.check_sid = (Cookies, callback) =>{ }) } +module.exports.sid = (cook,res,callback,auto = true)=>{ + let uuid = cook["uuid"]; + let sid = cook["sid"]; + if(cook["uuid"] != null && cook["sid"] != null){ + db.ggv("sids","`uid`","sid",`'${sid}'`,(sdata)=>{ sdata = sdata[0] + // console.log(sdata); + if(sdata != null){ + db.ggv("users","`uuid`,`id`","id",`'${sdata["uid"]}'`,(udata)=>{ udata = udata[0] + if (udata != null && udata["id"] == sdata["uid"] && uuid == udata["uuid"]){ + callback(true); + } + else{ + if(auto) res.send({out:"bad",err:"wrong"}); + callback(false); + } + }); + } + else{ + if(auto) res.send({out:"bad",err:"expired"}); + callback(false); + } + }); + }else{ + if(auto) res.send({out:"bad",err:"nocr"}); + callback(false); + } +} -module.exports.get_uuid = (name) =>{ - let unid = uuid.v4() + '%'+name+'%%' + uuid.v4() +'#'+(621); +module.exports.log = (comment) =>{ + var date = moment().format('YYYY-MM-DD_hh:mm') + console.log(`${date}|${comment}`); +} + + +module.exports.get_uuid = () =>{ + let unid = uuid.v4() + '%%' + uuid.v4() +'#'+(621); return unid; } diff --git a/index.js b/index.js index aa03665..2b949e3 100644 --- a/index.js +++ b/index.js @@ -1,15 +1,21 @@ const express = require('express'); const db = require('./db'); const func = require('./func'); +const user = require('./user'); +const obj = require('./object'); +const proj = require('./project'); +const vars = require('./vars'); const cookieParser = require('cookie-parser'); -const { - response, - request -} = require('express'); -const { escapeSelector } = require('jquery'); -const { name } = require('ejs'); -const { stringify } = require('uuid'); +// const { +// response, +// request +// } = require('express'); +// const { escapeSelector } = require('jquery'); +// const { name } = require('ejs'); +// const { stringify } = require('uuid'); +// const createApplication = require('express/lib/express'); +// const { render } = require('express/lib/response'); const app = express(); // const { @@ -28,134 +34,30 @@ app.use(express.urlencoded({ })); app.use(express.static('public')); app.use(cookieParser()); -var week = 7 * 24 * 3600 * 1000; app.post('/back_login', (req, res) => { let inp = req.body; let cook = req.cookies; - let ilogin = func.decrypt(inp["login"],inp["sid"]); - let ipass = func.decrypt(inp["pass"],inp["sid"]); - - db.cv("users","login",ilogin,(login) => { - if(login == null){ - res.status(210).send({out:"bad", err:"user"}); - } - else if (login != null){ - db.gv("users","login",`'${ilogin}'`,(udata)=>{udata = udata[0]; - if(ipass == udata["pass"]){ - console.log(udata["uuid"]+" logged in by login & pass from "+cook["sid"]); - res.cookie("uuid",udata["uuid"],{maxAge:week,path:"/;SameSite=Strict"}); - - // db.sv("users","sids",sids += inp["sid"]+";","uuid",udata["uuid"],()=>{}); - db.nr("sids",'`sid`,`uid`',`'${cook["sid"]}','${udata["id"]}'`); - res.send({out:"goto",url:"/main"}); - - // db.gv("users","uuid",udata["uuid"],(rdata)=>{ - // // console.log(rdata["sids"]); - // let sids = rdata["sids"]; - // // console.log(sids.split(";")); - // if(sids != null){ - // if(sids.split(";").includes(inp["sid"])){ - // console.log("good boy"); - // } - // else{ - // db.sv("users","sids",sids += inp["sid"]+";","uuid",udata["uuid"],()=>{}); - // db.nr("sids",'`sid`,`uid`',`'${cook["sid"]}','${udata["id"]}'`); - // // db.sv("sids","uid",sids += inp["sid"]+";","uuid",udata["uuid"], ()=>{}); - // } - // } - // else{ - // db.sv("users","sids",inp["sid"]+";","uuid",udata["uuid"],()=>{}); - // db.nr("sids",'`sid`,`uid`',`'${cook["sid"]}','${udata["id"]}'`); - // } - // }); - // // db.sv("users","id",udata["id"],"uuid",udata["uuid"]+"|"+uuid); - - // if(udata["admin"] == 1){ - // res.send({out:"goto",url:"/main"}); - - // } - // else{ - // res.send({out:"goto",url:"/main"}); - // // res.redirect("main"); - // } - - } - else{ - res.status(210).send({out:"bad", err:"pass"}); - } - }); - } - }) - // res.send("good"); + user.login(inp,cook,res); }); app.post('/reg_user', (req, res) => { let inp = req.body; let cook = req.cookies; - 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) =>{ - // console.log("/reg_user same login recs = "+ldata); - // console.log("/reg_user same uuid recs = "+udata); - if(udata==null && ldata==null){ - good_reg(udata); - // console.log("/reg_user good reg"); - console.log(`user ${login} registered 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){ - console.log("bad user"); - res.send({out:"bad", body:"login"}); - return; - } - }) - }) - } - function good_reg(udata){ - db.nr("users",'`login`,`pass`,`uuid`,`admin`',`'${login}','${pass}','${uuid}',${admin}`); - if (admin){ - db.gv("users","uuid",`'${uuid}'`,(res)=>{ res = res[0] - db.nr("admins",'`login`,`uid`',`'${login}',${res["id"]}`); - }) - } - res.send({out:"good", body:{uuid:uuid,login:login,admin:admin}}); - } + user.reg(inp,cook,res) }) app.post("/sid_log",(req,res) =>{ let inp = req.body; let cook = req.cookies; - - if(cook["uuid"] != null && cook["sid"] != null){ - func.check_sid(cook,(include,id) => { - if (include){ - if(req.headers.referer.split("http://n0rsrv2:3002/")[1] == "login") console.log("good boy "+ id["uuid"]+" logged in by sid logs from " + id["sid"]); - res.send({out:"good",url:"/main"}); - } - else if (!include){ - if(req.headers.referer.split("http://n0rsrv2:3002/")[1] == "login") console.log("bad boy "+ id["uuid"]+" tried to login by sid but sid expired from " + id["sid"]); - res.send({out:"bad"}); - } - }) - } + user.sid_log(inp,cook,res,req); }) app.post("/get_sid" , (req,res) =>{ let inp = req.body; - let sid = func.get_uuid(inp["name"]); - res.cookie("sid",sid,{maxAge:(week),path:"/;SameSite=Strict"}); + let sid = func.get_uuid(); + res.cookie("sid",sid,{maxAge:(vars.week),path:"/;SameSite=Strict"}); res.send({out:"good"}); }); @@ -163,203 +65,75 @@ app.post("/get_sid" , (req,res) =>{ app.post("/clear_sid" , (req,res) =>{ let inp = req.body; let cook = req.cookies; - - // console.log(cook["uuid"],cook["sid"]); - if(cook["sid"] != null){ - // res.send({out:"good"}); - console.log(cook["uuid"] + " logged out from "+cook["sid"]); - db.dl("sids","sid",`'${cook["sid"]}'`,() =>{}); - } - res.send({out:"good"}); + user.clear_sid(inp,cook,res); }); app.post("/get_cr_uuid", (req,res) => { let inp = req.body; - if(inp["uuid"] != null && inp["sid"] != null){ - db.gv("users","uuid",`"${inp["uuid"]}"`,(udata)=>{udata = udata[0]; - let re = udata; - delete re["pass"]; - delete re["uuid"]; - // delete re["sids"]; - func.check_sid(inp,(include,id) => { - if(include){ - res.send({out:"good",body:re}); - } - else if (!include){ - res.send({out:"bad",body:"expired"}); - } - else{ - res.send({out:"bad"}); - } - }) - }); - } + let cook = req.cookies; + func.sid(cook,res,()=>{ + user.get_cr(inp,cook,res); + }) }) app.post("/save_proj", (req,res) => { let inp = req.body; let cook = req.cookies; - let proj = inp["proj"]; - let pname = inp["name"]; - // console.log(inp["img"]); - db.gv("users","uuid",`'${cook["uuid"]}'`, (udata)=>{ udata = udata[0] - db.gv("projects","uid",udata["id"],(pdata)=>{ - let projin = null; - // console.log(pdata); - pdata.forEach(projt => { - if(projt["name"] == pname && projt["uid"] == udata["id"]){ - projin = projt; - return; - } - }) - if(projin == null){ - // console.log("proj not in"); - // console.log(pname,udata["id"],proj); - console.log(`${udata["uuid"]} created project ${pname} from ${cook["sid"]}`); - db.nr("projects","`uid`,`name`,`body`,`img`",`'${udata["id"]}','${pname}','${proj}','${inp["img"]}'`); - res.send({out:"good"}); - } else if (projin != null){ - db.sv("projects","body",proj,"id",projin["id"],()=>{}); - if(inp["img"] != "") db.sv("projects","img",inp["img"],"id",projin["id"],()=>{}); - console.log(`${udata["uuid"]} saved project ${projin["name"]} from ${cook["sid"]}`); - // console.log("proj in"); - res.send({out:"good"}); - } - }) + // func.log(inp["img"]); + func.sid(cook,res,()=>{ + proj.save(inp,cook,res); }) }) app.post("/load_proj", (req,res) => { let inp = req.body; let cook = req.cookies; - if(cook['sid'] != null && cook['uuid'] != null){ - db.gv("users","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0]; - db.gv("projects","uid",udata["id"],(pdata)=>{ - let projt = null; - // console.log(inp["name"]); - pdata.forEach(proj => { - if(proj["name"] == inp["name"]){ - projt = proj; - } - }) - if (projt != null){ - console.log(`${udata["uuid"]} loaded project ${projt["name"]} from ${cook["sid"]}`); - res.send({out:"good",body:projt["body"]}); - } - else{ - res.send({out:"bad proj"}); - } - }) - }) - } - else{ - res.send({out:"bad"}); - } + func.sid(cook,res,()=>{ + proj.load(inp,cook,res); + }) }) app.post("/get_projs", (req,res) => { let inp = req.body; let cook = req.cookies; - if(cook['sid'] != null && cook['uuid'] != null){ - db.gv("users","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0]; - db.gv("projects","uid",udata["id"],(pdata)=>{ - res.send({out:"good",body:pdata}); - }) - }) - } - else{ - res.send({out:"bad"}); - } + func.sid(cook,res,()=>{ + proj.loads(inp,cook,res); + }) }) app.post("/new_obj", (req,res) => { let inp = req.body; let cook = req.cookies; - if(cook['sid'] != null && cook['uuid'] != null){ - // console.log(inp["name"],inp["img"]); - db.cv("objects","name",inp["name"],(include)=>{ - if(include){ - res.send({out:"bad",err:"name"}); - } - else if (!include){ - db.nr("objects","`name`,`img`,`height`,`width`,`description`",`'${inp["name"]}','${inp["img"]}','1','1','${inp["desc"]}'`); - res.send({out:"good"}); - } - }) - } + func.sid(cook,res,()=>{ + obj.new(inp,cook,res); + }) }) app.post("/get_objs", (req,res) => { let inp = req.body; let cook = req.cookies; - // console.log(inp["name"]); - if(cook['sid'] != null && cook['uuid'] != null){ - db.gv("objects","gid",0,(odata)=>{ - // console.log(odata); - // Object.keys(odata).forEach(([key,value]) => { - // }); - odata.forEach(element => { - delete element["img"] - }); - res.send({out:"good",body:odata}); - }) - } + // func.log(inp["name"]); + func.sid(cook,res,()=>{ + obj.loads(inp,cook,res); + }) }) app.post("/get_obj", (req,res) => { let inp = req.body; let cook = req.cookies; - // console.log(inp["name"]); - if(cook['sid'] != null && cook['uuid'] != null){ - db.gv("objects","name",`'${inp["name"]}'`,(odata)=>{ - // console.log(odata); - res.send({out:"good",body:odata[0]}); - }) - } + // func.log(inp["name"]); + func.sid(cook,res,()=>{ + obj.load(inp,cook,res); + }) }) -// app.post("/set_cr_uuid", (req,res) => { -// let inp = req.body; -// if(inp["uuid"] != null && inp["sid"] != null){ -// db.sv("users"); -// } -// }) - -// app.post("/get_uuid" , (req,res) =>{ -// let inp = req.body; -// db.gv("users","login",inp["login"],(udata)=>{ -// let uuid = udata["uuid"]; -// res.send({out:'good',body:uuid}); -// }); -// }); - - -// web pages -// app.get("/jq.js", (req,res) =>{ -// func.sendfile("./jquery.js",res); -// }) - -// app.post("/user" , (req,res) =>{ -// // let inp = req.body; -// // let cook = req.cookies; -// // let sid = cook["sid"]; -// // let uuid = cook["uuid"]; -// // // console.log(req.cookieParser.JSONCookie("sid")); -// // // console.log('Cookies: ', req.cookies); -// // console.log(uuid," - ",sid); -// res.render("main"); -// // db.gv("users","uuid",uuid,(db) => { - -// // }); -// }) - +// pages app.get("/reg" , (req,res) =>{ res.render('reg'); }) app.get("/proj/:name" , (req,res) =>{ - // res.cookie res.render('project',{proj_name:req.params["name"]}); }) @@ -375,8 +149,13 @@ app.get("/admin", (req,res) =>{ res.render('admin'); }); -// app.get("/main/:id", (req,res) =>{ -// res.render('main'); +// app.get("/test", (req,res) =>{ +// let inp = req.body; +// let cook = req.cookies; +// func.sid(cook,res,()=>{ +// console.log("asd"); +// }) + // }); app.get('/', (req, res) => { @@ -392,4 +171,4 @@ app.all('*', (req, res) => { res.status(404).send('

404! Page not


go to main page'); }); -app.listen(process.env.PORT || 8080, () => console.log("started")); \ No newline at end of file +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 new file mode 100644 index 0000000..9104d9d --- /dev/null +++ b/object.js @@ -0,0 +1,30 @@ +const db = require('./db'); +const func = require('./func'); +const vars = require('./vars'); + +module.exports.loads = (inp,cook,res)=>{ + db.ggv("objects","`name`,`id`,`height`,`width`,`description`","gid",0,(odata)=>{ + // func.log(odata); + res.send({out:"good",body:odata}); + }) +} + +module.exports.load = (inp,cook,res)=>{ + let keys = inp["key"]; + db.ggv("objects",keys,"name",`'${inp["name"]}'`,(odata)=>{ + // func.log(odata); + res.send({out:"good",body:odata[0]}); + }) +} + +module.exports.new = (inp,cook,res)=>{ + db.cv("objects","name",inp["name"],(include)=>{ + if(include){ + res.send({out:"bad",err:"name"}); + } + else if (!include){ + db.nr("objects","`name`,`img`,`height`,`width`,`description`",`'${inp["name"]}','${inp["img"]}','${inp["height"]}','${inp["width"]}','${inp["desc"]}'`); + res.send({out:"good"}); + } + }) +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9a3fde9..56ad578 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "ejs": "^3.1.9", "express": "^4.18.2", "jquery": "^3.7.0", + "moment": "^2.29.4", "mysql": "^2.18.1", "uuid": "^9.0.0" } @@ -586,6 +587,14 @@ "node": "*" } }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", diff --git a/package.json b/package.json index 5f18d82..0863ec6 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "ejs": "^3.1.9", "express": "^4.18.2", "jquery": "^3.7.0", + "moment": "^2.29.4", "mysql": "^2.18.1", "uuid": "^9.0.0" }, diff --git a/project.js b/project.js new file mode 100644 index 0000000..4041fc4 --- /dev/null +++ b/project.js @@ -0,0 +1,60 @@ +const db = require('./db'); +const func = require('./func'); +const vars = require('./vars'); + +module.exports.load = (inp,cook,res)=>{ + db.gv("users","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0]; + db.gv("projects","uid",udata["id"],(pdata)=>{ + let projt = null; + // func.log(inp["name"]); + pdata.forEach(proj => { + if(proj["name"] == inp["name"]){ + projt = proj; + } + }) + if (projt != null){ + func.log(`good boy ${udata["uuid"]} loaded project ${projt["name"]} from ${cook["sid"]}`); + res.send({out:"good",body:projt["body"]}); + } + else{ + res.send({out:"bad proj"}); + } + }) + }) +} + +module.exports.loads = (inp,cook,res)=>{ + db.ggv("users","`id`","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0]; + db.gv("projects","uid",udata["id"],(pdata)=>{ + res.send({out:"good",body:pdata}); + }) + }) +} + +module.exports.save = (inp,cook,res)=>{ + db.gv("users","uuid",`'${cook["uuid"]}'`, (udata)=>{ udata = udata[0] + db.gv("projects","uid",udata["id"],(pdata)=>{ + let projin = null; + // func.log(pdata); + pdata.forEach(projt => { + if(projt["name"] == inp["name"] && projt["uid"] == udata["id"]){ + projin = projt; + return; + } + }) + if(projin == null){ + // func.log("proj not in"); + // func.log(pname,udata["id"],proj); + func.log(`good boy ${udata["uuid"]} created project ${inp["name"]} from ${cook["sid"]}`); + db.nr("projects","`uid`,`name`,`body`,`img`",`'${udata["id"]}','${inp["name"]}','${inp["proj"]}','${inp["img"]}'`); + res.send({out:"good"}); + } else if (projin != null){ + db.sv("projects","body",inp["proj"],"id",projin["id"],()=>{}); + if(inp["img"] != "") db.sv("projects","img",inp["img"],"id",projin["id"],()=>{}); + func.log(`good boy ${udata["uuid"]} saved project ${projin["name"]} from ${cook["sid"]}`); + // func.log("proj in"); + res.send({out:"good"}); + } + }) + }) +} \ No newline at end of file diff --git a/public/lib/fn.js b/public/lib/fn.js index 4dfc5b2..ce5d4c0 100644 --- a/public/lib/fn.js +++ b/public/lib/fn.js @@ -1,43 +1,3 @@ -function blogin(){ - log(document.getElementById('login').value,document.getElementById('pass').value); -} - -function log(nlogin,npass){ - const login = CryptoJS.AES.encrypt(nlogin,$.cookie("sid")).toString(); - const pass = CryptoJS.AES.encrypt(npass,$.cookie("sid")).toString(); - const sid = $.cookie("sid"); - $.post( "/back_login", { login:login,pass:pass,sid:sid }) - .done(function( res ) { - if (res["out"] == "bad"){ - console.log(res["err"]); - if (res["err"] == "user" || res["err"] == "pass"){ - document.querySelector("#res").innerHTML = "

wrong password or login

"; - } - } - else{ - if(res["out"] == "goto"){ - // postForm(res["url"], res["args"]); - goto(res["url"]); - } - } - }); -} - -// function get_from_uuid(callback){ -// const uid = $.cookie("uuid"); -// const sid = $.cookie("sid"); -// $.post( "/get_cr_uuid", { uuid:uid,sid:sid }) -// .done(function( res ) { -// if (res["out"] == "good"){ -// callback(res["body"]) -// } -// else if (res["out"] == bad){ -// if (res["body"] == "expired"){ -// clear_ck(); -// } -// } -// }); -// } function get_from_uuid(callback){ const uid = $.cookie("uuid"); const sid = $.cookie("sid"); @@ -61,7 +21,7 @@ function log_by_sid() { // console.log("log"); if($.cookie('uuid') == null && $.cookie('sid') == null){ // get_sid(location.hostname); - get_sid(location.hostname); + get_sid(); }else if ($.cookie('sid') != null && $.cookie('uuid') != null){ $.post( "/sid_log") .done(function( res ) { @@ -85,7 +45,7 @@ function clear_ck(redirect = true){ $.removeCookie("uuid"); $.removeCookie('sid'); console.log("clear"); - get_sid(location.hostname); + get_sid(); if(res["out"] == "good"){ if (redirect) goto("/login"); } @@ -122,17 +82,9 @@ function ask() { } } -// function goto_proj(name){ -// $.post( "/proj/"+name, { name:hostname }) -// .done(function( res ) { -// // if(res["out"] == "good"){ -// // console.log(res["body"]); -// // } -// }); -// } -function get_sid(hostname){ - $.post( "/get_sid", { name:hostname }) +function get_sid(){ + $.post( "/get_sid", {}) .done(function( res ) { // if(res["out"] == "good"){ // console.log(res["body"]); @@ -140,26 +92,6 @@ function get_sid(hostname){ }); } -function new_obj(name,img,height,width,description,callback){ - $.post( "/new_obj", { name:name,img:img,desc:description }) - .done(function( res ) { - // if(res["out"] == "good"){ - // console.log(res["body"]); - // } - callback(res); - }); -} - -function load_projs(callback){ - $.post( "/get_projs") - .done(function( res ) { - if(res["out"] == "good"){ - // console.log(res["body"]); - callback(res["body"]); - } - }); -} - // redirect function goto(url) { location.href = url; diff --git a/public/lib/inter.js b/public/lib/inter.js index a6f8662..2c00d8b 100644 --- a/public/lib/inter.js +++ b/public/lib/inter.js @@ -8,7 +8,7 @@ function get_count(clas){ return count; } -function create(clas,x,y,body,id){ +function create(clas,x,y,body,id,size){ let main_clas = clas.split(" ")[0]; // if (body == null || body == "") body = "[]"; let obj = document.createElement("img"); @@ -18,7 +18,7 @@ function create(clas,x,y,body,id){ clas.forEach(cl => { obj.classList.add(cl); }); - load_obj(main_clas,(db_data)=>{ + load_obj(main_clas,"`img`,`name`,`description`,`width`,`height`",(db_data)=>{ if (db_data == null) { delete objs[main_clas][id]; save(()=>{ @@ -27,7 +27,12 @@ function create(clas,x,y,body,id){ } else if (db_data != null){ obj.src = db_data["img"]; - obj.title = `${db_data["name"]} \n ${db_data["description"]}`; + obj.title = `${db_data["name"]}\n${db_data["description"]}\nwidth:${db_data["width"]}см height:${db_data["height"]}см`; + // drag.transform = `translate(${drag.getAttribute("data-y")}px, ${drag.getAttribute("data-y")}px) scale(${db_data["width"] * 2} ${db_data["height"] * 2})`; + if(size){ + obj.style.width = `${db_data["width"] * 2}px`; + obj.style.height = `${db_data["height"] * 2}px`; + } } }) obj.setAttribute("max-width","100px"); @@ -41,7 +46,8 @@ function wall_size_change(type,value){ if(type != null && type == "width") { if (value == null) scroll = document.getElementById("wall_width").value; else scroll = value; - document.getElementById("wall_width_value").innerHTML = (Math.ceil((parseFloat(scroll)+0.1)*10)/ 10); + // document.getElementById("wall_width_value").innerHTML = (Math.ceil((parseFloat(scroll)+0.1)*10)/ 10); + document.getElementById("wall_width_value").innerHTML = scroll; // console.log(scroll); wall.style.width = `${scroll * 200}px`; @@ -50,7 +56,8 @@ function wall_size_change(type,value){ if(type != null && type == "height") { if (value == null) scroll = document.getElementById("wall_height").value; else scroll = value; - document.getElementById("wall_height_value").innerHTML = (Math.ceil((parseFloat(scroll)+0.1)*10)/ 10); + // document.getElementById("wall_height_value").innerHTML = (Math.ceil((parseFloat(scroll)+0.1)*10)/ 10); + document.getElementById("wall_height_value").innerHTML = scroll; // console.log(scroll); wall.style.height = `${scroll * 200}px`; @@ -71,21 +78,23 @@ function load_local(objss){ // console.log(keys,value["x"],value["y"],value["body"]); // let count = Object.keys(objs[keys]).length; // console.log(count); - create(keys+" drag",value["x"],value["y"],value["body"],key); + create(keys+" drag",value["x"],value["y"],value["body"],key,true); } }) } else { document.getElementById(`wall_${keys}`).value = values; wall_size_change(keys,values); + // document.getElementById("drags").style.left = $(".dropzone")[0].getBoundingClientRect().x; } }); + document.getElementById("drags").style.left = $(".dropzone")[0].getBoundingClientRect().x; + drag_start(); } function load_proj(){ $.post( "/load_proj",{name:proj_name}) .done(function( res ) { - drag_start(); if(res["out"] == "good"){ // console.log("good"); // console.log(JSON.parse(`'${res["body"]}'`)); @@ -107,7 +116,7 @@ function save(callback){ html2canvas(document.querySelector("body"),{height: 500, width:(window.innerWidth /1.65),x:(window.innerWidth / 5), y:250}).then(canvas => { let scr = ""; console.log(canvas.toDataURL().length); - if (canvas.toDataURL().length < 100000) 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}) .done(function( res ) { @@ -130,8 +139,8 @@ function load_objs(callback){ }); } -function load_obj(name,callback){ - $.post( "/get_obj",{name:name}) +function load_obj(name,key,callback){ + $.post( "/get_obj",{name:name,key:key}) .done(function( res ) { if(res["out"] == "good"){ // console.log(res["body"]); @@ -152,13 +161,14 @@ function dragMoveListener (event) { var y = (parseFloat(drag.getAttribute('data-y')) || 0) + event.dy set_pos(drag,x,y); } - + let dragzone = document.getElementsByClassName('wall')[0]; interact('.drag').draggable({ inertia: true, - // modifiers: [ - // interact.modifiers.restrictRect({restriction: 'parent',endOnly: true}), - // interact.modifiers.snap({targets: [interact.snappers.grid({ x: 5, y: 5 })],range: Infinity,relativePoints: [ { x: 0, y: 0 } ]}),], - // autoScroll: true, + modifiers: [ + interact.modifiers.restrictRect({restriction: dragzone,endOnly: true}), + interact.modifiers.snap({targets: [interact.snappers.grid({ x: 2, y: 2 })],range: Infinity,relativePoints: [ { x: 0, y: 0 } ]}), + ], + autoScroll: true, listeners: {move: dragMoveListener, end (event) {}} }) @@ -166,13 +176,18 @@ interact('.trash').dropzone({ accept: '.drag', overlap: 0.2, - ondragenter: function (event) {var drag = event.relatedTarget;var zone = event.target; zone.classList.add('drop-target');drag.classList.add('can-drop');}, + ondragenter: function (event) { + var drag = event.relatedTarget; + var zone = event.target; + delete objs[drag.classList[0]][drag.id]; + drag.remove(); + zone.classList.add('drop-target'); + drag.classList.add('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) { var drag = event.relatedTarget; // console.log(drag.id); - delete objs[drag.classList[0]][drag.id]; - drag.remove(); // console.log(objs); drag.classList.add('in_zone') drag.classList.remove('can-drop') @@ -217,11 +232,19 @@ interact('.createzone').dropzone({ ondragleave: function (event) { var drag = event.relatedTarget; var zone = event.target; + if(drag.classList[1] == "spawn" && drag.classList[0] == zone.classList[0]){ + load_obj(drag.classList[0],"`height`, `width`",(db_data)=>{ + // drag.transform = `translate(${drag.getAttribute("data-y")}px, ${drag.getAttribute("data-y")}px) scale(${db_data["width"] * 2} ${db_data["height"] * 2})`; + drag.style.width = `${db_data["width"] * 2}px`; + drag.style.height = `${db_data["height"] * 2}px`; + console.log(db_data); + }) + let x = zone.getBoundingClientRect().left - document.getElementById("drags").getBoundingClientRect().left; + let y = zone.getBoundingClientRect().top - document.getElementById("drags").getBoundingClientRect().top; + create(`${zone.classList[0]} spawn drag`,x,y,`${zone.classList[0]}`,`none`); + drag.classList.remove('spawn'); + } zone.classList.remove('drop-target'); - drag.classList.remove('spawn'); - let x = zone.getBoundingClientRect().left + window.scrollX - 15; - let y = zone.getBoundingClientRect().top + window.scrollY - 32; - create(`${zone.classList[0]} drag spawn`,x,y,`${zone.classList[0]}`,`none`); }, ondrop: function (event) {var drag = event.relatedTargetdrag.classList.remove('in_zone');drag.classList.remove('can-drop');}, ondropdeactivate: function (event) {var zone = event.target;zone.classList.remove('drop-active');zone.classList.remove('drop-target');} @@ -230,10 +253,10 @@ interact('.createzone').dropzone({ function drag_start() { let zones = document.getElementsByClassName("createzone"); Object.entries(zones).forEach(([key, zone]) => { - let x = zone.getBoundingClientRect().left - scrollX - 15; - let y = zone.getBoundingClientRect().top - scrollY - 32; + let x = zone.getBoundingClientRect().left - document.getElementById("drags").getBoundingClientRect().left; + let y = zone.getBoundingClientRect().top - document.getElementById("drags").getBoundingClientRect().top; // console.log(x,y); - create(`${zone.classList[0]} drag spawn`,x,y,`${zone.classList[0]}`,`none`); + create(`${zone.classList[0]} spawn drag`,x,y,`${zone.classList[0]}`,`none`); }); } diff --git a/user.js b/user.js new file mode 100644 index 0000000..b603b51 --- /dev/null +++ b/user.js @@ -0,0 +1,105 @@ +const db = require('./db'); +const func = require('./func'); +const vars = require('./vars'); + +module.exports.login = (inp,cook,res)=>{ + let ilogin = func.decrypt(inp["login"],inp["sid"]); + let ipass = func.decrypt(inp["pass"],inp["sid"]); + + db.cv("users","login",ilogin,(login) => { + if(login == null){ + res.status(210).send({out:"bad", err:"user"}); + } + else if (login != null){ + db.gv("users","login",`'${ilogin}'`,(udata)=>{udata = udata[0]; + if(ipass == udata["pass"]){ + func.log("good boy "+udata["uuid"]+" logged in by login & pass from "+cook["sid"]); + res.cookie("uuid",udata["uuid"],{maxAge:vars.week,path:"/;SameSite=Strict"}); + + // db.sv("users","sids",sids += inp["sid"]+";","uuid",udata["uuid"],()=>{}); + db.nr("sids",'`sid`,`uid`',`'${cook["sid"]}','${udata["id"]}'`); + res.send({out:"goto",url:"/main"}); + + } + else{ + res.status(210).send({out:"bad", err:"pass"}); + } + }); + } + }) + // res.send("good"); +} + +module.exports.reg = (inp,cook,res)=>{ + let uuid = func.get_uuid(inp["login"]); + let admin = inp["admin"]; + let pass = inp["pass"]; + let login = inp["login"]; + check_db(); + function check_db() { + db.cv("users","login",inp["login"], (ldata)=>{ + db.cv("users","login",inp["uuid"],(udata) =>{ + // func.log("/reg_user same login recs = "+ldata); + // func.log("/reg_user same uuid recs = "+udata); + if(udata==null && ldata==null){ + good_reg(); + // func.log("/reg_user good reg"); + func.log(`good boy ${uuid} registered user ${login} with uuid = ${uuid} admin = ${admin}`); + + } + 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}}); + } +} + +module.exports.get_cr = (inp,cook,res)=>{ + db.ggv("users","`login`,`admin`,`id`","uuid",`"${inp["uuid"]}"`,(udata)=>{udata = udata[0]; + // delete re["sids"]; + if(udata != null){ + res.send({out:"good",body:udata}); + }else{ + res.send({out:"bad"}); + } + }); +} + +module.exports.clear_sid = (inp,cook,res)=>{ + if(cook["sid"] != null){ + // res.send({out:"good"}); + func.log("good boy"+cook["uuid"] + " logged out from "+cook["sid"]); + db.dl("sids","sid",`'${cook["sid"]}'`,() =>{}); + } + res.send({out:"good"}); +} + +module.exports.sid_log=(inp,cook,res,req)=>{ + func.sid(cook,res,(include) => { + if (include){ + if(req.headers.referer.split("http://n0rsrv2:3002/")[1] == "login") func.log("good boy "+ id["uuid"]+" logged in by sid logs from " + id["sid"]); + res.send({out:"good",url:"/main"}); + } + else if (!include){ + 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"]); + res.send({out:"bad"}); + } + },false) +} \ No newline at end of file diff --git a/vars.js b/vars.js new file mode 100644 index 0000000..333035f --- /dev/null +++ b/vars.js @@ -0,0 +1 @@ +module.exports.week = 7 * 24 * 3600 * 1000; diff --git a/views/admin.ejs b/views/admin.ejs index 0947e63..8f76b14 100644 --- a/views/admin.ejs +++ b/views/admin.ejs @@ -3,6 +3,31 @@ display: flex; justify-content: space-between; margin: auto; + /* margin-bottom: 50px; */ + } + #img_file{ + text-overflow:ellipsis; + max-width:100px; + } + .img_preview{ + /* width: 50px; + height: 20px; */ + display: flex; + } + #img_prev{ + height: 200px; + width: 200px; + } + + @@ -12,89 +37,148 @@

hello admin

-
-
-
- Image preview... +
+
+
+
+ +
+
+ Image preview... +
+
+
+
+
+ +
100см
+
+ +
+
+
+ +
100см
+
+ +
+
+
- + + - -<%- include('./reg.ejs') %> + function create_obj(){ + let name = document.getElementById("nobj_name").value; + let description = document.getElementById("nobj_description").value; + let height = document.getElementById("obj_height").value; + let width = document.getElementById("obj_width").value; + var img = document.querySelector('img').src; + name = name.replace(" ","_"); + if (img != "http://n0rsrv2:3002/admin"){ + document.getElementById("obj_resp").innerHTML = "creating object"; + new_obj(name,img,height,width,description,(res)=>{ + if(res["out"] == "bad" && res["err"] == "name"){ + document.getElementById("obj_resp").innerHTML = "object already exist"; + } + else if(res["out"] == "good"){ + document.getElementById("obj_resp").innerHTML = "object created"; + } + }); + } + else{ + document.getElementById("obj_resp").innerHTML = "image not selected"; + } + } -<%- include('./static/end.ejs') %> \ No newline at end of file + \ No newline at end of file diff --git a/views/header.ejs b/views/header.ejs index 189ba2f..59bba5d 100644 --- a/views/header.ejs +++ b/views/header.ejs @@ -27,21 +27,6 @@ /* } */
-
@@ -49,4 +34,20 @@
-
\ No newline at end of file + + + \ No newline at end of file diff --git a/views/login.ejs b/views/login.ejs index 3b62a69..dbcb3f5 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -1,4 +1,4 @@ -<%- include('./static/start.ejs',{name:'login',async: true,sid_check:"yes"}) %> +<%- include('./static/start.ejs',{name:'login',async: true}) %> - -<%- include('./static/start.ejs',{name:"reg",async: true}) %> - -
-

user registration

-
-
- - - -
-
- - -
-
-
- - - - -
diff --git a/views/static/end.ejs b/views/static/end.ejs index d9ab2bc..59212f1 100644 --- a/views/static/end.ejs +++ b/views/static/end.ejs @@ -1,3 +1,11 @@ +
+
+ oh no html breaking!
+ please don't use custom scale for this window +
+
+ + - - + \ No newline at end of file diff --git a/views/static/start.ejs b/views/static/start.ejs index 5cb05a7..648e512 100644 --- a/views/static/start.ejs +++ b/views/static/start.ejs @@ -8,10 +8,8 @@ - <%= name %> -