Newer
Older
const express = require('express');
const { model: Users } = require('../models/Users');
const auth = require('../middlewares/auth');
const routes = express.Router();

Lucendio
committed
// User create (signup)
routes.post('/signup', async (req, res) => {
const newUser = req.body;
const fieldsToAdd = Object.keys(newUser);
const fieldsInModel = ['name', 'email', 'password'];
const isAdditionAllowed = fieldsToAdd.every((field) => fieldsInModel.includes(field));

Lucendio
committed
if (!isAdditionAllowed) {
return res.status(400).send({ error: 'Invalid fields to Add!' });

Lucendio
committed
}
try {
const user = await Users(newUser);

Lucendio
committed
await user.save();

Lucendio
committed
res.send({ user });

Lucendio
committed
}
catch (e) {
res.status(400).send(e);

Lucendio
committed
}

Lucendio
committed
// check if previously loggeding
routes.post('/init', auth, async (req, res) => {
try {
const cookieOptions = {
httpOnly: true,
};
const { token, user } = req;

Lucendio
committed
if (token && user) {
res.cookie('todo-jt', req.token, cookieOptions).send({ user, token });

Lucendio
committed
}
} catch (e) {
res.status(400).send();

Lucendio
committed
}

Lucendio
committed
// Login user
routes.post('/login', async (req, res) => {
try {
const cookieOptions = {
httpOnly: true,
};
const user = await Users.findByCredentials(req.body.email, req.body.password);

Lucendio
committed
const token = await user.generateAuthToken();

Lucendio
committed
res.cookie('todo-jt', token, cookieOptions).send({ user, token });

Lucendio
committed
} catch (e) {
res.status(400).send();

Lucendio
committed
}

Lucendio
committed
//logout user
routes.post('/logout', auth, async (req, res) => {
try {
const { user, token } = req;

Lucendio
committed
user.tokens = user.tokens.filter((t) => t.token !== token);
await user.save();

Lucendio
committed
res.clearCookie('todo-jt');

Lucendio
committed

Lucendio
committed
} catch (e) {
res.status(400).send();

Lucendio
committed
}

Lucendio
committed
module.exports = routes;