UNPKG

fog-controller

Version:

Fog Controller project @ iotracks.com

622 lines (510 loc) 23 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _async = require('async'); var _async2 = _interopRequireDefault(_async); var _https = require('https'); var _https2 = _interopRequireDefault(_https); var _emailTemp = require('../../../views/emailTemp'); var _emailTemp2 = _interopRequireDefault(_emailTemp); var _resetPasswordTemp = require('../../../views/resetPasswordTemp'); var _resetPasswordTemp2 = _interopRequireDefault(_resetPasswordTemp); var _emailActivationTemp = require('../../../views/emailActivationTemp'); var _emailActivationTemp2 = _interopRequireDefault(_emailActivationTemp); var _emailActivationCodeService = require('../../services/emailActivationCodeService'); var _emailActivationCodeService2 = _interopRequireDefault(_emailActivationCodeService); var _userService = require('../../services/userService'); var _userService2 = _interopRequireDefault(_userService); var _fogAccessTokenService = require('../../services/fogAccessTokenService'); var _fogAccessTokenService2 = _interopRequireDefault(_fogAccessTokenService); var _appUtils = require('../../utils/appUtils'); var _appUtils2 = _interopRequireDefault(_appUtils); var _configUtil = require('../../utils/configUtil'); var _configUtil2 = _interopRequireDefault(_configUtil); var _winstonLogs = require('../../utils/winstonLogs'); var _winstonLogs2 = _interopRequireDefault(_winstonLogs); var _config = require('./../../../config.json'); var _config2 = _interopRequireDefault(_config); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /**************************************** EndPoints *************************************************/ /************ Activate User Account EndPoint (Get: /account/activate/code/:code) *******/ //import transporter from '../../utils/emailSender'; //require('dotenv').config(); var activateUserAccountEndPoint = function activateUserAccountEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, activationCodeProps = { activationCode: 'bodyParams.code', setProperty: 'activationCodeData' }; params.bodyParams = req.params; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_emailActivationCodeService2.default.verifyActivationCode, activationCodeProps, params), updateUser], function (err, result) { _appUtils2.default.sendResponse(res, err, '', '', result); }); }; var updateUser = function updateUser(params, callback) { var userProps = { userId: 'activationCodeData.user_id', updatedObj: { emailActivated: 1 } }; _userService2.default.updateUser(userProps, params, callback); }; /************ Resend Email Activation EndPoint (Post: /api/v1/user/account/activate/resend) *******/ var resendEmailActivationEndPoint = function resendEmailActivationEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { email: 'bodyParams.email', setProperty: 'user' }, emailProps = { service: 'emailSenderData.service', email: 'emailSenderData.email', password: 'emailSenderData.password' }, activationCodeProps = { userId: 'user.id', activationCode: 'activationCodeData.activationCode', expirationTime: 'activationCodeData.expirationTime' }; params.bodyParams = req.body; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.findUserByEmail, userProps, params), _emailActivationCodeService2.default.generateActivationCode, _async2.default.apply(_emailActivationCodeService2.default.saveActivationCode, activationCodeProps), getEmailData, getIOAuthoringData, _async2.default.apply(_userService2.default.userEmailSender, emailProps), notifyUserAboutActivationCode], function (err, result) { _appUtils2.default.sendResponse(res, err, '', '', result); }); }; var authenticateUserEndPoint = function authenticateUserEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }; params.bodyParams = req.params; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params)], function (err, result) { _appUtils2.default.sendResponse(res, err, '', '', result); }); }; /***************************** User Signup EndPoint (Post: /api/v1/user/signup) ***********************/ var userSignupEndPoint = function userSignupEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { email: 'bodyParams.email', setProperty: 'user' }, emailProps = { service: 'emailSenderData.service', email: 'emailSenderData.email', password: 'emailSenderData.password' }, activationCodeProps = { userId: 'newUser.id', activationCode: 'activationCodeData.activationCode', expirationTime: 'activationCodeData.expirationTime' }; params.bodyParams = req.body; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUserByEmail, userProps, params), validateUserInfo, createNewUser, _emailActivationCodeService2.default.generateActivationCode, _async2.default.apply(_emailActivationCodeService2.default.saveActivationCode, activationCodeProps), getEmailData, getIOAuthoringData, _async2.default.apply(_userService2.default.userEmailSender, emailProps), notifyUserAboutActivationCode], function (err, result) { _appUtils2.default.sendResponse(res, err, '', '', result); }); }; var getIOAuthoringData = function getIOAuthoringData(params, callback) { try { _configUtil2.default.getAllConfigs().then(function () { var ioAuthoringProtocol = _configUtil2.default.getConfigParam('ioauthoring_protocol'), ioAuthoringIPAddress = _configUtil2.default.getConfigParam('ioauthoring_ip_address'), ioAuthoringPort = _configUtil2.default.getConfigParam('ioauthoring_port'); _winstonLogs2.default.info(ioAuthoringProtocol); _winstonLogs2.default.info(ioAuthoringIPAddress); _winstonLogs2.default.info(ioAuthoringPort); if (ioAuthoringProtocol == null) { ioAuthoringProtocol = _config2.default.ioauthoringProtocol; } if (ioAuthoringIPAddress == null) { ioAuthoringIPAddress = _config2.default.ioauthoringIPAddress; } if (ioAuthoringPort == null) { ioAuthoringPort = _config2.default.ioauthoringPort; } params.ioAuthoringConfigData = { ioAuthoringProtocol: ioAuthoringProtocol, ioAuthoringIPAddress: ioAuthoringIPAddress, ioAuthoringPort: ioAuthoringPort }; callback(null, params); }); } catch (e) { _winstonLogs2.default.error(e); } }; var notifyUserAboutActivationCode = function notifyUserAboutActivationCode(params, callback) { try { var ioAuthoringUrl = params.ioAuthoringConfigData.ioAuthoringProtocol + '://' + params.ioAuthoringConfigData.ioAuthoringIPAddress + ':' + params.ioAuthoringConfigData.ioAuthoringPort; var mailOptions = { from: '"IOTRACKS" <' + params.emailSenderData.email + '>', // sender address to: params.bodyParams.email, // list of receivers subject: 'Activate Your Account', // Subject line html: _emailActivationTemp2.default.p1 + ioAuthoringUrl + _emailActivationTemp2.default.p2 + params.activationCodeData.activationCode + _emailActivationTemp2.default.p3 + ioAuthoringUrl + _emailActivationTemp2.default.p4 + params.activationCodeData.activationCode + _emailActivationTemp2.default.p5 + ioAuthoringUrl + _emailActivationTemp2.default.p6 + params.activationCodeData.activationCode + _emailActivationTemp2.default.p7 // html body }; // send mail with defined transport object params.transporter.sendMail(mailOptions, function (error, info) { if (error) { _winstonLogs2.default.error(error); callback('Err', 'Email not sent due to technical reasons. Please try later.'); } else { _winstonLogs2.default.info('Message %s sent: %s', info.messageId, info.response); callback(null, params); } }); } catch (e) { _winstonLogs2.default.error(e); } }; var validateUserInfo = function validateUserInfo(params, callback) { if (!params.user) { if (_appUtils2.default.isValidEmail(params.bodyParams.email)) { if (params.bodyParams.password.length > 7) { if (params.bodyParams.password == params.bodyParams.repeatPassword) { if (params.bodyParams.firstName.length > 2) { if (params.bodyParams.lastName.length > 2) { callback(null, params); } else { callback('err', 'Registration failed: Last Name length should be atleast 3 characters.'); } } else { callback('err', 'Registration failed: First Name length should be atleast 3 characters.'); } } else { callback('err', 'Registration failed: Passwords do not match.'); } } else { callback('err', 'Registration failed: Your password must have at least 8 characters.'); } } else { callback('err', 'Registration failed: Please enter a valid email address.'); } } else { callback('err', 'Registration failed: There is already an account associated with your email address. Please try logging in instead.'); } }; var createNewUser = function createNewUser(params, callback) { var newUserProps = { user: { email: params.bodyParams.email, password: params.bodyParams.password, firstName: params.bodyParams.firstName, lastName: params.bodyParams.lastName, emailActivated: 0 }, setProperty: 'newUser' }; _userService2.default.createUser(newUserProps, params, callback); }; /**************************** Reset User Password (Post: /api/v1/user/password/reset) ********************/ var resetUserPasswordEndPoint = function resetUserPasswordEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var tempPass = _appUtils2.default.generateRandomString(2) + 'uL7'; var params = {}, userProps = { email: 'bodyParams.email', setProperty: 'user' }, updatePasswordProps = { email: 'bodyParams.email', updateData: { tempPassword: tempPass } }, emailProps = { service: 'emailSenderData.service', email: 'emailSenderData.email', password: 'emailSenderData.password' }; params.tempPass = tempPass; params.bodyParams = req.body; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUserByEmail, userProps, params), _async2.default.apply(_userService2.default.updateUserByEmail, updatePasswordProps), getEmailData, getIOAuthoringData, _async2.default.apply(_userService2.default.userEmailSender, emailProps), notifyUserAboutPasswordReset], function (err, result) { _appUtils2.default.sendResponse(res, err, '', '', result); }); }; var notifyUserAboutPasswordReset = function notifyUserAboutPasswordReset(params, callback) { try { var ioAuthoringUrl = params.ioAuthoringConfigData.ioAuthoringProtocol + '://' + params.ioAuthoringConfigData.ioAuthoringIPAddress + ':' + params.ioAuthoringConfigData.ioAuthoringPort; if (params.user) { var mailOptions = { from: '"IOTRACKS" <' + params.emailSenderData.email + '>', // sender address to: params.user.email, // list of receivers subject: 'Password Reset Request', // Subject line html: _resetPasswordTemp2.default.p1 + params.user.firstName + ' ' + params.user.lastName + _resetPasswordTemp2.default.p2 + params.tempPass + _resetPasswordTemp2.default.p3 + ioAuthoringUrl + _resetPasswordTemp2.default.p4 // html body }; // send mail with defined transport object params.transporter.sendMail(mailOptions, function (error, info) { if (error) { _winstonLogs2.default.error(error); callback('Err', 'Email not sent due to technical reasons. Please try later.'); } else { _winstonLogs2.default.info('Message %s sent: %s', info.messageId, info.response); callback(null, params); } }); } else { callback('Err', 'Cannot find user email.'); } } catch (e) { _winstonLogs2.default.error(e); } }; /********************* Validate User at login EndPoint (Post: /api/v1/user/login) ************************/ var validateUserEndPoint = function validateUserEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { email: 'bodyParams.email', password: 'bodyParams.password', setProperty: 'user' }, emailActivationProps = { emailActivated: 'user.emailActivated' }; params.bodyParams = req.body; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.isUsingTempPassword, userProps, params), validateUser, _async2.default.apply(_userService2.default.verifyEmailActivation, emailActivationProps), _fogAccessTokenService2.default.generateAccessToken, updateUserAccessTokenByEmail], function (err, result) { if (params.tokenData) { params.token = params.tokenData.accessToken; } var output = { token: params.token, destination: params.destination }; _appUtils2.default.sendResponse(res, err, 'output', output, result); }); }; var validateUser = function validateUser(params, callback) { if (!params.user) { var userProps = { email: 'bodyParams.email', password: 'bodyParams.password', setProperty: 'user' }; _userService2.default.getUserByEmailPassword(userProps, params, callback); } else { params.destination = 'changePassword'; callback(null, params); } // let updatePasswordProps = { // email: 'bodyParams.email', // updateData: { // tempPassword: '' // } // }; // UserService.updateUserByEmail(updatePasswordProps, params, callback); // } }; /*************** User Logout EndPoint (Post /api/v1/user/logout) *****************/ var logoutUserEndPoint = function logoutUserEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }, updateUserProps = { email: 'user.email', updateData: { userAccessToken: '' } }; params.bodyParams = req.body; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params), _async2.default.apply(_userService2.default.updateUserByEmail, updateUserProps)], function (err, result) { _appUtils2.default.sendResponse(res, err, '', '', result); }); }; /********************** Get User Details EndPoint (Get: /api/v2/get/user/data/:t *******************************/ var getUserDetailsEndPoint = function getUserDetailsEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }; params.bodyParams = req.params; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params)], function (err, result) { if (!err) { var output = { firstName: params.user.firstName, lastName: params.user.lastName }; params.output = output; } _appUtils2.default.sendResponse(res, err, 'user', params.output, result); }); }; /********************** Update User Details EndPoint (Post: /api/v1/user/profile/update *****************/ var updateUserDetailsEndPoint = function updateUserDetailsEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }; params.bodyParams = req.body; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params), updateUserProfile], function (err, result) { _appUtils2.default.sendResponse(res, err, '', '', result); }); }; /********************** Update User Password EndPoint (Post: /api/v1/user/password/change *****************/ var updateUserPasswordEndPoint = function updateUserPasswordEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }, emailProps = { service: 'emailSenderData.service', email: 'emailSenderData.email', password: 'emailSenderData.password' }; params.bodyParams = req.body; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params), validateOldPassword, validateNewPassword, getEmailData, _async2.default.apply(_userService2.default.userEmailSender, emailProps), updateUserPassword, notifyUserAboutPasswordChange], function (err, result) { _appUtils2.default.sendResponse(res, err, '', '', result); }); }; var getEmailData = function getEmailData(params, callback) { try { _configUtil2.default.getAllConfigs().then(function () { var email = _configUtil2.default.getConfigParam('email_address'), password = _configUtil2.default.getConfigParam('email_password'), service = _configUtil2.default.getConfigParam('email_service'); params.emailSenderData = { email: email, password: password, service: service }; callback(null, params); }); } catch (e) { _winstonLogs2.default.error(e); } }; var notifyUserAboutPasswordChange = function notifyUserAboutPasswordChange(params, callback) { try { if (params.user) { var mailOptions = { from: '"IOTRACKS" <' + params.emailSenderData.email + '>', // sender address to: params.user.email, // list of receivers subject: 'Password Change Notification', // Subject line html: _emailTemp2.default.p1 + params.user.firstName + ' ' + params.user.lastName + _emailTemp2.default.p2 // html body }; // send mail with defined transport object params.transporter.sendMail(mailOptions, function (error, info) { if (error) { _winstonLogs2.default.error(error); callback('Err', 'Email not sent due to technical reasons. Please try later.'); } else { _winstonLogs2.default.info('Message %s sent: %s', info.messageId, info.response); callback(null, params); } }); } else { callback('Err', 'Cannot find user email.'); } } catch (e) { _winstonLogs2.default.error(e); } }; /********************** Delete User Account EndPoint (Post: /api/v1/user/account/delete *****************/ var deleteUserAccountEndPoint = function deleteUserAccountEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }, deleteProps = { userId: 'user.id' }; params.bodyParams = req.body; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params), _async2.default.apply(_userService2.default.deleteByUserId, deleteProps)], function (err, result) { _appUtils2.default.sendResponse(res, err, '', '', result); }); }; /***************************** Extra Functions **************************/ var validateOldPassword = function validateOldPassword(params, callback) { if (params.bodyParams.oldPassword == params.user.password || params.bodyParams.oldPassword == params.user.tempPassword) { callback(null, params); } else { callback('Error', 'Old password donot match with this userId.'); } }; var validateNewPassword = function validateNewPassword(params, callback) { if (params.bodyParams.newPassword.length > 7) { if (params.bodyParams.newPassword == params.bodyParams.repeatNewPassword) { callback(null, params); } else { callback('Error', 'New passwords donot match each other.'); } } else { callback('Error', 'Password length should be at least 8 characters.'); } }; var updateUserPassword = function updateUserPassword(params, callback) { var updateProps = { token: 'bodyParams.t', updateData: { password: params.bodyParams.newPassword } }; _userService2.default.updateUserByToken(updateProps, params, callback); }; var updateUserAccessTokenByEmail = function updateUserAccessTokenByEmail(params, callback) { var updateProps = { updateData: { userAccessToken: params.tokenData.accessToken }, email: 'bodyParams.email' }; _userService2.default.updateUserByEmail(updateProps, params, callback); }; var updateUserProfile = function updateUserProfile(params, callback) { if (params.bodyParams.firstName.length > 2) { if (params.bodyParams.lastName.length > 2) { var updateProps = { token: 'bodyParams.t', updateData: { firstName: params.bodyParams.firstName, lastName: params.bodyParams.lastName } }; _userService2.default.updateUserByToken(updateProps, params, callback); } else { callback('Error', 'Last Name should have at least 3 characters.'); } } else { callback('Error', 'First Name should have at least 3 characters.'); } }; exports.default = { authenticateUserEndPoint: authenticateUserEndPoint, getUserDetailsEndPoint: getUserDetailsEndPoint, updateUserDetailsEndPoint: updateUserDetailsEndPoint, updateUserPasswordEndPoint: updateUserPasswordEndPoint, deleteUserAccountEndPoint: deleteUserAccountEndPoint, validateUserEndPoint: validateUserEndPoint, logoutUserEndPoint: logoutUserEndPoint, userSignupEndPoint: userSignupEndPoint, resetUserPasswordEndPoint: resetUserPasswordEndPoint, resendEmailActivationEndPoint: resendEmailActivationEndPoint, activateUserAccountEndPoint: activateUserAccountEndPoint };