From 6abaa3e70eaafe4c804b23402737f3e35d8b9061 Mon Sep 17 00:00:00 2001 From: tornikeshavishvili Date: Sat, 5 Nov 2022 15:14:09 +0400 Subject: [PATCH 1/4] Add Rename Functionality issue #14 --- lib/helper/html.js | 33 +++++++++++++++++++++++++++++++++ lib/middleware/directory.js | 32 ++++++++++++++++++++++++++++---- lib/middleware/file-rename.js | 22 ++++++++++++++++++++++ lib/middleware/index.js | 19 ++++++++++++++++--- 4 files changed, 99 insertions(+), 7 deletions(-) create mode 100644 lib/middleware/file-rename.js diff --git a/lib/helper/html.js b/lib/helper/html.js index 5995642..f68c1c6 100644 --- a/lib/helper/html.js +++ b/lib/helper/html.js @@ -4,6 +4,7 @@ const createHtmlResponse = (body) => ( + '\n' + '' + `` + '\n' + '' diff --git a/lib/middleware/directory.js b/lib/middleware/directory.js index d25e752..ff2301c 100644 --- a/lib/middleware/directory.js +++ b/lib/middleware/directory.js @@ -32,9 +32,20 @@ const directory = (req, res, { path, uploadFile = true } = {}) => { htmlResponse += '
  • ' + '' - + `${file - }` + + ` + ${file} + + + ` + '
    ' + `` + '' @@ -51,7 +62,20 @@ const directory = (req, res, { path, uploadFile = true } = {}) => { htmlResponse += '
  • ' + '' - + `${file}` + + ` + ${file} + + + ` + `` + 'Open folder' + '' diff --git a/lib/middleware/file-rename.js b/lib/middleware/file-rename.js new file mode 100644 index 0000000..864b394 --- /dev/null +++ b/lib/middleware/file-rename.js @@ -0,0 +1,22 @@ + +const fs = require('fs-extra'); + +const fileRename = async (req, res, { currentPath, newPath } = {}) => { + + await new Promise((resolve, reject) => { + + fs.rename(currentPath, newPath, (err) => { + if(err) { + reject(err); + }else{ + resolve(); + } + }); + + }); + return res.redirect('/'); +}; + +module.exports = { + fileRename, +}; diff --git a/lib/middleware/index.js b/lib/middleware/index.js index c1e1bca..c1f5369 100644 --- a/lib/middleware/index.js +++ b/lib/middleware/index.js @@ -2,13 +2,26 @@ const querystring = require('node:querystring'); const { directory } = require('./directory'); const { fileUpload } = require('./file-upload'); const { fileRemove } = require('./file-remove'); +const { fileRename } = require('./file-rename'); const { authMiddleware } = require('./auth'); const handler = (req, res, { path, uploadFile = true } = {}) => { + if(req.query.rename){ + let currentPath = path.replace(/[/]$/, '') + '/' + req.path.replace(/^[/]/, ''); + let newPath = currentPath.split('/'); + newPath.pop() + newPath.push(req.query.rename); + newPath = newPath.join('/') + return fileRename(req, res, { + currentPath: decodeURI(currentPath), + newPath: decodeURI(newPath) + }); + } + if(req.query.delete && req.query.delete.toLowerCase() === 'true'){ return fileRemove(req, res, { - path: path.replace(/[/]$/, '') + '/' + req.path.replace(/^[/]/, '') + path: decodeURI(path.replace(/[/]$/, '') + '/' + req.path.replace(/^[/]/, '')) }); } @@ -18,8 +31,8 @@ const handler = (req, res, { path, uploadFile = true } = {}) => { return res.status(500).send('Invalid path'); } return fileUpload(req, res, { - path: query.path, - originalPath: path, + path: decodeURI(query.path), + originalPath: decodeURI(path), uploadFile, }); } From e5bf4288d0bd2fb84fd6d4c5c99c6528d51424e7 Mon Sep 17 00:00:00 2001 From: tornikeshavishvili Date: Sat, 5 Nov 2022 15:14:57 +0400 Subject: [PATCH 2/4] Changed After npm install --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 476124f..7e6202a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "directory-serve", - "version": "1.1.6", + "version": "1.2.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "directory-serve", - "version": "1.1.6", + "version": "1.2.1", "license": "ISC", "dependencies": { "express": "^4.18.2", @@ -27,7 +27,7 @@ "nodemon": "^2.0.20" }, "engines": { - "node": ">=16.0" + "node": ">=14.0" } }, "node_modules/@eslint/eslintrc": { From b6706040e23514d25d81f7e8420c723fa1777e07 Mon Sep 17 00:00:00 2001 From: tornikeshavishvili Date: Sun, 6 Nov 2022 14:37:08 +0400 Subject: [PATCH 3/4] Resolve Issue #23 --- lib/middleware/directory.js | 26 +++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/middleware/directory.js b/lib/middleware/directory.js index ff2301c..f8782ea 100644 --- a/lib/middleware/directory.js +++ b/lib/middleware/directory.js @@ -8,11 +8,14 @@ const { } = require('../helper'); const directory = (req, res, { path, uploadFile = true } = {}) => { - const stream = send(req, parseUrl(req).pathname, { index: false, root: path, dotfiles: 'allow' }); + const currentPath = parseUrl(req).pathname; + const stream = send(req, currentPath, { index: false, root: path, dotfiles: 'allow' }); + stream.on('directory', async (resp, dirPath) => { const directoryPath = appendSlash(dirPath); let htmlResponse = ''; - /** + + /** * File upload html append */ if (fs.lstatSync(directoryPath).isDirectory() && uploadFile) { @@ -24,8 +27,25 @@ const directory = (req, res, { path, uploadFile = true } = {}) => { console.log(err); resolve('
    Error
    '); } + + let directoryUp = currentPath.split('/').filter(path => path); + directoryUp.splice(-1) + directoryUp = '/'+directoryUp.join('/'); + htmlResponse - += '

    Directory List

      '; + += '
      ' + +'

      Directory List

      ' + +' + + + + + + +

      ` + +'
        ' ; files.forEach((file) => { const filePath = directoryPath + file; if (fs.lstatSync(filePath).isFile()) { diff --git a/package.json b/package.json index 883f41d..63704e7 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "./bin/index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "dev": "nodemon bin/index.js" + "dev": "nodemon bin/index.js ./test_dir" }, "keywords": [ "file sharing", From 02a6691a8dcd36207c31374eec3745b4c3cc06da Mon Sep 17 00:00:00 2001 From: tornikeshavishvili Date: Sun, 6 Nov 2022 15:02:07 +0400 Subject: [PATCH 4/4] Adress Issue #20 --- lib/helper/html.js | 7 ++++- lib/helper/tailwind.js | 63 ++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 lib/helper/tailwind.js diff --git a/lib/helper/html.js b/lib/helper/html.js index f68c1c6..c3496fd 100644 --- a/lib/helper/html.js +++ b/lib/helper/html.js @@ -1,8 +1,13 @@ +const fs = require('fs'); +console.log(__dirname); const createHtmlResponse = (body) => ( '\n' + '\n' + '\n' - + '' + // + '' + + '' + `