app2-api/modules/auth/auth.controller.js
2019-07-09 15:59:58 +02:00

135 lines
4.3 KiB
JavaScript

'use strict';
const _ = require('lodash');
const httpStatus = require('http-status');
const controllerHelper = require('../../helpers/controller.helper');
const messageHelper = require('../../helpers/message.helper');
const securityHelper = require('../../helpers/security.helper');
const authService = require('./auth.service');
////////////////////////////////////////////////////////////////////////////////
// CONSTANTS
////////////////////////////////////////////////////////////////////////////////
// Module Name
const MODULE_NAME = '[auth.controller]';
////////////////////////////////////////////////////////////////////////////////
// PUBLIC METHODS
////////////////////////////////////////////////////////////////////////////////
async function login(req, res, next) {
try {
const data = {
id: req.user.id,
email: req.user.email
};
const tokens = securityHelper.generateToken(data);
res.status(httpStatus.OK).json({
token: tokens.token,
refreshToken: tokens.refreshToken,
user: data,
});
} catch (error) {
controllerHelper.handleErrorResponse(MODULE_NAME, login.name, error, res)
}
}
async function register(req, res, next) {
function cleanAdminData(user) {
let cUser = user;
delete cUser.lastLogin;
delete cUser.state;
delete cUser.createdAt;
delete cUser.updatedAt;
return cUser;
}
const values = {
phone: req.body.phone,
fbuid: req.body.fbuid
};
const tokens = securityHelper.generateToken(values);
//Comprobamos si el usuario ya existe en nuestro sistema
let newUser = await authService.extraMethods.findUser(values);
if (!newUser) {
try {
const data = {
refresh_token: tokens.refreshToken,
phone: req.body.phone,
fbuid: req.body.fbuid,
email: req.body.email,
name: req.body.name,
surname: req.body.surname,
entityid: req.body.entityid,
accessibility: req.body.accesssibility
};
newUser = await authService.extraMethods.createUser(data);
} catch (error) {
console.log(error);
controllerHelper.handleErrorResponse(MODULE_NAME, register.name, error, res);
}
};
newUser = cleanAdminData(newUser.toJSON());
newUser.token = tokens.token;
console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
console.log(newUser);
return controllerHelper.handleResultResponse(req.user, null, req.params, res, httpStatus.OK);
}
async function regenerateToken(req, res, next) {
const refreshToken = req.body.refreshToken;
const phone = req.body.phone;
const user = await authService.extraMethods.findUserByRefreshToken(refreshToken);
if (user && user.phone === phone) {
const values = {
phone: user.phone,
platform: user.fbuid
};
try {
const tokens = securityHelper.generateToken(values);
await authService.extraMethods.updateUserRefreshToken(user.id, tokens.refreshToken);
const result = { token: tokens.token };
return controllerHelper.handleResultResponse(result, null, req.params, res, httpStatus.OK);
} catch(error) {
controllerHelper.handleErrorResponse(MODULE_NAME, regenerateToken.name, error, res);
}
} else {
return controllerHelper.handleResultResponse(null, null, req.params, res, httpStatus.UNAUTHORIZED);
}
}
async function rejectToken(req, res, next) {
const refreshToken = req.body.refreshToken;
const user = await authService.extraMethods.findUserByRefreshToken(refreshToken);
if (user && user.token === refreshToken ) {
try {
await authService.extraMethods.deleteRefreshToken(refreshToken);
return controllerHelper.handleResultResponse(result, null, req.params, res, httpStatus.OK);
} catch (error) {
controllerHelper.handleErrorResponse(MODULE_NAME, rejectToken.name, error, res);
}
} else {
return controllerHelper.handleResultResponse(null, null, req.params, res, httpStatus.NOT_FOUND);
}
}
module.exports = {
login,
register,
regenerateToken,
rejectToken,
MODULE_NAME
}