3 var User = require('../../models').User;
4 var Module = require('../../models').Module;
5 var config = require('../../config/environment');
7 var passport = require('passport');
8 var moment = require('moment');
9 var jwt = require('jsonwebtoken');
10 var uploadFile = require('upload-file');
11 var path = require('path');
12 var fs = require('fs');
13 var _ = require('lodash');
14 var util = require('util');
15 var sr = require('simple-random');
18 * Get list of admin/user
20 exports.index = function(req, res, next) {
22 var attributes = ['fullname', 'name', 'email', 'role'];
23 var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
24 var page = req.query.page ? parseInt(req.query.page, 10) : 0;
28 role: ['admin', 'user']
31 offset: page * per_page
34 _.forIn(req.query, function(value, key) {
40 query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
46 attributes.forEach(function(attribute) {
49 $like: '%' + value + '%'
52 query.where.$or.push(tmp);
59 query.where[key].$like = '%' + value + '%';
64 .findAndCountAll(query)
65 .then(function(result) {
67 var total_pages = Math.ceil(result.count / per_page);
68 var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
69 var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
71 return res.status(200).send({
75 previous_page: previous_page,
76 total_pages: total_pages
80 .catch(function(err) {
81 return res.status(500).send({
82 error: 'Something blew up!'
89 * Get list of admin/user/agent
91 exports.getUsers = function(req, res, next) {
96 $in: ['admin', 'user', 'agent']
100 .then(function(users) {
101 return res.status(200).send(users);
103 .catch(function(err) {
104 return handleError(res, err);
111 exports.create = function(req, res, next) {
114 _(body).keys().sort().each(function(key) {
115 var value = body[key];
118 var newUser = User.build(req.body);
119 newUser.provider = 'local';
122 .then(function(user) {
123 var token = jwt.sign({
125 }, config.session.secret, {
128 return res.status(201).send({
132 .catch(function(err) {
133 return handleError(res, err);
140 exports.show = function(req, res, next) {
143 .findById(req.params.id)
144 .then(function(user) {
146 return res.status(200).send(user);
148 return res.sendStatus(404);
151 .catch(function(err) {
152 return handleError(res, err);
159 exports.destroy = function(req, res, next) {
160 var userId = req.params.id;
161 // console.log(req.params);
162 // console.log(req.body);
166 .then(function(user) {
170 .then(function(user) {
172 return res.status(200).send(user);
174 .catch(function(err) {
175 return handleError(res, err);
178 return res.sendStatus(404);
181 .catch(function(err) {
182 return handleError(res, err);
187 * Change a user password
189 exports.changePassword = function(req, res, next) {
190 var userId = req.user.id;
191 var oldPass = String(req.body.oldPassword);
192 var newPass = String(req.body.newPassword);
195 .then(function(user) {
196 if (user.authenticate(oldPass)) {
197 user.password = newPass;
200 return res.status(200).send(user);
202 .catch(function(err) {
203 return handleError(res, err);
206 return res.sendStatus(403);
212 * Change a user password by admin
214 exports.resetPassword = function(req, res, next) {
215 var newPass = String(req.body.newPassword);
217 .findById(req.params.id)
218 .then(function(user) {
219 user.password = newPass;
222 return res.status(200).send(user);
224 .catch(function(err) {
225 return handleError(res, err);
231 * Change the avatar of the user
233 exports.changeAvatar = function(req, res, next) {
235 var upload = new uploadFile({
236 dest: path.join(config.root, 'server', 'files', 'images'),
239 acceptFileTypes: /(\.|\/)(jpeg|png)$/i,
240 rename: function(name, file) {
241 return sr() + path.extname(file.filename);
242 // return 'avatar' + req.params.id + path.extname(file.filename);
245 maxNumberOfFiles: "Max number of files upload exceeded",
246 acceptFileTypes: "Only jpeg and png format accepted",
247 // maxFileSize: "The maximum file size is 5 Mb",
248 invalidRequest: "Invalid request"
252 upload.on('end', function(fields, files) {
253 if (!files.file.filename) {
254 return res.status(500).send(upload);
257 .findById(req.params.id)
258 .then(function(user) {
260 user.updateAttributes({
261 userpic: files.file.filename
264 return res.status(200).send(user);
266 .catch(function(err) {
267 return handleError(res, err);
270 return res.sendStatus(404);
273 .catch(function(err) {
274 return handleError(res, err);
279 upload.on('error', function(err) {
280 console.log('********** Upload error :', err)
281 return handleError(res, err);
291 exports.me = function(req, res, next) {
292 var userId = req.user.id;
299 attributes: ['id', 'fullname', 'name', 'email', 'role', 'userpic'],
302 .then(function(user) {
304 return res.sendStatus(401);
306 return res.status(200).send(user);
308 .catch(function(err) {
309 return handleError(res, err);
316 exports.update = function(req, res, next) {
317 var userId = req.user.id;
320 .findById(req.params.id)
321 .then(function(user) {
324 .updateAttributes(req.body)
325 .then(function(user) {
326 return res.status(200).send(user);
328 .catch(function(err) {
329 return handleError(res, err);
332 return res.sendStatus(500);
335 .catch(function(err) {
336 return handleError(res, err);
343 exports.getAvatar = function(req, res, next) {
344 // var userId = req.params.id;
346 var imgPath = path.join(config.root, 'server', 'files', 'images', req.params.filename);
348 fs.exists(imgPath, function(exists) {
350 imgPath = path.join(config.root, 'server', 'files', 'images', 'userpic.png');
353 return res.sendFile(imgPath);
358 * Get my avatar by id
360 exports.getAvatarById = function(req, res, next) {
362 // console.log('getAvatarById');
363 // console.log(req.params);
365 if (req.params.id === 'visitor') {
366 var imgPath = path.join(config.root, 'server', 'files', 'images', 'customer.png');
368 fs.exists(imgPath, function(exists) {
369 return res.sendFile(imgPath);
374 .findById(req.params.id)
375 .then(function(user) {
377 var imgPath = path.join(config.root, 'server', 'files', 'images', user.userpic ? user.userpic : 'userpic.png');
379 fs.exists(imgPath, function(exists) {
381 imgPath = path.join(config.root, 'server', 'files', 'images', 'userpic.png');
384 return res.sendFile(imgPath);
387 return res.sendStatus(500);
390 .catch(function(err) {
391 return handleError(res, err);
396 // Deletes a agent from the DB.
397 exports.bulkDestroy = function(req, res) {
403 individualHooks: true
406 return res.sendStatus(204);
408 .catch(function(err) {
409 return handleError(res, err);
413 exports.userValidation = function(req, res) {
415 where[req.params.field] = req.body.value;
420 .then(function(result) {
422 return res.status(200).send({
424 value: req.body.value
427 return res.status(200).send({
429 value: req.body.value
432 .catch(function(err) {
433 return handleError(res, err);
439 * Authentication callback
441 exports.authCallback = function(req, res, next) {
445 function handleError(res, err) {
446 return res.status(500).send(err);