ソースを参照

merged logout with login.js. Fixed app search.

lllllllillllllillll 1 年間 前
コミット
4d78177951
6 ファイル変更59 行追加79 行削除
  1. 4 10
      app.js
  2. 8 21
      controllers/apps.js
  3. 9 0
      controllers/login.js
  4. 2 12
      functions/install.js
  5. 11 20
      router/index.js
  6. 25 16
      views/apps.ejs

+ 4 - 10
app.js

@@ -78,16 +78,10 @@ app.use([
 // Initialize server
 server.listen(port, async () => {
     async function init() {
-        try {
-            await sequelize.authenticate().then(() => { console.log('[Connected to DB]') });
-        } catch {
-            console.log('[Could not connect to DB]');
-        }
-        try {
-            await sequelize.sync().then(() => { console.log('[Models Synced]') });
-        } catch {
-            console.log('[Could not Sync Models]', error);
-        }
+        try { await sequelize.authenticate().then(() => { console.log('[Connected to DB]') }); } 
+            catch { console.log('[Could not connect to DB]'); }
+        try { await sequelize.sync().then(() => { console.log('[Models Synced]') }); } 
+            catch { console.log('[Could not Sync Models]', error); }
         await getHidden();
         containerCards();
     }

+ 8 - 21
controllers/apps.js

@@ -11,7 +11,6 @@ templates = templates.sort((a, b) => {
 });
 
 export const Apps = (req, res) => {
-    // console.log(req.body);
     
     let page = Number(req.params.page) || 1;
     let list_start = (page-1)*28;
@@ -50,9 +49,12 @@ export const Apps = (req, res) => {
 
 
 
-export const searchApps = async (req, res) => {
+export const appSearch = async (req, res) => {
+
+    let apps_list = '';
+    let results = [];
+    let search = req.body.search.split(' ');
 
-    // console.log(req.body);
     let page = Number(req.query.page) || 1;
     let list_start = (page - 1) * 28;
     let list_end = (page * 28);
@@ -67,32 +69,17 @@ export const searchApps = async (req, res) => {
         next = '/apps?page=' + (page);
     }
 
-    let apps_list = '';
-    let search_results = [];
-
-    console.log(req.body);
-    let search = req.body.search;
-
-    // split value of search into an array of words
-    search = search.split(' ');
-    // try {console.log(search[0]);} catch (error) {}
-    // try {console.log(search[1]);} catch (error) {}
-    // try {console.log(search[2]);} catch (error) {}
-
     function searchTemplates(word) {
-
         for (let i = 0; i < templates.length; i++) {
             if ((templates[i].description.includes(word)) || (templates[i].name.includes(word)) || (templates[i].title.includes(word))) {
-                search_results.push(templates[i]);
+                results.push(templates[i]);
             }
         }
-        // console.log(search_results);
     }
-    
     searchTemplates(search);
 
-    for (let i = 0; i < search_results.length; i++) {
-        let app_card = appCard(search_results[i]);
+    for (let i = 0; i < results.length; i++) {
+        let app_card = appCard(results[i]);
         apps_list += app_card;
     }
     

+ 9 - 0
controllers/login.js

@@ -72,4 +72,13 @@ export const submitLogin = async function(req,res){
             "error":"Please fill in all the fields.",
         });
     }
+}
+
+
+export const Logout = function(req,res){
+    const sessionId = req.session.id;
+    req.session.destroy(() => {
+        io.to(sessionId).disconnectSockets();
+        res.redirect("/login");
+    });
 }

+ 2 - 12
functions/install.js

@@ -8,20 +8,10 @@ import DockerodeCompose from "dockerode-compose";
 
 export const Install = async (req, res) => {
 
-    console.log('getInstall:')
+    console.log('Install:')
     console.log(req.body);
 
-    res.render("/apps", {
-        name: req.session.user,
-        role: req.session.role,
-        avatar: req.session.avatar,
-        list_start: 0,
-        list_end: 28,
-        app_count: 0,
-        prev: 0,
-        next: 0,
-        apps_list: 0,
-    });
+    res.redirect('/');
 
 }
 

+ 11 - 20
router/index.js

@@ -1,11 +1,10 @@
 import express from "express";
-import { io } from "../app.js";
 
 // Controllers
-import { Login, submitLogin } from "../controllers/login.js";
+import { Login, submitLogin, Logout } from "../controllers/login.js";
 import { Register, submitRegister } from "../controllers/register.js";
 import { Dashboard, searchDashboard } from "../controllers/dashboard.js";
-import { Apps } from "../controllers/apps.js";
+import { Apps, appSearch } from "../controllers/apps.js";
 import { Users } from "../controllers/users.js";
 import { Images } from "../controllers/images.js";
 import { Account } from "../controllers/account.js";
@@ -30,42 +29,34 @@ const auth = (req, res, next) => {
     }
 };
 
+// Routes
 router.get("/login", Login);
 router.post("/login", submitLogin);
+router.get("/logout", Logout);
 
 router.get("/register", Register);
 router.post("/register", submitRegister);  
 
+
 router.get("/", auth, Dashboard);
 router.post("/", auth, searchDashboard);
 
+router.get("/images", auth, Images);
+router.get("/volumes", auth, Volumes);
+router.get("/networks", auth, Networks);
 router.get("/portal", Portal)
 
 router.get("/apps", auth, Apps);
 router.get("/apps/:page", auth, Apps);
+router.post("/apps", auth, appSearch);
 
 router.get("/users", auth, Users);
-
-router.get("/images", auth, Images);
-
-router.get("/networks", auth, Networks);
-
-router.get("/volumes", auth, Volumes);
-
 router.get("/syslogs", auth, Syslogs);
 
-router.get("/account", Account);
 
+router.get("/account", Account);
 router.get("/settings", auth, Settings);
-  
-router.get("/logout", (req, res) => {
-    const sessionId = req.session.id;
-    req.session.destroy(() => {
-        io.to(sessionId).disconnectSockets();
-        res.redirect("/login");
-    });
-});
-
 
+// Functions
 router.post("/install", auth, Install);
 router.post("/uninstall", auth, Uninstall);

+ 25 - 16
views/apps.ejs

@@ -45,12 +45,6 @@
                   </form>
                   <input type="submit" form="search" class="btn btn-outline-success h-50" value="search">
 
-
-                  <form action="/apps" id="search2" name="search2" method="POST">
-                    <input type="search" class="form-control" name="search2" placeholder="Search apps…">
-                  </form>
-                  <input type="submit" form="search2" class="btn btn-outline-success h-50" value="search2">
-
                   <div class="card-actions btn-actions">
                     <div class="card-actions btn-actions">
                       <div class="dropdown">
@@ -113,17 +107,23 @@
     <!-- Tabler Core -->
     <script src="js/tabler.min.js" defer></script>
     <script src="js/demo.min.js" defer></script>
-    <script>
-
-      const form = document.querySelector("#userinfo");
-
-      async function sendData() {
+    
+    <!-- <script>
+      async function sendData(form) {
         const formData = new FormData(form);
+        const jsonData = {};
+
+        for (let [key, value] of formData.entries()) {
+          jsonData[key] = value;
+        }
 
         try {
           const response = await fetch("/install", {
             method: "POST",
-            body: formData,
+            headers: {
+              "Content-Type": "application/json",
+            },
+            body: JSON.stringify(jsonData),
           });
           console.log(await response.json());
         } catch (e) {
@@ -131,11 +131,20 @@
         }
       }
 
-      form.addEventListener("submit", (event) => {
+      document.addEventListener("submit", (event) => {
         event.preventDefault();
-        sendData();
-      });
 
-    </script>
+        const buttonId = event.target.id;
+        console.log(buttonId);
+        const form = document.querySelector(`#${buttonId}`);
+
+        if (form) {
+          sendData(form);
+        } else {
+          console.error(`Form not found for button with ID: ${buttonId}`);
+        }
+      });
+    </script> -->
+    
   </body>
 </html>