we-plugin-file
Version:
We.js file plugin with suport to storages
116 lines (100 loc) • 2.82 kB
JavaScript
/**
* AvatarController
*
* @module :: Controller
* @description :: Contains logic for handling requests.
*/
const fs = require('fs');
module.exports = {
/**
* Get user avatar with user id, redirect to avatar url if exists or send the default user avatar
*
* @apiName avatar.getAvatar
* @apiGroup avatar
*
* @apiParam {String} `style` avatar image style/size
*
* @module Controller
*
* @param {Object} req Express.js request
* @param {Object} res Express.js response
* @param {Function} next Express.js callback
*
* @successResponse 200
*/
getAvatar(req, res) {
const we = req.we,
id = req.params.id;
const avaibleImageStyles = we.config.upload.image.avaibleStyles;
let imageStyle = req.params.style;
if (!imageStyle) {
imageStyle = 'original'
} else if (imageStyle !== 'original' && avaibleImageStyles.indexOf(imageStyle) === -1) {
return res.badRequest('image.style.invalid');
}
const defaultAvatarPath = we.config.defaultUserAvatar;
if (!id) return res.forbidden();
we.db.models.user
.findById(id)
.then( (user)=> {
if (user && user.avatar && user.avatar[0]) {
// if user have avatar
let image = user.avatar[0];
// redirect to avatar image if exists:
res.goTo(image.urls[imageStyle]);
} else {
// else send the default
fs.readFile(defaultAvatarPath, (err, contents)=> {
if (err) return res.serverError(err);
res.contentType('image/png');
res.send(contents);
});
}
return null;
})
},
/**
* Change user avatar
*
* @apiName avatar.changeAvatar
* @apiGroup avatar
*
* @module Controller
*
* @param {Object} req Express.js request
* @param {Object} res Express.js response
* @param {Function} next Express.js callback
*
* @successResponse 200
*/
changeAvatar(req, res) {
if (!req.isAuthenticated()) return res.forbidden();
if (!res.locals.data) return res.notFound();
const we = req.we,
imageId = req.body.image;
we.db.models.image
.findOne({
where: {
id: imageId
}
})
.nodeify( (err, image)=> {
if (err) return res.queryError(err);
we.log.warn(image.get(), req.user.id);
if (!image || req.user.id !== image.creatorId) {
we.log.debug('User:avatarChange:User dont are image woner or image not found', req.user, image);
return res.forbidden();
}
// set current user vars
req.user.avatar = image.id
// update db user
return res.locals.data
.setAvatar(image)
.then(function afterSetAvatar () {
res.send({ 'user': req.user });
return null
})
.catch(res.queryError);
});
}
}