'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 login2(req, res, next) { try { 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 loginWithPhone(req, res, next) { try { console.log(req.user); const findOptions = { phone: req.user.phoneNumber, fbuid: req.user.uid }; //Comprobamos si el usuario ya existe en nuestro sistema let _user = await authService.extraMethods.findUser(findOptions); _user = _user.toJSON(); const tokenData = { id: _user.id, email: _user.email, phone: _user.phone, fbuid: _user.fbuid, }; const tokens = securityHelper.generateToken(tokenData); _user.token = tokens.token; return controllerHelper.handleResultResponse(_user, null, req.params, res, httpStatus.OK); } catch (error) { return 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 tokenData = { phone: values.phone, fbuid: values.fbuid, }; const tokens = securityHelper.generateToken(tokenData); //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.error(error); return controllerHelper.handleErrorResponse(MODULE_NAME, register.name, error, res); } }; if (newUser) { newUser = newUser.toJSON(); newUser = cleanAdminData(newUser); newUser.token = tokens.token; } return controllerHelper.handleResultResponse(newUser, 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) { return 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) { return controllerHelper.handleErrorResponse(MODULE_NAME, rejectToken.name, error, res); } } else { return controllerHelper.handleResultResponse(null, null, req.params, res, httpStatus.NOT_FOUND); } } module.exports = { login, login2, loginWithPhone, register, regenerateToken, rejectToken, MODULE_NAME }