فهرست منبع

Fix directory traversal for travel on the backend.

Lee Morgan 5 سال پیش
والد
کامیت
1608c4bde1
2فایلهای تغییر یافته به همراه12 افزوده شده و 61 حذف شده
  1. 9 60
      controllers/travel.js
  2. 3 1
      views/main/index.html

+ 9 - 60
controllers/travel.js

@@ -2,78 +2,27 @@ const fs = require("fs");
 
 module.exports = {
     listDirectories: function(req, res){
-        // const searchDir = function(path, currentObject){
-        //     let response = fs.readdirSync(path);
-
-        //     for(let i = 0; i < response.length; i++){
-        //         let newPath = `${path}/${response[i]}`;
-
-        //         let newObject = ({
-        //             name: response[i].replace(/-/g, " "),
-        //             path: newPath.substring(newPath.indexOf("/travel") + 7, newPath.length),
-        //             contents: []
-        //         });
-
-        //         if(response[i].includes(".") === false){
-        //             currentObject.contents.push(newObject);
-        //             searchDir(newPath, newObject);
-        //         }
-        //     }
-
-        //     return currentObject;
-        // }
-
-        // let result = searchDir(`${__dirname}/../content`, {
-        //     contents: []
-        // });
-
-        // let array = [];
-        // for(let i = 0; i < result.contents.length; i++){
-        //     if(result.contents[i].name === "travel"){
-        //         array = result.contents[i].contents;
-        //         break;
-        //     }
-        // }
-
-        // return res.json(array);
-
-        let array = [];
-
         let traverse = (dir)=>{
             let contents = fs.readdirSync(dir);
 
-            let newArray = [];
-            let hasSubDir = false;
+            let array = [];
             for(let i = 0; i < contents.length; i++){
                 if(contents[i].includes(".") === false){
-                    hasSubDir = true;
-                    let newPath = `${dir}/${contents[i]}`;
-
-                    newArray.push({
+                    array.push({
                         name: contents[i],
-                        img: ""
+                        contents: traverse(`${dir}/${contents[i]}`)
+                    });
+                }else{
+                    array.push({
+                        src: `${dir.substring(dir.indexOf("/travel") + 7)}/${contents[i]}`
                     });
-
-                    let inner = fs.readdirSync(newPath);
-                    for(let i = 0; i < inner.length; i++){
-                        if(inner[i].includes(".jpg")){
-                            newArray.img = `${newPath}/${inner[i]}`;
-                            break;
-                        }
-                    }
-
-                    traverse(newPath);
                 }
             }
 
-            if(hasSubDir === false){
-                
-            }
-
-            return newArray;
+            return array;
         }
 
-        let array = traverse(`${__dirname}/../content/travel`);
+        return res.json(traverse(`${__dirname}/../content/travel`));
     },
 
     getImages: function(req, res){

+ 3 - 1
views/main/index.html

@@ -190,7 +190,7 @@
                                 card.onclick = ()=>{
                                     currentContainer.style.display = "none";
                                     newContainer.style.display = "flex";
-                                }
+                                };
 
                                 let name = document.createElement("h1");
                                 name.innerText = currentArray[i].name.toUpperCase();
@@ -239,9 +239,11 @@
                 })
                 .catch((err)=>{});
 
+            console.log("someting else");
             fetch("/travel/directories")
                 .then(response => response.json())
                 .then((response)=>{
+                    console.log("someting");
                     console.log(response);
                     let travel = document.getElementById("travel");
                     let template = document.getElementById("backCard").content.children[0];