'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) { try { console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>regsitro'); const values = { phone: req.body.phone, platform: req.body.fbuid }; const tokens = securityHelper.generateToken(values); console.log(tokens) const data = { 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 }; console.log(data); const newUser = await authService.extraMethods.createUser(data); const result = { token: 'JWT ' + tokens.token, user: newUser, }; console.log(result); return controllerHelper.handleResultResponse(result, null, req.params, res, httpStatus.OK); } catch (error) { console.log(error); controllerHelper.handleErrorResponse(MODULE_NAME, register.name, error, res); } } 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: 'JWT ' + 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 }