http-up
Version:
Simple share folder via http with upload
128 lines (72 loc) • 3.96 kB
JavaScript
'use strict';
const os = require('os');
const fs = require('fs');
const path = require('path');
const url = require('url');
const urlencode = require('urlencode');
const chalk = require('chalk');
//const dateTime = require('node-datetime');
//const mime = require('mime');
//const exec = require('child_process').exec;
//const config = require('./config');
//const util = require('./util');
const config = require(path.join(__dirname, '..', 'config'));
const util = require(path.join(__dirname, '..', 'util'));
const model = require(path.join(__dirname, '..', '..', 'model', 'index'));
const homedir = os.homedir();
const httpup_home = path.join(homedir, '.httpup');
const httpup_thumb = path.join(homedir, '.httpup', 'thumb');
const httpup_temp = path.join(homedir, '.httpup', 'temp');
exports.post_rename = (app, argv) => {
const multer = require('multer');
const upload = multer({ dest: httpup_temp, limits: { fieldSize: config.fieldSize_max } });
const postProcessing = upload.fields([{ name: 'name', maxCount: 1 }]);
app.post('/api/rename', postProcessing, async (req, res) => {
let referer = urlencode.decode(url.parse(req.headers.referer).pathname);
referer = util.http_path_clear(referer);
let readFolder = path.join(argv.fold, referer);
let to = '';
if (req.body.to) {
to = req.body.to;
to = util.http_path_clear(to);
}
if (to.length == 0) {
res.status(500).json({ code: 500, msg: '"To" param is empty' });
return;
}
console.log('—'.repeat(process.stdout.columns));
if (typeof req.body.name == 'string') {
let clean_name = util.http_path_clear(req.body.name);
clean_name = clean_name.replace(/\//g, '');
if (clean_name && clean_name.length > 0) {
let src_file_path = path.join(readFolder, clean_name);
let target_file_path = path.join(readFolder, to);
if ( !fs.existsSync(src_file_path) ){
model.event_log().write( req, 404, 'api/rename', 'Not found ' + chalk.yellow(src_file_path) );
res.status(404).json({ code: 404, msg: 'Not found '+clean_name });
return;
}
if (fs.existsSync(target_file_path)) {
model.event_log().write( req, 500, 'api/rename', 'File/folder ' + target_file_path + ' is exist.' );
res.status(500).json({ code: 500, msg: 'Target path is exist' });
return;
}
try{
fs.renameSync(src_file_path, target_file_path);
}catch(e){
model.event_log().write( req, 500, 'api/rename', 'Rename error: ', e.toString() );
res.status(500).json({ code: 500, msg: 'Target path is exist' });
return;
}
model.file().check_exists();
model.event_log().write( req, 200, 'api/rename', 'Rename ' + chalk.yellow(src_file_path) + ' to ' + chalk.yellow(target_file_path) );
res.status(200).json({ code: 200 });
return;
}else{
res.status(500).json({ code: 500, msg: 'Target path is exist' });
return;
}
}
res.status(500).json({ code: 500 });
});
};