Built most of the user routes, and begun work on utils
This commit is contained in:
134
user.route.js
134
user.route.js
@@ -1,8 +1,142 @@
|
||||
const utils = require ('./utils');
|
||||
const express = require('express');
|
||||
const bcrypt = require('bcrypt');
|
||||
const userRoutes = express.Router();
|
||||
|
||||
const saltRounds = 10;
|
||||
const sessionLength = 25;
|
||||
|
||||
let Session = require('./session.model');
|
||||
let User = require('./user.model');
|
||||
|
||||
/*
|
||||
POST - /user/create
|
||||
Create a user
|
||||
Response: 201 - Created
|
||||
409 - Account already exists
|
||||
*/
|
||||
userRoutes.route('/create').post((req, res) => {
|
||||
console.log(req.body);
|
||||
let u = new User(req.body);
|
||||
// TODO: Look for a different encryption method that can scale more easily
|
||||
bcrypt.hash(u.password, saltRounds, (err, hash) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
res.status(500).send("Error creating user");;
|
||||
} else {
|
||||
console.log(hash);
|
||||
u.password = hash;
|
||||
User.find({ email: u.email }, (err, arr) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
res.status(500).send("Error creating user");
|
||||
}
|
||||
// Account already exists
|
||||
if (arr.length != 0) {
|
||||
res.status(409).send("Account already exists");
|
||||
return;
|
||||
}
|
||||
u.save()
|
||||
.then(() => {
|
||||
res.status(201).send("Success creating user");
|
||||
})
|
||||
.catch(() => {
|
||||
res.status(500).send("Error creating user");;
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/*
|
||||
POST - /user/login
|
||||
Login a user
|
||||
Response: 201 - Created session
|
||||
401 - Incorrect
|
||||
*/
|
||||
userRoutes.route('/login').post((req, res) => {
|
||||
User.findOne({ email: req.body.email }, (err, u) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
res.status(500);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!u) {
|
||||
res.status(401);
|
||||
return;
|
||||
}
|
||||
|
||||
bcrypt.compare(req.body.password, u.password, (err, result) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
res.status(500);
|
||||
return;
|
||||
}
|
||||
|
||||
if (result) {
|
||||
let s = new Session();
|
||||
s.sessionId = generateSession();
|
||||
s.userId = u._id;
|
||||
s.date = new Date();
|
||||
|
||||
s.save()
|
||||
.then(() => {
|
||||
res.json(u);
|
||||
})
|
||||
.catch(() => {
|
||||
res.status(500);
|
||||
});
|
||||
} else {
|
||||
res.status(401);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
POST - /user/logout
|
||||
Logout a user
|
||||
Response: 200 - Removed session
|
||||
400 - No session exists
|
||||
*/
|
||||
userRoutes.route('/logout').post((req, res) => {
|
||||
Session.findOne({ userId: req.body._id }, (err, sess) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
res.status(500);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sess) {
|
||||
res.status(400);
|
||||
return;
|
||||
}
|
||||
|
||||
sess.delete()
|
||||
.then(() => {
|
||||
res.status(201).send("Success deleting session");
|
||||
})
|
||||
.catch(() => {
|
||||
res.status(500);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: Add forgotten password route
|
||||
|
||||
module.exports = userRoutes;
|
||||
|
||||
function generateSession() {
|
||||
var length = sessionLength;
|
||||
var result = [];
|
||||
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+!@#$%^&*()';
|
||||
var charactersLength = characters.length;
|
||||
for (var i = 0; i < length; i++) {
|
||||
result.push(characters.charAt(Math.floor(Math.random() * charactersLength)));
|
||||
}
|
||||
return result.join('');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user