app2-api/modules/auth/auth.controller.js

262 lines
8.9 KiB
JavaScript
Raw Normal View History

2019-04-24 21:01:54 +00:00
'use strict';
const _ = require('lodash');
2019-09-09 14:36:45 +00:00
const moment = require('moment');
2019-04-24 21:01:54 +00:00
const httpStatus = require('http-status');
const controllerHelper = require('../../helpers/controller.helper');
const crypto = require('crypto');
2019-04-24 21:01:54 +00:00
const securityHelper = require('../../helpers/security.helper');
2019-07-08 11:11:40 +00:00
const authService = require('./auth.service');
2019-09-09 14:40:47 +00:00
const userService = require('./auth/user.service');
2019-09-03 17:57:28 +00:00
const eventInscriptionService = require('../events/events_inscriptions.service');
2019-09-09 14:36:45 +00:00
moment.locale('es');
2019-04-24 21:01:54 +00:00
////////////////////////////////////////////////////////////////////////////////
// CONSTANTS
////////////////////////////////////////////////////////////////////////////////
// Module Name
const MODULE_NAME = '[auth.controller]';
////////////////////////////////////////////////////////////////////////////////
// PUBLIC METHODS
////////////////////////////////////////////////////////////////////////////////
async function login(req, res, next) {
try {
2019-04-25 09:25:33 +00:00
const data = {
id: req.user.id,
2019-08-17 19:41:22 +00:00
email: req.user.email,
phone: req.user.phoneNumber,
fbuid: req.user.uid
2019-04-25 09:25:33 +00:00
};
2019-07-09 10:14:18 +00:00
const tokens = securityHelper.generateToken(data);
2019-08-17 19:41:22 +00:00
const response = {
2019-07-09 10:14:18 +00:00
token: tokens.token,
refreshToken: tokens.refreshToken,
2019-08-17 19:41:22 +00:00
user: req.user,
};
return controllerHelper.handleResultResponse(response, null, req.params, res, httpStatus.OK);
2019-04-24 21:01:54 +00:00
} catch (error) {
2019-08-17 19:41:22 +00:00
return controllerHelper.handleErrorResponse(MODULE_NAME, login.name, error, res)
2019-04-24 21:01:54 +00:00
}
}
2019-08-03 17:11:32 +00:00
async function loginWithPhone(req, res, next) {
try {
2019-09-09 14:36:45 +00:00
const appVersion = ((req && req.headers && req.headers['accept-version']) ? req.headers['accept-version'] : null);
console.log('loginWithPhone - appVEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEErsion: ', appVersion);
2019-08-03 17:11:32 +00:00
console.log(req.user);
2019-08-04 07:29:13 +00:00
const findOptions = {
2019-08-03 17:11:32 +00:00
phone: req.user.phoneNumber,
fbuid: req.user.uid
};
//Comprobamos si el usuario ya existe en nuestro sistema
2019-08-30 15:21:40 +00:00
let _user = await authService.extraMethods.findUserByPhone(req.user.phoneNumber);
2019-08-09 11:35:09 +00:00
if (_user) {
_user = _user.toJSON();
2019-09-09 14:36:45 +00:00
if (appVersion) {
2019-09-09 14:39:14 +00:00
if (_user.app_version != appVersion) {
const result = userService._updateAppVersionUser(_user.id, appVersion);
2019-09-09 14:36:45 +00:00
console.log('PRUEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEBA>>>> ', result);
2019-09-09 14:39:14 +00:00
_user.app_version = appVersion;
2019-09-09 14:36:45 +00:00
}
}
2019-08-09 11:35:09 +00:00
const tokenData = {
id: _user.id,
email: _user.email,
phone: _user.phone,
fbuid: _user.fbuid,
};
const tokens = securityHelper.generateToken(tokenData);
_user.token = tokens.token;
2019-09-03 17:00:41 +00:00
2019-09-03 17:57:28 +00:00
//Recuperamos el número de tickets para los proximos eventos
try {
const result = await eventInscriptionService._getInscriptionsOfNextEventsUser(_user.id);
console.log('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', result);
_user.nextTicketsCount = result;
2019-09-03 17:00:41 +00:00
} catch (error) {
return handleErrorResponse(MODULE_NAME, 'getInscriptionsOfNextEventsCount', error, res)
}
2019-08-09 11:35:09 +00:00
return controllerHelper.handleResultResponse(_user, null, req.params, res, httpStatus.OK);
} else {
return controllerHelper.handleResultResponse(null, null, req.params, res, httpStatus.NOT_FOUND);
}
2019-08-03 17:11:32 +00:00
} catch (error) {
return controllerHelper.handleErrorResponse(MODULE_NAME, login.name, error, res)
}
}
async function register(req, res, next) {
2019-07-09 13:36:11 +00:00
2019-07-09 11:36:09 +00:00
function cleanAdminData(user) {
let cUser = user;
delete cUser.lastLogin;
delete cUser.state;
delete cUser.createdAt;
delete cUser.updatedAt;
return cUser;
}
2019-07-09 13:36:11 +00:00
const values = {
phone: req.body.phone,
2019-08-30 15:11:11 +00:00
fbuid: req.body.fbuid
2019-07-09 13:36:11 +00:00
};
2019-08-05 09:01:03 +00:00
2019-09-09 14:36:45 +00:00
const appVersion = ((req && req.headers && req.headers['accept-version']) ? req.headers['accept-version'] : null);
console.log('loginWithPhone - appVEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEErsion: ', appVersion);
2019-07-09 13:59:58 +00:00
//Comprobamos si el usuario ya existe en nuestro sistema
2019-08-30 15:11:11 +00:00
let newUser = await authService.extraMethods.findUserByPhone(values.phone);
2019-08-28 17:09:10 +00:00
console.log('COMPROBAMOS IS EXISTE EN NUESTRO SISTEMA', newUser);
2019-07-09 13:59:58 +00:00
if (!newUser) {
2019-07-09 13:36:11 +00:00
try {
const data = {
2019-08-09 11:53:06 +00:00
//refresh_token: tokens.refreshToken,
2019-07-09 13:36:11 +00:00
phone: req.body.phone,
fbuid: req.body.fbuid,
email: req.body.email,
name: req.body.name,
surname: req.body.surname,
entityid: req.body.entityid,
2019-09-09 14:36:45 +00:00
accessibility: req.body.accesssibility,
app_version: appVersion,
lastlogin: moment().utc(),
2019-07-09 13:36:11 +00:00
};
2019-08-05 10:55:24 +00:00
newUser = await authService.extraMethods.createUser(data);
2019-08-28 17:09:10 +00:00
console.log('CREAMOS EL USUARIO EN NUESTRO SISTEMA', newUser);
2019-07-09 13:36:11 +00:00
} catch (error) {
2019-07-28 20:08:15 +00:00
console.error(error);
2019-08-05 09:01:03 +00:00
return controllerHelper.handleErrorResponse(MODULE_NAME, register.name, error, res);
2019-07-09 13:36:11 +00:00
}
2019-07-09 13:59:58 +00:00
};
2019-08-05 09:01:03 +00:00
if (newUser) {
2019-08-05 10:55:24 +00:00
newUser = newUser.toJSON();
2019-08-05 09:01:03 +00:00
newUser = cleanAdminData(newUser);
2019-09-09 14:36:45 +00:00
if (appVersion) {
if (user.app_version != appVersion) {
const result = userService._updateLastLoginAndVersionUser(user.id, appVersion);
console.log('PRUEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEBA>>>> ', result);
newUser.app_version = appVersion;
}
}
2019-08-09 11:50:39 +00:00
const tokenData = {
phone: values.phone,
fbuid: values.fbuid,
id: newUser.id,
email: newUser.email,
};
const tokens = securityHelper.generateToken(tokenData);
2019-08-05 09:01:03 +00:00
newUser.token = tokens.token;
2019-08-28 17:09:10 +00:00
console.log('COMO YA EXISTE CREAMOS EL TOKEN Y LO ASIGNAMOS', newUser);
2019-08-05 09:01:03 +00:00
}
2019-07-09 14:37:54 +00:00
return controllerHelper.handleResultResponse(newUser, null, req.params, res, httpStatus.OK);
2019-07-09 10:14:18 +00:00
}
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,
2019-08-09 11:50:39 +00:00
fbuid: user.fbuid,
id: user.id,
email: user.email,
2019-07-09 10:14:18 +00:00
};
try {
const tokens = securityHelper.generateToken(values);
await authService.extraMethods.updateUserRefreshToken(user.id, tokens.refreshToken);
2019-07-09 11:36:09 +00:00
const result = { token: tokens.token };
2019-07-09 10:14:18 +00:00
return controllerHelper.handleResultResponse(result, null, req.params, res, httpStatus.OK);
} catch(error) {
2019-08-03 17:11:32 +00:00
return controllerHelper.handleErrorResponse(MODULE_NAME, regenerateToken.name, error, res);
2019-07-09 10:14:18 +00:00
}
} else {
return controllerHelper.handleResultResponse(null, null, req.params, res, httpStatus.UNAUTHORIZED);
}
}
2019-07-09 10:55:45 +00:00
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) {
2019-08-05 09:01:03 +00:00
return controllerHelper.handleErrorResponse(MODULE_NAME, rejectToken.name, error, res);
2019-07-09 10:55:45 +00:00
}
} else {
return controllerHelper.handleResultResponse(null, null, req.params, res, httpStatus.NOT_FOUND);
}
}
// Registro por email y por password
async function singup(req, res, next) {
var newUser = undefined;
try {
const data = {
email: req.body.email,
name: req.body.name,
surname: req.body.surname,
level: 8,
password: crypto.createHash('sha512').update(req.body.password).digest('hex')
};
newUser = await authService.extraMethods.createUser(data);
} catch (error) {
console.error(error);
return controllerHelper.handleErrorResponse(MODULE_NAME, register.name, error, res);
}
if (newUser) {
newUser = newUser.toJSON();
const tokenData = {
phone: undefined,
fbuid: undefined,
id: newUser.id,
email: newUser.email,
};
const tokens = securityHelper.generateToken(tokenData);
newUser.token = tokens.token;
}
return controllerHelper.handleResultResponse(newUser, null, req.params, res, httpStatus.OK);
}
2019-07-09 10:55:45 +00:00
2019-04-24 21:01:54 +00:00
module.exports = {
login,
2019-08-03 17:11:32 +00:00
loginWithPhone,
register,
2019-07-09 10:14:18 +00:00
regenerateToken,
2019-07-09 10:55:45 +00:00
rejectToken,
singup,
2019-04-24 21:01:54 +00:00
MODULE_NAME
}