daily pastebin goal
59%
SHARE
TWEET

Untitled

a guest Oct 17th, 2017 226 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2. //=============================================================================
  3. /**
  4.  * Module dependencies
  5.  */
  6. //=============================================================================
  7. const User = require('../users'),
  8.      emailManagement = require('../../utils/mstoemailmanagement'),
  9.      verificationCodeUtils = require('./verificationCodeUtils'),
  10.      emailUtils = require('./emailUtils'),
  11.      error_codes = require('../../utils/errorMessages').error_codes,
  12.      log = require('../../helpers/logger').getLogger('UserUtils'),
  13.      jwt = require('../../utils/jwtGenerator'),
  14.      totpManagement = require('../../utils/totpManagement'),
  15.      _ = require("lodash");
  16.  
  17. //=============================================================================
  18. /**
  19.  * module functionality
  20.  */
  21. //=============================================================================
  22.  
  23. exports.createUser = (properties) => {
  24.  
  25.     for (var prop in properties) {
  26.         if (properties.hasOwnProperty(prop)) {
  27.             if (!this.validateProperty(prop)) {
  28.                 log.error('Invalid Property for User: ' + prop);
  29.                 return Promise.reject(error_codes.ResourceNotValid);//ResourceNotValid
  30.             }
  31.         }
  32.     }
  33.  
  34.     const newUser = new User(properties);
  35.     return newUser.save();
  36.  
  37.  
  38. };
  39.  
  40.  
  41. exports.deleteUser = (property, value) => {
  42.  
  43.     if (!property || !value) {
  44.         return Promise.reject(error_codes.MissingFields); //MissingFields
  45.     }
  46.  
  47.     if (this.validateProperty(property)) {
  48.         var query = {};
  49.         query[property] = value;
  50.         log.error("DELETE USER " + JSON.stringify(query));
  51.         return User.findOneAndRemove(query).exec();
  52.     }
  53.     else {
  54.         return Promise.reject(error_codes.ResourceNotValid); //ResourceNotValid
  55.     }
  56.  
  57. };
  58.  
  59.  
  60. exports.validateProperty = property => {
  61.  
  62.  
  63.     if (property == '_id') {
  64.         return true;
  65.     }
  66.     return !(typeof User.schema.obj[property] == 'undefined');
  67. };
  68.  
  69.  
  70. //login
  71. // exports.login = (email, password) => {
  72.  
  73. //     return this.getUserByProperty('email', email)
  74. //         .then(user => {
  75. //             if (!user) {
  76. //                 log.debug('User does not exist ' + email);
  77. //                 return Promise.reject(error_codes.ResourceNotExist);
  78. //             }
  79. //             else {
  80. //                 if (!user.isVerified) {
  81. //                     return Promise.reject(error_codes.ActionCancelled);
  82. //                 }
  83. //                 else if (user.comparePassword(password)) {
  84. //                     var jwttoken = jwt.generateAccessToken(user);
  85. //                     // console.log(JSON.stringify(userRecord));
  86. //                     return jwttoken;
  87. //                 }
  88. //                 else {
  89. //                     return false;
  90. //                 }
  91. //             }
  92.  
  93.  
  94. //         }).catch(err => {
  95. //             log.error('login ' + email + ' err: ' + JSON.stringify(err));
  96. //             return Promise.reject(err);
  97. //         });
  98.  
  99.  
  100. // };
  101.  
  102.  
  103. exports.enableTotpById =(userID) =>{
  104.     return this.getUserByProperty('_id', userID)
  105.         .then(user =>{
  106.             if(!user){
  107.                 log.debug('User does not exist' + userID);
  108.             }else{
  109.                 if(!user.isVerified){
  110.                     return Promise.reject(error_codes.ActionCancelled);
  111.                 }else{
  112.                     return totpManagement.enableTotp(user._id)
  113.                         .then(response =>{
  114.                             return response;
  115.                         }).catch(err => {
  116.                             return Promise.reject(error_codes.ActionCancelled);
  117.                         });
  118.                 }
  119.             }
  120.  
  121.         }).catch(err =>{
  122.                         return Promise.reject(err);
  123.         });
  124.  
  125. };
  126.  
  127. exports.enableTotpByEmail =(userEmail) =>{
  128.     return this.getUserByProperty('email', userEmail)
  129.         .then(user =>{
  130.             if(!user){
  131.                 log.debug('User does not exist' + userEmail);
  132.             }else{
  133.                 if(!user.isVerified){
  134.                     return Promise.reject(error_codes.ActionCancelled);
  135.                 }else{
  136.                     return totpManagement.enableTotp(user._id)
  137.                         .then(response =>{
  138.                             return response;
  139.                         }).catch(err => {
  140.                             return Promise.reject(error_codes.ActionCancelled);
  141.                         });
  142.                 }
  143.             }
  144.  
  145.         }).catch(err =>{
  146.                         return Promise.reject(err);
  147.         });
  148.  
  149. };
  150.  
  151.  
  152. exports.getTotpByEmail =(userEmail) =>{
  153.     return this.getUserByProperty('email', userEmail)
  154.         .then(user =>{
  155.             if(!user){
  156.                 log.debug('User does not exist' + userEmail);
  157.             }else{
  158.                 if(!user.isVerified){
  159.                     return Promise.reject(error_codes.ActionCancelled);
  160.                 }else{
  161.                     return totpManagement.sendTotp(user._id)
  162.                         .then(response =>{
  163.                             return response;
  164.                         }).catch(err => {
  165.                             return Promise.reject(error_codes.ActionCancelled);
  166.                         });
  167.                 }
  168.             }
  169.  
  170.         }).catch(err =>{
  171.                         return Promise.reject(err);
  172.         });
  173.  
  174. };
  175.  
  176.  
  177. exports.getTotpById =(userId) =>{
  178.     return this.getUserByProperty('_id', userId)
  179.         .then(user =>{
  180.             if(!user){
  181.                 log.debug('User does not exist' + userId);
  182.             }else{
  183.                 if(!user.isVerified){
  184.                     return Promise.reject(error_codes.ActionCancelled);
  185.                 }else{
  186.                     return totpManagement.sendTotp(user._id)
  187.                         .then(response =>{
  188.                             return response;
  189.                         }).catch(err => {
  190.                             return Promise.reject(error_codes.ActionCancelled);
  191.                         });
  192.                 }
  193.             }
  194.  
  195.         }).catch(err =>{
  196.                         return Promise.reject(err);
  197.         });
  198.  
  199. };
  200.  
  201.  
  202. exports.disableTotpById =(userId) =>{
  203.     return this.getUserByProperty('_id', userId)
  204.         .then(user =>{
  205.             if(!user){
  206.                 log.debug('User does not exist' + userId);
  207.             }else{
  208.                 if(!user.isVerified){
  209.                     return Promise.reject(error_codes.ActionCancelled);
  210.                 }else{
  211.                     return totpManagement.disableTotp(user._id)
  212.                         .then(response =>{
  213.                             return response;
  214.                         }).catch(err => {
  215.                             return Promise.reject(error_codes.ResourceNotValid);
  216.                         });
  217.                 }
  218.             }
  219.  
  220.         }).catch(err =>{
  221.                         return Promise.reject(err);
  222.         });
  223.  
  224. };
  225.  
  226. exports.disableTotpByEmail =(userEmail) =>{
  227.     return this.getUserByProperty('email', userEmail)
  228.         .then(user =>{
  229.             if(!user){
  230.                 log.debug('User does not exist' + userEmail);
  231.             }else{
  232.                 if(!user.isVerified){
  233.                     return Promise.reject(error_codes.ActionCancelled);
  234.                 }else{
  235.                     return totpManagement.disableTotp(user._id)
  236.                         .then(response =>{
  237.                             return response;
  238.                         }).catch(err => {
  239.                             return Promise.reject(error_codes.ResourceNotValid);
  240.                         });
  241.                 }
  242.             }
  243.  
  244.         }).catch(err =>{
  245.                         return Promise.reject(err);
  246.         });
  247.  
  248. };
  249.  
  250.  
  251. exports.login = (userCredentials) => {
  252.     if(userCredentials.hasOwnProperty('totp'))
  253.     {
  254.         return this.totpLogin(userCredentials);
  255.     }else{
  256.         return this.normalLogin(userCredentials);
  257.     }
  258.  
  259. };
  260.  
  261. exports.normalLogin =(creds) =>{
  262.     return this.getUserByProperty('email', creds.email)
  263.         .then(user => {
  264.             if (!user) {
  265.                 log.debug('User does not exist ' + creds.email);
  266.                 return Promise.reject(error_codes.ResourceNotExist);
  267.             }
  268.             else {
  269.                 if (!user.isVerified) {
  270.                     return Promise.reject(error_codes.ActionCancelled);
  271.                 }
  272.                 else if (user.comparePassword(creds.password)) {
  273.                     var jwttoken = jwt.generateAccessToken(user);
  274.                     // console.log(JSON.stringify(userRecord));
  275.                     return jwttoken;
  276.                 }
  277.                 else {
  278.                     return false;
  279.                 }
  280.             }
  281.  
  282.         }).catch(err => {
  283.             log.error('login ' + creds.email + ' err: ' + JSON.stringify(err));
  284.             return Promise.reject(err);
  285.         });
  286. };
  287.  
  288. exports.totpLogin = (creds) =>{
  289.  return this.getUserByProperty('email', creds.email)
  290.         .then(user => {
  291.             if (!user) {
  292.                 log.debug('User does not exist ' + creds.email);
  293.                 return Promise.reject(error_codes.ResourceNotExist);
  294.             }
  295.             else {
  296.                 if (!user.isVerified) {
  297.                     return Promise.reject(error_codes.ActionCancelled);
  298.                 }
  299.                 else if (user.comparePassword(creds.password)) {
  300.                     //console.log("yipee " + totpManagement.verifyTotp(user._id, creds.totp));
  301.  
  302.                     return totpManagement.verifyTotp(user._id, creds.totp)
  303.                         .then(response =>{
  304.                             if(response === true)
  305.                             {
  306.                                 var jwttoken = jwt.generateAccessToken(user);
  307.                                 return jwttoken;
  308.                             }else{
  309.                                 return Promise.reject(error_codes.NoRecord);
  310.                             }
  311.                         }).catch(err => {
  312.                             // console.log("see error " + err.message);
  313.                             return Promise.reject(error_codes.ActionCancelled);
  314.                         });
  315.                 }
  316.                 else {
  317.                      return Promise.reject(error_codes.NoRecord);
  318.                 }
  319.             }
  320.  
  321.         }).catch(err => {
  322.             log.error('login ' + creds.email + ' err: ' + JSON.stringify(err));
  323.             return Promise.reject(err);
  324.         });
  325. };
  326.  
  327. exports.getUserByProperty = (property, value)=> {
  328.  
  329.     if (!property || !value) {
  330.         return Promise.reject(error_codes.MissingFields); //MissingFields
  331.     }
  332.  
  333.     if (this.validateProperty(property)) {
  334.         var query = {};
  335.         query[property] = value;
  336.         return User.findOne(query).exec();
  337.     }
  338.     else {
  339.         return Promise.reject(error_codes.ResourceNotValid); //ResourceNotValid
  340.     }
  341.  
  342. };
  343.  
  344.  
  345. exports.forgotPassword = (email) => {
  346.  
  347.     let globalUser;
  348.     return this.updateUser(email, "isVerified", "false")
  349.         .then(user => {
  350.             globalUser= user;
  351.             return verificationCodeUtils.createCode(user,verificationCodeUtils.types.ForgotPassword, true);
  352.         }).then(code => {
  353.             if (code) {
  354.                
  355.                 return emailUtils.getEmailByProperty('templateName', 'forgotPassword')
  356.                     .then(emailSettings => emailUtils.processProperties(emailSettings, globalUser, code));
  357.             }
  358.             else {
  359.                 return Promise.reject(error_codes.ResourceNotCreated);
  360.             }
  361.         }).then(emailSetting => {
  362.             return emailManagement.sendMail(emailSetting);
  363.         })
  364.         .then(result => {
  365.             log.info('forgotPassword Successfully sent email ' + result);
  366.             return globalUser;
  367.         }).catch(err => {
  368.             log.error('forgotPassword ' + email + ' err: ' + JSON.stringify(err));
  369.             return Promise.reject(err);
  370.         });
  371.  
  372.  
  373. };
  374.  
  375.  
  376.  
  377.  
  378. exports.updateUser = (email, property, value) => {
  379.  
  380.     if (!email || !property || !value) {
  381.         return Promise.reject(error_codes.MissingFields); //MissingFields
  382.     }
  383.  
  384.     return this.getUserByProperty("email", email)
  385.         .then(user => {
  386.             if (user) {
  387.                 if (this.validateProperty(property)) {
  388.                     user[property] = value;
  389.                     return user.save();
  390.                 }
  391.                 else {
  392.                     return Promise.reject(error_codes.ResourceNotValid);//ResourceNotValid
  393.                 }
  394.             }
  395.             else {
  396.                 log.error('The user ' + email + ' doesn\'t exist');
  397.                 return Promise.reject(error_codes.ResourceNotExist); //UnknownError
  398.             }
  399.  
  400.         }).then(user => {
  401.             return user;
  402.         }).catch(err => {
  403.             return Promise.reject(err);
  404.         });
  405.  
  406. };
  407.  
  408.  
  409. exports.updateUserByProperties = (email, properties, values) => {
  410.  
  411.     if (!email || !properties || !values) {
  412.         return Promise.reject(error_codes.MissingFields);
  413.     }
  414.     else if (!Array.isArray(properties) || !Array.isArray(values)) {
  415.         return Promise.reject(error_codes.ResourceNotValid);
  416.     }
  417.     else if (properties.length != values.length) {
  418.         return Promise.reject(error_codes.ResourceNotValid);
  419.     }
  420.  
  421.     return this.getUserByProperty("email", email)
  422.         .then(user => {
  423.             if (user) {
  424.                 for (var i in properties) {
  425.                     if (properties.hasOwnProperty(i)) {
  426.                         let property = properties[i];
  427.                         if (this.validateProperty(property)) {
  428.                             user[property] = values[i];
  429.                         }
  430.                         else {
  431.                             return Promise.reject(error_codes.ResourceNotValid);//ResourceNotValid
  432.                         }
  433.                     }
  434.                 }
  435.                 return user.save();
  436.             }
  437.             else {
  438.                 log.error('The user ' + email + ' doesn\'t exist');
  439.                 return Promise.reject(error_codes.ResourceNotExist); //UnknownError
  440.             }
  441.  
  442.         }).then(user => {
  443.             return user;
  444.         }).catch(err => {
  445.             return Promise.reject(err);
  446.         });
  447.  
  448. };
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top