fs = require('fs')
async = require('async')
mkdirp = require('mkdirp')
formidable = require('formidable')
misc = require('smc-util/misc')
exports.upload_endpoint = (express, logger) ->
logger?.debug("upload_endpoint conf")
router = express.Router()
router.get '/.smc/upload', (req, res) ->
logger?.debug("upload GET")
res.send("hello")
router.post '/.smc/upload', (req, res) ->
dbg = (m...) -> logger?.debug("upload POST ", m...)
dbg()
options =
uploadDir : process.env.HOME + '/' + req.query.dest_dir
keepExtensions : true
form = new formidable.IncomingForm(options)
async.series([
(cb) ->
mkdirp(options.uploadDir, cb)
(cb) ->
form.parse req, (err, fields, files) ->
if err or not files.file? or not files.file.path? or not files.file.name?
cb(err)
return
dbg("upload of '#{files.file.name}' to '#{files.file.path}' worked")
dest = process.env.HOME + '/' + (req.query.dest_dir ? '') + '/' + files.file.name
dbg("now move '#{files.file.path}' to '#{dest}'")
fs.rename files.file.path, dest, (err) ->
if err
dbg("error moving -- #{err}")
cb(err)
else
cb()
], (err) ->
if err
res.status(500).send("upload failed -- #{err}")
else
res.send('received upload:\n\n')
)
return router