- Initial commit... A DB, some routes, and basic authentication routines...
This commit is contained in:
92
routes/auth.js
Normal file
92
routes/auth.js
Normal file
@@ -0,0 +1,92 @@
|
||||
const errors = require('restify-errors');
|
||||
|
||||
const config = require('../config');
|
||||
|
||||
const handlePassportResponse = (req, res, next) => (err, passportUser, info) => {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
const isVerifiedUser = passportUser.isRegistrationVerified();
|
||||
if (passportUser && isVerifiedUser) {
|
||||
const user = passportUser;
|
||||
user.token = passportUser.generateJWT();
|
||||
return res.send({ ...user.toAuthJSON() });
|
||||
} else if (passportUser && !isVerifiedUser){
|
||||
return res.send({
|
||||
registrationSuccess: true,
|
||||
nextSteps: 'Check your email for our confirmation email, you will not be able to login without confirming.'
|
||||
});
|
||||
}
|
||||
|
||||
return res.send(400, info);
|
||||
};
|
||||
|
||||
module.exports = function (server, auth) {
|
||||
const { passport } = auth;
|
||||
|
||||
/* Local Auth */
|
||||
server.post('/auth', (req, res, next) => {
|
||||
const { body: { username = null, password = null } = {} } = req;
|
||||
|
||||
if (!username || !password) {
|
||||
let errors = {};
|
||||
|
||||
if (!username) {
|
||||
errors.username = 'is required';
|
||||
}
|
||||
|
||||
if (!password) {
|
||||
errors.password = 'is required';
|
||||
}
|
||||
|
||||
return res.send(422, { errors });
|
||||
}
|
||||
|
||||
const callback = handlePassportResponse(req, res, next);
|
||||
return passport.authenticate('local', { session: false }, callback)(req, res, next);
|
||||
});
|
||||
|
||||
/**
|
||||
* SERVICES
|
||||
*/
|
||||
|
||||
/* Google */
|
||||
server.get(
|
||||
'/auth/google',
|
||||
passport.authenticate('google', { scope: 'profile email', session: false }),
|
||||
);
|
||||
|
||||
server.get(
|
||||
'/auth/google/callback',
|
||||
(req, res, next) => {
|
||||
const callback = handlePassportResponse(req, res, next);
|
||||
return passport.authenticate(
|
||||
'google',
|
||||
{ failureRedirect: '/login' },
|
||||
callback,
|
||||
)(req, res, next);
|
||||
},
|
||||
);
|
||||
|
||||
/* Facebook */
|
||||
server.get(
|
||||
'/auth/facebook',
|
||||
passport.authenticate('facebook', {
|
||||
scope: ['email', 'public_profile'],
|
||||
session: false,
|
||||
}),
|
||||
);
|
||||
|
||||
server.get(
|
||||
'/auth/facebook/callback',
|
||||
(req, res, next) => {
|
||||
const callback = handlePassportResponse(req, res, next);
|
||||
return passport.authenticate(
|
||||
'facebook',
|
||||
{ failureRedirect: '/login' },
|
||||
callback,
|
||||
)(req, res, next);
|
||||
}
|
||||
);
|
||||
};
|
||||
110
routes/bids.js
Normal file
110
routes/bids.js
Normal file
@@ -0,0 +1,110 @@
|
||||
const errors = require('restify-errors');
|
||||
|
||||
const Bid = require('../models/bid');
|
||||
|
||||
module.exports = function(server) {
|
||||
server.post('/bids', (req, res, next) => {
|
||||
if (!req.is('application/json')) {
|
||||
return next(
|
||||
new errors.InvalidContentError("Expects 'application/json'"),
|
||||
);
|
||||
}
|
||||
|
||||
let data = req.body || {};
|
||||
|
||||
let bid = new Bid(data);
|
||||
bid.save(function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(new errors.InternalError(err.message));
|
||||
next();
|
||||
}
|
||||
|
||||
res.send(201);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/bids', (req, res, next) => {
|
||||
Bid.apiQuery(req.params, function(err, docs) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(docs);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/bids/:bid_id', (req, res, next) => {
|
||||
Bid.findOne({ _id: req.params.bid_id }, function(err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(doc);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.put('/bids/:bid_id', (req, res, next) => {
|
||||
if (!req.is('application/json')) {
|
||||
return next(
|
||||
new errors.InvalidContentError("Expects 'application/json'"),
|
||||
);
|
||||
}
|
||||
|
||||
let data = req.body || {};
|
||||
|
||||
if (!data._id) {
|
||||
data = Object.assign({}, data, { _id: req.params.bid_id });
|
||||
}
|
||||
|
||||
Bid.findOne({ _id: req.params.bid_id }, function(err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
} else if (!doc) {
|
||||
return next(
|
||||
new errors.ResourceNotFoundError(
|
||||
'The resource you requested could not be found.',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Bid.update({ _id: data._id }, data, function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(200, data);
|
||||
next();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
server.del('/bids/:bid_id', (req, res, next) => {
|
||||
Bid.deleteOne({ _id: req.params.bid_id }, function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(204);
|
||||
next();
|
||||
});
|
||||
});
|
||||
};
|
||||
110
routes/events.js
Normal file
110
routes/events.js
Normal file
@@ -0,0 +1,110 @@
|
||||
const errors = require('restify-errors');
|
||||
|
||||
const Event = require('../models/event');
|
||||
|
||||
module.exports = function(server) {
|
||||
server.post('/events', (req, res, next) => {
|
||||
if (!req.is('application/json')) {
|
||||
return next(
|
||||
new errors.InvalidContentError("Expects 'application/json'"),
|
||||
);
|
||||
}
|
||||
|
||||
let data = req.body || {};
|
||||
|
||||
let event = new Event(data);
|
||||
event.save(function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(new errors.InternalError(err.message));
|
||||
next();
|
||||
}
|
||||
|
||||
res.send(201);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/events', (req, res, next) => {
|
||||
Event.apiQuery(req.params, function(err, docs) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(docs);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/events/:event_id', (req, res, next) => {
|
||||
Event.findOne({ _id: req.params.event_id }, function(err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(doc);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.put('/events/:event_id', (req, res, next) => {
|
||||
if (!req.is('application/json')) {
|
||||
return next(
|
||||
new errors.InvalidContentError("Expects 'application/json'"),
|
||||
);
|
||||
}
|
||||
|
||||
let data = req.body || {};
|
||||
|
||||
if (!data._id) {
|
||||
data = Object.assign({}, data, { _id: req.params.event_id });
|
||||
}
|
||||
|
||||
Event.findOne({ _id: req.params.event_id }, function(err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
} else if (!doc) {
|
||||
return next(
|
||||
new errors.ResourceNotFoundError(
|
||||
'The resource you requested could not be found.',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Event.update({ _id: data._id }, data, function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(200, data);
|
||||
next();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
server.del('/events/:event_id', (req, res, next) => {
|
||||
Event.deleteOne({ _id: req.params.event_id }, function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(204);
|
||||
next();
|
||||
});
|
||||
});
|
||||
};
|
||||
9
routes/index.js
Normal file
9
routes/index.js
Normal file
@@ -0,0 +1,9 @@
|
||||
module.exports = function(server, auth) {
|
||||
require('./auth.js')(server, auth);
|
||||
require('./bids.js')(server, auth);
|
||||
require('./events.js')(server, auth);
|
||||
require('./installs.js')(server, auth);
|
||||
require('./items.js')(server, auth);
|
||||
require('./sales.js')(server, auth);
|
||||
require('./users.js')(server, auth);
|
||||
};
|
||||
110
routes/installs.js
Normal file
110
routes/installs.js
Normal file
@@ -0,0 +1,110 @@
|
||||
const errors = require('restify-errors');
|
||||
|
||||
const Install = require('../models/install');
|
||||
|
||||
module.exports = function(server) {
|
||||
server.post('/installs', (req, res, next) => {
|
||||
if (!req.is('application/json')) {
|
||||
return next(
|
||||
new errors.InvalidContentError("Expects 'application/json'"),
|
||||
);
|
||||
}
|
||||
|
||||
let data = req.body || {};
|
||||
|
||||
let install = new Install(data);
|
||||
install.save(function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(new errors.InternalError(err.message));
|
||||
next();
|
||||
}
|
||||
|
||||
res.send(201);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/installs', (req, res, next) => {
|
||||
Install.apiQuery(req.params, function(err, docs) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(docs);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/installs/:install_id', (req, res, next) => {
|
||||
Install.findOne({ _id: req.params.install_id }, function(err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(doc);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.put('/installs/:install_id', (req, res, next) => {
|
||||
if (!req.is('application/json')) {
|
||||
return next(
|
||||
new errors.InvalidContentError("Expects 'application/json'"),
|
||||
);
|
||||
}
|
||||
|
||||
let data = req.body || {};
|
||||
|
||||
if (!data._id) {
|
||||
data = Object.assign({}, data, { _id: req.params.install_id });
|
||||
}
|
||||
|
||||
Install.findOne({ _id: req.params.install_id }, function(err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
} else if (!doc) {
|
||||
return next(
|
||||
new errors.ResourceNotFoundError(
|
||||
'The resource you requested could not be found.',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Install.update({ _id: data._id }, data, function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(200, data);
|
||||
next();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
server.del('/installs/:install_id', (req, res, next) => {
|
||||
Install.deleteOne({ _id: req.params.install_id }, function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(204);
|
||||
next();
|
||||
});
|
||||
});
|
||||
};
|
||||
110
routes/items.js
Normal file
110
routes/items.js
Normal file
@@ -0,0 +1,110 @@
|
||||
const errors = require('restify-errors');
|
||||
|
||||
const Item = require('../models/item');
|
||||
|
||||
module.exports = function(server) {
|
||||
server.post('/items', (req, res, next) => {
|
||||
if (!req.is('application/json')) {
|
||||
return next(
|
||||
new errors.InvalidContentError("Expects 'application/json'"),
|
||||
);
|
||||
}
|
||||
|
||||
let data = req.body || {};
|
||||
|
||||
let item = new Item(data);
|
||||
item.save(function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(new errors.InternalError(err.message));
|
||||
next();
|
||||
}
|
||||
|
||||
res.send(201);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/items', (req, res, next) => {
|
||||
Item.apiQuery(req.params, function(err, docs) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(docs);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/items/:item_id', (req, res, next) => {
|
||||
Item.findOne({ _id: req.params.item_id }, function(err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(doc);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.put('/items/:item_id', (req, res, next) => {
|
||||
if (!req.is('application/json')) {
|
||||
return next(
|
||||
new errors.InvalidContentError("Expects 'application/json'"),
|
||||
);
|
||||
}
|
||||
|
||||
let data = req.body || {};
|
||||
|
||||
if (!data._id) {
|
||||
data = Object.assign({}, data, { _id: req.params.item_id });
|
||||
}
|
||||
|
||||
Item.findOne({ _id: req.params.item_id }, function(err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
} else if (!doc) {
|
||||
return next(
|
||||
new errors.ResourceNotFoundError(
|
||||
'The resource you requested could not be found.',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Item.update({ _id: data._id }, data, function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(200, data);
|
||||
next();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
server.del('/items/:item_id', (req, res, next) => {
|
||||
Item.deleteOne({ _id: req.params.item_id }, function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(204);
|
||||
next();
|
||||
});
|
||||
});
|
||||
};
|
||||
116
routes/sales.js
Normal file
116
routes/sales.js
Normal file
@@ -0,0 +1,116 @@
|
||||
/**
|
||||
* Module Dependencies
|
||||
*/
|
||||
const errors = require('restify-errors');
|
||||
|
||||
/**
|
||||
* Model Schema
|
||||
*/
|
||||
const Sale = require('../models/sale');
|
||||
|
||||
module.exports = function(server) {
|
||||
server.post('/sales', (req, res, next) => {
|
||||
if (!req.is('application/json')) {
|
||||
return next(
|
||||
new errors.InvalidContentError("Expects 'application/json'"),
|
||||
);
|
||||
}
|
||||
|
||||
let data = req.body || {};
|
||||
|
||||
let sale = new Sale(data);
|
||||
sale.save(function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(new errors.InternalError(err.message));
|
||||
next();
|
||||
}
|
||||
|
||||
res.send(201);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/sales', (req, res, next) => {
|
||||
Sale.apiQuery(req.params, function(err, docs) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(docs);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/sales/:sale_id', (req, res, next) => {
|
||||
Sale.findOne({ _id: req.params.sale_id }, function(err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(doc);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.put('/sales/:sale_id', (req, res, next) => {
|
||||
if (!req.is('application/json')) {
|
||||
return next(
|
||||
new errors.InvalidContentError("Expects 'application/json'"),
|
||||
);
|
||||
}
|
||||
|
||||
let data = req.body || {};
|
||||
|
||||
if (!data._id) {
|
||||
data = Object.assign({}, data, { _id: req.params.sale_id });
|
||||
}
|
||||
|
||||
Sale.findOne({ _id: req.params.sale_id }, function(err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
} else if (!doc) {
|
||||
return next(
|
||||
new errors.ResourceNotFoundError(
|
||||
'The resource you requested could not be found.',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Sale.update({ _id: data._id }, data, function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(200, data);
|
||||
next();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
server.del('/sales/:sale_id', (req, res, next) => {
|
||||
Sale.deleteOne({ _id: req.params.sale_id }, function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err.errors.name.message),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(204);
|
||||
next();
|
||||
});
|
||||
});
|
||||
};
|
||||
42
routes/signup.js
Normal file
42
routes/signup.js
Normal file
@@ -0,0 +1,42 @@
|
||||
const errors = require('restify-errors');
|
||||
|
||||
const User = require('../models/user');
|
||||
|
||||
module.exports = function (server, auth) {
|
||||
const { passport } = auth;
|
||||
|
||||
server.post('/signup', (req, res, next) => {
|
||||
const { body: { user = null } = {} } = req;
|
||||
|
||||
let errors = {};
|
||||
let errorCount = 0;
|
||||
if (!user) {
|
||||
errors.user = 'is required - can\'t make something from nothing...'';
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
if (errorCount) {
|
||||
return res.send(422, { errors });
|
||||
}
|
||||
|
||||
User.register(user, (err, user, info) => {
|
||||
if (err) {
|
||||
next(err);
|
||||
}
|
||||
|
||||
if (info) {
|
||||
res.send(200, {
|
||||
registrationSuccess: false,
|
||||
nextSteps: 'Please fix the problems indicated and try again.'
|
||||
...info
|
||||
});
|
||||
return next();
|
||||
}
|
||||
|
||||
res.send(200, {
|
||||
registrationSuccess: true,
|
||||
nextSteps: 'Check your email for our confirmation email, you will not be able to login without confirming.'
|
||||
})
|
||||
});
|
||||
});
|
||||
};
|
||||
169
routes/users.js
Normal file
169
routes/users.js
Normal file
@@ -0,0 +1,169 @@
|
||||
const aqp = require('api-query-params');
|
||||
const errors = require('restify-errors');
|
||||
|
||||
const User = require('../models/user');
|
||||
const { PUBLIC, PROTECTED } = require('../strategies/selects/user');
|
||||
|
||||
module.exports = function (server, auth) {
|
||||
server.post('/users', auth.manager, (req, res, next) => {
|
||||
let { password = null, ...data } = req.body || {};
|
||||
|
||||
let user = new User(data);
|
||||
user.save(function(err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(new errors.InternalError(err.message));
|
||||
next();
|
||||
}
|
||||
|
||||
if (password) {
|
||||
user.setPassword(password);
|
||||
}
|
||||
|
||||
res.send(201);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/users', auth.manager, (req, res, next) => {
|
||||
const { filter } = aqp(req.query);
|
||||
const select = req.user.isManager ? PROTECTED : PUBLIC;
|
||||
|
||||
User.find(filter, select, function (err, docs) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(docs);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.get('/users/:user_id', auth.managerOrSelf, (req, res, next) => {
|
||||
const select = req.user.isManager ? PROTECTED : PUBLIC;
|
||||
|
||||
User.findOne({ _id: req.params.user_id }, select, function (err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(doc);
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
server.put('/users/:user_id', auth.managerOrSelf, (req, res, next) => {
|
||||
let data = req.body || {};
|
||||
|
||||
if (!data._id) {
|
||||
data = Object.assign({}, data, { _id: req.params.user_id });
|
||||
}
|
||||
|
||||
User.findOne({ _id: req.params.user_id }, function (err, doc) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err),
|
||||
);
|
||||
} else if (!doc) {
|
||||
return next(
|
||||
new errors.ResourceNotFoundError(
|
||||
'The resource you requested could not be found.',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
User.update({ _id: data._id }, data, function (err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(200, data);
|
||||
next();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
server.put('/users/password/:user_id/:reset_token?', function (req, res, next) {
|
||||
let {
|
||||
currentPassword = null,
|
||||
newPassword = null,
|
||||
...data
|
||||
} = req.body || {};
|
||||
|
||||
if (!newPassword) {
|
||||
return next(
|
||||
new errors.InvalidContentError('Password cannot be empty.'),
|
||||
);
|
||||
}
|
||||
|
||||
let filter = { _id: req.params.user_id };
|
||||
let resetToken = req.params.reset_token || null;
|
||||
if (resetToken) {
|
||||
fiter.resetToken = resetToken;
|
||||
}
|
||||
|
||||
User.findOne(filter, function (err, user) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err),
|
||||
);
|
||||
}
|
||||
|
||||
if (!user) {
|
||||
return next(
|
||||
new errors.ResourceNotFoundError(
|
||||
'The user you requested could not be found.',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (!resetToken &&
|
||||
!!user.getAuthStrategy('local') &&
|
||||
!user.validatePassword(currentPassword)
|
||||
) {
|
||||
return next(
|
||||
new errors.InvalidContentError(
|
||||
'The current password was incorrect.',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
user.setPassword(newPassword, function (err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(200, data);
|
||||
next();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
server.del('/users/:user_id', auth.manager, (req, res, next) => {
|
||||
User.deleteOne({ _id: req.params.user_id }, function (err) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return next(
|
||||
new errors.InvalidContentError(err),
|
||||
);
|
||||
}
|
||||
|
||||
res.send(204);
|
||||
next();
|
||||
});
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user