You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.8 KiB
105 lines
2.8 KiB
var express = require('express'),
|
|
passport = require('passport'),
|
|
router = express.Router();
|
|
|
|
var User = require('../models/users'),
|
|
Location = require('../models/locations');
|
|
|
|
// user index
|
|
router.get('/', function(req, res) {
|
|
res.locals.login = req.isAuthenticated();
|
|
User.find(function(err, users) {
|
|
res.render('users/index.ejs', { users: users });
|
|
});
|
|
});
|
|
|
|
// json for all users (for testing)
|
|
router.get('/json', function(req, res) {
|
|
User.find(function(err, users) {
|
|
res.send(users);
|
|
});
|
|
});
|
|
|
|
// json for specific user, fetched by ajax to display markers on map
|
|
router.get('/:id/json', function(req, res) {
|
|
User.findById(req.params.id, function(err, user) {
|
|
res.send(user);
|
|
});
|
|
});
|
|
|
|
// logout of session
|
|
router.get('/logout', function(req, res) {
|
|
req.logout();
|
|
res.redirect('/users');
|
|
});
|
|
|
|
// show page -- can only be viewed if logged in
|
|
router.get('/:id', isLoggedIn, function(req, res) {
|
|
// for user control flow within template (enables editing only on the user's own page)
|
|
req.params.id == req.user.id ? res.locals.usertrue = true : res.locals.usertrue = false;
|
|
User.findById(req.params.id, function(err, user) {
|
|
res.render('users/show.ejs', { user: user });
|
|
});
|
|
});
|
|
|
|
// saves a new location to the Location model and the User's locations list
|
|
router.post('/:id/newlocation', function(req, res) {
|
|
User.findById(req.params.id, function(err, user) {
|
|
var location = new Location(req.body);
|
|
location.save(function(err, location) {
|
|
user.locations.push(location);
|
|
user.save(function(err, user) {
|
|
res.redirect('/users/' + req.params.id);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
// user create -- signup
|
|
router.post('/', passport.authenticate('local-signup', {
|
|
failureRedirect: '/users' }), function(req, res) {
|
|
//success redirect goes to show page
|
|
res.redirect('/users/' + req.user.id);
|
|
});
|
|
|
|
// login
|
|
router.post('/login', passport.authenticate('local-login', {
|
|
failureRedirect: '/users' }), function(req, res) {
|
|
// success redirect goes to show page
|
|
res.redirect('/users/' + req.user.id);
|
|
});
|
|
|
|
// delete
|
|
router.delete('/:id', function(req, res) {
|
|
console.log('DELETE ROUTE ACCESSED');
|
|
User.findById(req.params.id, function(err, user) {
|
|
if (user.locations.length == 0) {
|
|
user.remove(function(err) {
|
|
res.redirect('/users');
|
|
});
|
|
} else {
|
|
user.locations.forEach(function(location) {
|
|
Location.findOneAndRemove({ _id: location.id }, function(err) {
|
|
if (err) console.log(err);
|
|
});
|
|
});
|
|
user.remove(function(err) {
|
|
res.redirect('/users');
|
|
});
|
|
} // end if
|
|
}); // end User find
|
|
});
|
|
|
|
// middleware to check login status
|
|
// used in show route
|
|
function isLoggedIn(req, res, next) {
|
|
console.log('isLoggedIn middleware');
|
|
if (req.isAuthenticated()) {
|
|
return next();
|
|
} else {
|
|
res.redirect('/users');
|
|
}
|
|
}
|
|
|
|
module.exports = router;
|