server/router/login.js

60 lines
1.8 KiB
JavaScript

console.log("router/login INIT");
var express = require("express");
var router = new express.Router();
var bcrypt = require("bcryptjs");
var database = require("../services/database");
var jwt = require("jsonwebtoken");
var server = require("../server");
var passport = server.passport;
var secret = server.secret;
router
.route("/login")
.get(passport.authenticate("jwt", { session: false }), (req, res) => {
let user = req.user;
database.historyList(user._id, history => {
user.history = history;
database.users.favourites(user._id, favourites => {
user.favourites = favourites;
res.status(200).json(req.user);
});
});
})
.post((req, res) => {
database.userByName(req.body.username, user => {
if (!user) {
process.stdout.write("no user in DB\n");
return res.status(401).send({
success: false,
msg: "Authentication failed. Wrong user."
});
}
bcrypt.compare(req.body.password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
var token = jwt.sign(user, secret);
user.token = "JWT " + token;
process.stdout.write("pass ok\n");
database.updateUserAccess(req.body.username);
database.historyList(user._id, history => {
user.history = history;
database.users.favourites(user._id, favourites => {
user.favourites = favourites;
res.status(200).json(user);
});
});
} else {
process.stdout.write("pass fail\n");
res.status(401).send({
success: false,
msg: "Authentication failed. Wrong password."
});
}
});
});
});
module.exports = router;