fog-controller
Version:
Fog Controller project @ iotracks.com
622 lines (510 loc) • 23 kB
JavaScript
;
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
};