mirror of
https://gitlab.com/MrFry/mrfrys-node-server
synced 2025-04-01 20:24:18 +02:00
198 lines
4.8 KiB
TypeScript
198 lines
4.8 KiB
TypeScript
import fs from 'fs'
|
|
|
|
import logger from '../../../utils/logger'
|
|
import utils from '../../../utils/utils'
|
|
import { Request, SubmoduleData, User } from '../../../types/basicTypes'
|
|
|
|
const usersFileName = '.users.json'
|
|
|
|
function setup(data: SubmoduleData): void {
|
|
const { app, /* userDB, url, */ publicdirs /* moduleSpecificData */ } = data
|
|
|
|
const publicDir = publicdirs[0]
|
|
|
|
const userFilesDir = publicDir + 'userFiles'
|
|
if (!utils.FileExists(userFilesDir)) {
|
|
utils.CreatePath(userFilesDir, true)
|
|
}
|
|
|
|
app.get('/listUserDir', (req: Request, res) => {
|
|
logger.LogReq(req)
|
|
|
|
if (!utils.FileExists(userFilesDir)) {
|
|
utils.CreatePath(userFilesDir, true)
|
|
}
|
|
|
|
const subdir: any = req.query.subdir
|
|
|
|
if (subdir) {
|
|
const safeSubdir = subdir.replace(/\.+/g, '').replace(/\/+/g, '')
|
|
const dir = userFilesDir + '/' + safeSubdir
|
|
const usersFile = dir + '/' + usersFileName
|
|
|
|
if (!utils.FileExists(dir)) {
|
|
res.json({
|
|
success: false,
|
|
msg: `Directory ${subdir} does not exists`,
|
|
})
|
|
return
|
|
}
|
|
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({
|
|
success: true,
|
|
files: utils.ReadDir(dir).reduce((acc, file) => {
|
|
const stat = fs.lstatSync(dir + '/' + file)
|
|
|
|
if (stat.isDirectory()) {
|
|
return acc
|
|
}
|
|
|
|
acc.push({
|
|
name: file,
|
|
path: dir.replace(publicDir, '') + '/' + file,
|
|
size: stat.size,
|
|
date: stat.mtime.getTime(),
|
|
user: users[file] || -1,
|
|
})
|
|
return acc
|
|
}, []),
|
|
})
|
|
} else {
|
|
res.json({
|
|
success: true,
|
|
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(),
|
|
size: utils.ReadDir(userFilesDir + '/' + file).length,
|
|
})
|
|
return acc
|
|
}, []),
|
|
})
|
|
}
|
|
})
|
|
|
|
app.post('/deleteUserFile', (req: Request, res) => {
|
|
const dir: any = req.body.dir
|
|
const fname: any = req.body.fname
|
|
if (!dir || !fname) {
|
|
res.json({
|
|
success: false,
|
|
msg: `'dir' or 'fname' is undefined!`,
|
|
})
|
|
return
|
|
}
|
|
const safeDir = dir.replace(/\.+/g, '').replace(/\/+/g, '')
|
|
const safeFname = fname.replace(/\.+/g, '.').replace(/\/+/g, '')
|
|
const filePath = userFilesDir + '/' + safeDir + '/' + safeFname
|
|
|
|
if (!utils.FileExists(filePath)) {
|
|
res.json({
|
|
success: false,
|
|
msg: `path does not exists!`,
|
|
})
|
|
return
|
|
}
|
|
utils.deleteFile(filePath)
|
|
const usersFile = userFilesDir + '/' + safeDir + '/' + usersFileName
|
|
const users = utils.ReadJSON(usersFile)
|
|
delete users[safeFname]
|
|
utils.WriteFile(JSON.stringify(users), usersFile)
|
|
|
|
res.json({
|
|
success: true,
|
|
})
|
|
})
|
|
|
|
app.post('/newUserDir', (req: Request, res) => {
|
|
logger.LogReq(req)
|
|
|
|
const name: any = req.body.name
|
|
if (!name) {
|
|
res.json({
|
|
success: false,
|
|
msg: `name is undefined!`,
|
|
})
|
|
return
|
|
}
|
|
const safeName = name.replace(/\.+/g, '').replace(/\/+/g, '')
|
|
|
|
if (utils.FileExists(userFilesDir + '/' + safeName)) {
|
|
res.json({
|
|
success: false,
|
|
msg: `Dir ${name} already exists`,
|
|
})
|
|
return
|
|
}
|
|
utils.CreatePath(userFilesDir + '/' + safeName, true)
|
|
|
|
res.json({
|
|
success: true,
|
|
})
|
|
})
|
|
|
|
app.post('/uploadUserFile', (req: Request, res) => {
|
|
logger.LogReq(req)
|
|
|
|
const user: User = req.session.user
|
|
const dir = req.body.dir
|
|
if (!dir) {
|
|
res.json({
|
|
success: false,
|
|
msg: `dir '${dir}' is undefined!`,
|
|
})
|
|
return
|
|
}
|
|
const safeDir = dir.replace(/\.+/g, '.').replace(/\/+/g, '/')
|
|
if (!utils.FileExists(userFilesDir + '/' + safeDir)) {
|
|
res.json({
|
|
success: false,
|
|
msg: `dir '${dir}' does not exists!`,
|
|
})
|
|
return
|
|
}
|
|
|
|
utils
|
|
.uploadFile(req, userFilesDir + '/' + safeDir)
|
|
.then((body) => {
|
|
logger.Log(
|
|
`Successfull upload ${body.filePath}`,
|
|
logger.GetColor('blue')
|
|
)
|
|
|
|
const usersFile = userFilesDir + '/' + safeDir + '/' + usersFileName
|
|
const users = utils.ReadJSON(usersFile)
|
|
users[body.fileName] = user.id
|
|
utils.WriteFile(JSON.stringify(users), usersFile)
|
|
|
|
res.json({
|
|
success: true,
|
|
})
|
|
})
|
|
.catch(() => {
|
|
res.end('something bad happened :s')
|
|
})
|
|
})
|
|
}
|
|
|
|
export default {
|
|
setup: setup,
|
|
}
|