From 406caabefde3f6bf84e210d4acc86350213b1fe5 Mon Sep 17 00:00:00 2001 From: mrfry Date: Wed, 31 Mar 2021 10:44:47 +0200 Subject: [PATCH] Apis for listing user files, log rotate fix --- src/modules/api/submodules/userFiles.ts | 66 ++++++++++++++++++++++--- src/server.ts | 4 +- src/utils/utils.ts | 10 +++- 3 files changed, 69 insertions(+), 11 deletions(-) diff --git a/src/modules/api/submodules/userFiles.ts b/src/modules/api/submodules/userFiles.ts index d7b4679..c5aa9e4 100644 --- a/src/modules/api/submodules/userFiles.ts +++ b/src/modules/api/submodules/userFiles.ts @@ -1,7 +1,11 @@ +import fs from 'fs' + import logger from '../../../utils/logger' import utils from '../../../utils/utils' import { Request, SubmoduleData } from '../../../types/basicTypes' +const usersFileName = '.users.json' + function setup(data: SubmoduleData): void { const { app, /* userDB, url, */ publicdirs /* moduleSpecificData */ } = data @@ -9,16 +13,64 @@ function setup(data: SubmoduleData): void { const userFilesDir = publicDir + 'userFiles' - app.get('/listUserFiles', (req: Request, res) => { + app.get('/listUserDir', (req: Request, res) => { logger.LogReq(req) - if (!utils.FileExists(userFilesDir)) { - utils.CreatePath(userFilesDir, true) - } + const subdir: any = req.query.subdir - res.json({ - files: utils.ReadDir(userFilesDir), - }) + if (subdir) { + const safeSubdir = subdir.replace(/\./g, '').replace(/\/+/g, '') + const dir = userFilesDir + '/' + safeSubdir + const usersFile = dir + '/' + usersFileName + + if (!utils.FileExists(usersFile)) { + utils.WriteFile('{}', usersFile) + } + const users = utils.ReadJSON(usersFile) + + if (!utils.FileExists(dir)) { + res.json({ + success: false, + msg: `Path '${safeSubdir}' does not exists`, + }) + return + } + + res.json({ + files: utils.ReadDir(dir).reduce((acc, file) => { + const stat = fs.lstatSync(dir + '/' + file) + + acc.push({ + name: file, + path: dir.replace(publicDir, '') + '/' + file, + size: stat.size, + uploadDate: stat.mtime.getTime(), + user: users[file], + }) + return acc + }, []), + }) + } else { + if (!utils.FileExists(userFilesDir)) { + utils.CreatePath(userFilesDir, true) + } + + res.json({ + dirs: utils.ReadDir(userFilesDir).reduce((acc, file) => { + const stat = fs.lstatSync(userFilesDir + '/' + file) + + if (!stat.isDirectory()) { + return acc + } + + acc.push({ + name: file, + date: stat.mtime.getTime(), + }) + return acc + }, []), + }) + } }) } diff --git a/src/server.ts b/src/server.ts index 56afff9..46d0964 100755 --- a/src/server.ts +++ b/src/server.ts @@ -281,8 +281,8 @@ function rotateLog() { utils.CopyFile(vlogFile, logger.vlogDir + fname) } - utils.WriteFile(fname, logger.logDir + fname) - utils.WriteFile(fname, logger.vlogDir + fname) + utils.WriteFile(fname, logFile) + utils.WriteFile(fname, vlogFile) } function LogTimerAction() { diff --git a/src/utils/utils.ts b/src/utils/utils.ts index bf96fa4..5bec6f3 100755 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -70,8 +70,14 @@ function CopyFile(from: string, to: string): void { fs.copyFileSync(from, to) } -function ReadDir(path: string): Array { - return fs.readdirSync(path) +function ReadDir(path: string, listHidden?: boolean): Array { + if (listHidden) { + return fs.readdirSync(path) + } else { + return fs.readdirSync(path).filter((file) => { + return !file.startsWith('.') + }) + } } function ReadJSON(name: string): any {