Guest User

Untitled

a guest
Oct 17th, 2017
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.79 KB | None | 0 0
  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. };
Add Comment
Please, Sign In to add comment