mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-11-04 13:35:46 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var express = require('express'),
 | 
						|
    app = express.Router(),
 | 
						|
    crypto = require('../utils/crypto'),
 | 
						|
    Files = require('../model/files'),
 | 
						|
    multiparty = require('multiparty'),
 | 
						|
    mime = require('../utils/mimetype.js');
 | 
						|
 | 
						|
app.use(function(req, res, next){
 | 
						|
    req.cookies.auth = crypto.decrypt(req.cookies.auth);
 | 
						|
    if(req.cookies.auth !== null){
 | 
						|
        return next();
 | 
						|
    }else{
 | 
						|
        return res.send({status: 'redirect', to: 'logout'});
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
 | 
						|
// list files
 | 
						|
app.get('/ls', function(req, res){
 | 
						|
    let path = decodeURIComponent(req.query.path);
 | 
						|
    if(path){
 | 
						|
        Files
 | 
						|
            .ls(path, req.cookies.auth)
 | 
						|
            .then(function(results){
 | 
						|
                res.send({status: 'ok', results: results});
 | 
						|
            })
 | 
						|
            .catch(function(err){
 | 
						|
                res.send({status: 'error', message: err.message || 'cannot fetch files', trace: err});
 | 
						|
            });
 | 
						|
    }else{
 | 
						|
        res.send({status: 'error', message: 'unknown path'});
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
// get a file content
 | 
						|
app.get('/cat', function(req, res){
 | 
						|
    let path = decodeURIComponent(req.query.path);
 | 
						|
    res.cookie('download', path, { maxAge: 1000 });
 | 
						|
    if(path){
 | 
						|
        Files.cat(path, req.cookies.auth, res)
 | 
						|
            .then(function(stream){
 | 
						|
                res.set('Content-Type',  mime.getMimeType(path));
 | 
						|
                stream.pipe(res);
 | 
						|
            })
 | 
						|
            .catch(function(err){
 | 
						|
                res.send({status: 'error', message: err.message || 'couldn\t read the file', trace: err});
 | 
						|
            });
 | 
						|
    }else{
 | 
						|
        res.send({status: 'error', message: 'unknown path'});
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
// create/update a file
 | 
						|
// https://github.com/pillarjs/multiparty
 | 
						|
app.post('/cat', function(req, res){
 | 
						|
    var form = new multiparty.Form(),
 | 
						|
        path = decodeURIComponent(req.query.path);
 | 
						|
 | 
						|
    if(path){
 | 
						|
        form.on('part', function(part) {
 | 
						|
            part.on('error', function(err){
 | 
						|
                res.send({status: 'error', message: 'internal error'});
 | 
						|
            });
 | 
						|
 | 
						|
            Files.write(path, part, req.cookies.auth)
 | 
						|
                .then(function(result){
 | 
						|
                    res.send({status: 'ok'});
 | 
						|
                })
 | 
						|
                .catch(function(err){
 | 
						|
                    res.send({status: 'error', message: err.message || 'couldn\'t write the file', code: err.code});
 | 
						|
                });
 | 
						|
        });
 | 
						|
        form.parse(req);
 | 
						|
    }else{
 | 
						|
        res.send({status: 'error', message: 'unknown path'});
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
// rename a file/directory
 | 
						|
app.get('/mv', function(req, res){
 | 
						|
    let from = decodeURIComponent(req.query.from),
 | 
						|
        to = decodeURIComponent(req.query.to);
 | 
						|
    if(from && to){
 | 
						|
        Files.mv(from, to, req.cookies.auth)
 | 
						|
            .then((message) => {
 | 
						|
                res.send({status: 'ok'});
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
                res.send({status: 'error', message: err.message || 'couldn\'t rename your file', trace: err});
 | 
						|
            });
 | 
						|
    }else{
 | 
						|
        res.send({status: 'error', message: 'unknown path'});
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
// delete a file/directory
 | 
						|
app.get('/rm', function(req, res){
 | 
						|
    let path = decodeURIComponent(req.query.path);
 | 
						|
    if(path){
 | 
						|
        Files.rm(path, req.cookies.auth)
 | 
						|
            .then((message) => {
 | 
						|
                res.send({status: 'ok'});
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
                res.send({status: 'error', message: err.message || 'couldn\'t delete your file', trace: err});
 | 
						|
            });
 | 
						|
    }else{
 | 
						|
        res.send({status: 'error', message: 'unknown path'});
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
// create a directory
 | 
						|
app.get('/mkdir', function(req, res){
 | 
						|
    let path = decodeURIComponent(req.query.path);
 | 
						|
    if(path){
 | 
						|
        Files.mkdir(path, req.cookies.auth)
 | 
						|
            .then((message) => {
 | 
						|
                res.send({status: 'ok'});
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
                res.send({status: 'error', message: err.message || 'couldn\'t create a directory', trace: err});
 | 
						|
            });
 | 
						|
    }else{
 | 
						|
        res.send({status: 'error', message: 'unknown path'});
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
app.get('/touch', function(req, res){
 | 
						|
    let path = decodeURIComponent(req.query.path);
 | 
						|
    if(path){
 | 
						|
        Files.touch(path, req.cookies.auth)
 | 
						|
            .then((message) => {
 | 
						|
                res.send({status: 'ok'});
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
                res.send({status: 'error', message: err.message || 'couldn\'t create a file', trace: err});
 | 
						|
            });
 | 
						|
    }else{
 | 
						|
        res.send({status: 'error', message: 'unknown path'});
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
 | 
						|
module.exports = app;
 |