diff options
Diffstat (limited to 'server/lib')
| -rw-r--r-- | server/lib/api.js | 41 | ||||
| -rw-r--r-- | server/lib/upload.js | 24 |
2 files changed, 45 insertions, 20 deletions
diff --git a/server/lib/api.js b/server/lib/api.js index 85c5b85..cf2a911 100644 --- a/server/lib/api.js +++ b/server/lib/api.js @@ -6,6 +6,7 @@ var passport = require('passport'), crypto = require('crypto'), _ = require('lodash'), util = require('./util'), + upload = require('./upload'), config = require('../../config.json'), User = require('./schemas/User'); @@ -21,9 +22,9 @@ var api = { update: function(req, res){ var data = util.cleanQuery(req.body) - if (data.new_password.length) { - if (req.user.checkPassword(data.old_password)) { - res.json({ error: { errors: { username: { message: "Old password is incorrect" } } } }) + if (data.new_password && data.new_password.length) { + if (! data.old_password || ! req.user.checkPassword(data.old_password)) { + res.json({ error: { errors: { password: { message: "Old password is incorrect" } } } }) } var shasum = crypto.createHash('sha1') @@ -35,11 +36,35 @@ var api = { delete data.old_password delete data.new_password delete data.isAdmin - _.extend( req.user, data ) - req.user.save(function(err, msg) { - err ? res.json({ status: "FAIL", error: err }) - : res.json({ status: "OK", payload: req.user }) - }) + + if (req.files.avatar) { + // handle the upload here + console.log("GOT SOME FILES") + upload.put("avatars", req.files.avatar, { + acceptable: function(){ + console.log("acceptable") + }, + unacceptable: function(err){ + console.log("unacceptable") + res.json({ error: { errors: { avatar: { message: "Problem saving avatar: " + err } } } }) + }, + success: function(url){ + data.photo = url + done() + } + }) + } + else { + done() + } + + function done () { + _.extend( req.user, data ) + req.user.save(function(err, msg) { + err ? res.json({ status: "FAIL", error: err }) + : res.json({ status: "OK", payload: req.user }) + }) + } } } diff --git a/server/lib/upload.js b/server/lib/upload.js index 5c130a2..4346a99 100644 --- a/server/lib/upload.js +++ b/server/lib/upload.js @@ -16,18 +16,18 @@ var acceptableuploadTypes = { 'image/png': 'png' } -module.exports.put = function (key, image, opt) { - var imageSize, imageType, filename +module.exports.put = function (key, file, opt) { + var fileSize, fileType, filename var err var now = new Date() var ts = moment().format('YYYYMMDD') - var extension = acceptableuploadTypes[image.type] + var extension = acceptableuploadTypes[file.mimetype] filename = (+now) + "-" - + image.name.replace(/\..*$/,"") + + file.originalname.replace(/\..*$/,"") .replace(/[^0-9a-zA-Z]+/g,"-") - .substr(-64) + .substr(-128) + "." + extension; var remote_path = "/images/" + key + "/" + ts + "/" + filename @@ -35,10 +35,10 @@ module.exports.put = function (key, image, opt) { if (! extension) { err = "unacceptable filetype" } - else if (image.size < 10) { + else if (file.size < 10) { err = "file too small" } - else if (image.size > 2097152) { // 2mb limit + else if (file.size > 2097152) { // 2mb limit err = "file too large" } @@ -51,9 +51,9 @@ module.exports.put = function (key, image, opt) { opt.acceptable && opt.acceptable(err) console.log("upload > ", remote_path) - s3.putFile(image.path, remote_path, { - 'Content-Length': image.size, - 'Content-Type': image.type, + s3.putFile(file.path, remote_path, { + 'Content-Length': file.size, + 'Content-Type': file.mimetype, 'x-amz-acl': 'public-read' }, function(err, s3res) { if (err || s3res.statusCode !== 200) { @@ -62,9 +62,9 @@ module.exports.put = function (key, image, opt) { return; } - var image_url = s3res.url || s3res.req.url + var file_url = s3res.url || s3res.req.url - opt.success && opt.success(image_url) + opt.success && opt.success(file_url) }).on('error', function(err, s3res){ console.error(err) s3res && s3res.resume && s3res.resume() |
