From af8e44d1ce9ae9ed53684410b2168d116b1013fe Mon Sep 17 00:00:00 2001
From: N0rdye <dev@n0r.su>
Date: Sat, 1 Jul 2023 23:16:45 +0500
Subject: [PATCH] fixed object load

---
 back_users.sql      | 209 ++++++++++++++++++++++++++++++++++++++++++++
 index.js            |   7 +-
 public/lib/inter.js |   4 +-
 views/admin.ejs     |   4 +-
 views/project.ejs   |   4 +-
 views/reg.ejs       |  13 ++-
 6 files changed, 230 insertions(+), 11 deletions(-)
 create mode 100644 back_users.sql

diff --git a/back_users.sql b/back_users.sql
new file mode 100644
index 0000000..9254d26
--- /dev/null
+++ b/back_users.sql
@@ -0,0 +1,209 @@
+-- phpMyAdmin SQL Dump
+-- version 5.2.1
+-- https://www.phpmyadmin.net/
+--
+-- Хост: db
+-- Время создания: Июл 01 2023 г., 08:40
+-- Версия сервера: 8.0.33
+-- Версия PHP: 8.1.19
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+START TRANSACTION;
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- База данных: `users`
+--
+
+CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'user';
+GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'user'@'%' WITH GRANT OPTION;
+
+
+-- CREATE DATABASE IF NOT EXISTS `users` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
+-- USE `users`;
+
+-- --------------------------------------------------------
+
+--
+-- Структура таблицы `admins`
+--
+
+CREATE TABLE `admins` (
+  `id` int NOT NULL,
+  `login` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `uid` int NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+--
+-- Дамп данных таблицы `admins`
+--
+
+INSERT INTO `admins` (`id`, `login`, `uid`) VALUES
+(18, 'admin', 34);
+
+-- --------------------------------------------------------
+
+--
+-- Структура таблицы `objects`
+--
+
+CREATE TABLE `objects` (
+  `id` int NOT NULL,
+  `name` text NOT NULL,
+  `img` text NOT NULL,
+  `height` smallint NOT NULL,
+  `width` smallint NOT NULL,
+  `description` mediumtext NOT NULL,
+  `gid` int NOT NULL DEFAULT '0'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- --------------------------------------------------------
+
+--
+-- Структура таблицы `projects`
+--
+
+CREATE TABLE `projects` (
+  `id` int NOT NULL,
+  `name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `uid` int NOT NULL,
+  `body` json NOT NULL,
+  `img` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- --------------------------------------------------------
+
+--
+-- Структура таблицы `sids`
+--
+
+CREATE TABLE `sids` (
+  `id` int NOT NULL,
+  `sid` text NOT NULL,
+  `uid` int NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- --------------------------------------------------------
+
+--
+-- Структура таблицы `users`
+--
+
+CREATE TABLE `users` (
+  `id` int NOT NULL,
+  `login` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `pass` varchar(1000) NOT NULL,
+  `admin` int DEFAULT '0',
+  `uuid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+--
+-- Дамп данных таблицы `users`
+--
+
+INSERT INTO `users` (`id`, `login`, `pass`, `admin`, `uuid`) VALUES
+(34, 'admin', 'admin', 1, '7a910a34-8b80-4a60-8445-2400920be5d3%admin%%4a576825-deea-403d-bf0b-46bb98bb80fd#621');
+
+--
+-- Индексы сохранённых таблиц
+--
+
+--
+-- Индексы таблицы `admins`
+--
+ALTER TABLE `admins`
+  ADD PRIMARY KEY (`id`),
+  ADD UNIQUE KEY `uid` (`uid`) USING BTREE;
+
+--
+-- Индексы таблицы `objects`
+--
+ALTER TABLE `objects`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- Индексы таблицы `projects`
+--
+ALTER TABLE `projects`
+  ADD PRIMARY KEY (`id`),
+  ADD KEY `uid` (`uid`);
+
+--
+-- Индексы таблицы `sids`
+--
+ALTER TABLE `sids`
+  ADD PRIMARY KEY (`id`),
+  ADD KEY `uid` (`uid`);
+
+--
+-- Индексы таблицы `users`
+--
+ALTER TABLE `users`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- AUTO_INCREMENT для сохранённых таблиц
+--
+
+--
+-- AUTO_INCREMENT для таблицы `admins`
+--
+ALTER TABLE `admins`
+  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=19;
+
+--
+-- AUTO_INCREMENT для таблицы `objects`
+--
+ALTER TABLE `objects`
+  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=20;
+
+--
+-- AUTO_INCREMENT для таблицы `projects`
+--
+ALTER TABLE `projects`
+  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=27;
+
+--
+-- AUTO_INCREMENT для таблицы `sids`
+--
+ALTER TABLE `sids`
+  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=72;
+
+--
+-- AUTO_INCREMENT для таблицы `users`
+--
+ALTER TABLE `users`
+  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=35;
+
+--
+-- Ограничения внешнего ключа сохраненных таблиц
+--
+
+--
+-- Ограничения внешнего ключа таблицы `admins`
+--
+ALTER TABLE `admins`
+  ADD CONSTRAINT `admins_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
+
+--
+-- Ограничения внешнего ключа таблицы `projects`
+--
+ALTER TABLE `projects`
+  ADD CONSTRAINT `projects_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
+
+--
+-- Ограничения внешнего ключа таблицы `sids`
+--
+ALTER TABLE `sids`
+  ADD CONSTRAINT `sids_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
+COMMIT;
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/index.js b/index.js
index 767dd3f..aa03665 100644
--- a/index.js
+++ b/index.js
@@ -20,7 +20,7 @@ const app = express();
 // const { mainModule } = require('process');
 // const { name } = require('ejs');
 
-const maxRequestBodySize = '10mb';
+const maxRequestBodySize = '50mb';
 app.set('view engine', 'ejs');
 app.use(express.urlencoded({
     extended: false,
@@ -296,6 +296,11 @@ app.post("/get_objs", (req,res) => {
     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});
         })
     }
diff --git a/public/lib/inter.js b/public/lib/inter.js
index a31425c..a6f8662 100644
--- a/public/lib/inter.js
+++ b/public/lib/inter.js
@@ -25,7 +25,7 @@ function create(clas,x,y,body,id){
                 goto("/proj/"+proj_name);
             });
         }
-        else{
+        else if (db_data != null){
             obj.src = db_data["img"];
             obj.title = `${db_data["name"]} \n ${db_data["description"]}`;
         }
@@ -107,7 +107,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 < 80000) scr = canvas.toDataURL()
+        if (canvas.toDataURL().length < 100000) scr = canvas.toDataURL()
         // console.log(scr);
         $.post( "/save_proj", {proj:JSON.stringify(objs),name:proj_name,img:scr})
         .done(function( res ) {
diff --git a/views/admin.ejs b/views/admin.ejs
index 65c781b..0947e63 100644
--- a/views/admin.ejs
+++ b/views/admin.ejs
@@ -13,7 +13,7 @@
         <h1>hello admin</h1>
         <div class="nobj">
             <div class="img_preview">
-                <label for="img_file">max size 1mb</label><br>
+                <label for="img_file">max size 2mb</label><br>
                 <input type="file" id="img_file" onchange="previewFile()"  accept="image/*" value="" maxlength="1"><br>
                 <img src="" height="100" alt="Image preview...">
             </div>
@@ -61,8 +61,8 @@
             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,0,0,description,(res)=>{
-                    document.getElementById("obj_resp").innerHTML = "creating object";
                     if(res["out"] == "bad" && res["err"] == "name"){
                         document.getElementById("obj_resp").innerHTML = "object already exist";
                     }
diff --git a/views/project.ejs b/views/project.ejs
index 84677a9..5830656 100644
--- a/views/project.ejs
+++ b/views/project.ejs
@@ -109,7 +109,7 @@
 </div>
 <section class="main">
     <div id="proj_top">
-        <button id="proj_save_btn" onclick="save((res)=>{document.getElementById('proj_save_btn').innerHTML='saved';setTimeout((res)=>{document.getElementById('proj_save_btn').innerHTML='save'},3000)})">save</button>  
+        <button id="proj_save_btn" onclick="document.getElementById('proj_save_btn').innerHTML='saving';save((res)=>{document.getElementById('proj_save_btn').innerHTML='saved';setTimeout((res)=>{document.getElementById('proj_save_btn').innerHTML='save'},3000)})">save</button>  
         <input id="proj_name"></input>
     </div>
 </section>
@@ -182,6 +182,7 @@
             czone.classList.add("createzone");
             czones.append(czone)
         });
+        load_proj();
     })
 </script>
 <script>
@@ -189,6 +190,5 @@
     // console.log(proj_name);
     document.getElementById("proj_name").value = proj_name;
     // drag_start();
-    load_proj();
 </script>
 <%- include('./static/end.ejs') %>
\ No newline at end of file
diff --git a/views/reg.ejs b/views/reg.ejs
index dee5d31..a423770 100644
--- a/views/reg.ejs
+++ b/views/reg.ejs
@@ -15,10 +15,15 @@
 <form action="" method="get" onsubmit="return false;" id="reg_form">
     <h1>user registration</h1>
     <section class="main_sec">
-        <input type="text" id="login" name="login">
-        <input type="password" id="pass" name="pass">
-        <input type="checkbox" name="admin" value='false' id="admin_check">
-        <button onclick='reg();'>reg</button>
+        <div>
+            <input type="text" id="login" name="login" placeholder="login">
+            <input type="password" id="pass" name="pass" placeholder="password">
+            <button onclick='reg();'>reg</button>
+        </div>
+        <div>
+            <label for="admin_check">admin</label>
+            <input type="checkbox" name="admin" value='false' id="admin_check">
+        </div>
         <div id="reg_response"></div>
     </section>
     <script>