Skip to content

Instantly share code, notes, and snippets.

@savelee
Created August 16, 2016 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save savelee/0c2fb124e51b00007c215efcf4c73520 to your computer and use it in GitHub Desktop.
Save savelee/0c2fb124e51b00007c215efcf4c73520 to your computer and use it in GitHub Desktop.
server/routes.js
'use strict';
var path = require('path'),
errors = require('./components/errors'),
User = require('./libs/users'),
express = require('express'),
passport = require('passport'),
jwt = require('jsonwebtoken'),
apiRoutes = express.Router(),
settings = require('./config/local_settings');
module.exports = function(app) {
// All undefined asset routes should return a 404
app.route('/:url(app|components)/*')
.get(errors[404]);
/*app.route('/')
.get(function (req, res) {
res.json({
"msg": "Nothing here"
});
}); */
app.route('/register').post(function(req, res) {
if (!req.body.username || !req.body.password) {
res.json({
success: false,
message: 'Please enter username and password.'
});
} else {
var newUser = new User({
username: req.body.username,
password: req.body.password
});
// Attempt to save the user
newUser.save(function(err) {
if (err) {
//console.log(err);
return res.json({
success: false,
message: err
});
}
res.json({
success: true,
message: 'Successfully created new user.'
});
});
}
});
// Authenticate the user and get a JSON Web Token to include in the header of future requests.
app.route('/authenticate').post(function(req, res) {
User.findOne({
username: req.body.username
}, function(err, user) {
if (err) throw err;
if (!user) {
res.json({
success: false,
message: 'Authentication failed. User not found.'
});
} else {
// Check if password matches
user.comparePassword(req.body.password, function(err, isMatch) {
if (isMatch && !err) {
// Create token if the password matched and no error was thrown
var token = jwt.sign(user, settings.secret, {
expiresIn: 10080 // in seconds
});
res.json({
success: true,
token: 'JWT ' + token
});
} else {
res.json({
success: false,
message: 'Authentication failed. Passwords did not match.'
});
}
});
}
});
});
/*
* Protected Routes
*/
apiRoutes.get('/', passport.authenticate('jwt', {
session: false
}), function(req, res) {
User.getAll(function(err, result) {
res.json(result);
});
});
apiRoutes.post('/', passport.authenticate('jwt', {
session: false
}), function(req, res) {
if (!req.body.username || !req.body.password) {
res.json({
success: false,
message: 'Please enter username and password.'
});
} else {
//console.log(req.body.username);
//console.log(req.body.password);
var newUser = new User({
username: req.body.username,
password: req.body.password,
email: req.body.email,
first_name: req.body.first_name,
last_name: req.body.last_name,
url: req.body.url
});
// Attempt to save the user
newUser.save(function(err) {
if (err) {
//console.log(err);
return res.json({
success: false,
message: err
});
}
res.json({
success: true,
message: 'Successfully created new user.'
});
});
}
});
apiRoutes.get('/:userid', passport.authenticate('jwt', {
session: false
}), function(req, res) {
var args = req.params;
User.getOne(args.userid, function(err, result) {
res.json(result);
});
});
apiRoutes.delete('/:userid', passport.authenticate('jwt', {
session: false
}), function(req, res) {
var args = req.params;
User.removeOne(args.userid, function(err, result) {
res.json(result);
});
});
apiRoutes.put('/:userid', passport.authenticate('jwt', {
session: false
}), function(req, res) {
var args = req.params;
User.editOne(args.userid, req, function(err, result) {
res.json(result);
});
});
app.use('/users', apiRoutes);
// All other routes should redirect to the index.html
app.route('/*')
.get(function(req, res) {
res.sendFile(path.join(app.get('appPath'), 'index.html'));
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment