Built motion from commit (unavailable).|2.5.4
[motion2.git] / server / api / authLocal / authLocal.controller.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x281a=['secure','authentication','pass','merge','\x22%s\x22\x20<%s>','format','SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!','message','stringify','status','send','test','local','Something\x20went\x20wrong,\x20please\x20try\x20again.','signToken','json','online','forgot','body','Email\x20parameter\x20is\x20missing','trim','toLowerCase','User','The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.','resetPasswordToken','xCally\x20Motion\x20Password\x20Reset','You\x20are\x20receiving\x20this\x20because\x20you\x20(or\x20someone\x20else)\x20have\x20requested\x20the\x20reset\x20of\x20the\x20password\x20for\x20your\x20account.\x0a\x0a','Please\x20click\x20on\x20the\x20following\x20link,\x20or\x20paste\x20this\x20into\x20your\x20browser\x20to\x20complete\x20the\x20process:\x0a\x0a','headers','/reset/','Reset\x20Email\x20sent!','now','Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.','securePassword','password','save','Password\x20reset!','use','passport','passport-local','Strategy','jayson/promise','randomstring','../../mysqldb','../../config/utils','client','http','Setting','allowedLoginAttempts','blockDuration','findOne','role','disabled','blockedAt','admin','user','agent','then','name','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','authenticate','loginAttempts','blocked','add','minutes','clearBlockUser','getLicense','catch','MailAccount','find','email','MailServerOut','Smtp','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','service','host','port'];(function(_0x35683b,_0x4025d4){var _0x157841=function(_0x356a36){while(--_0x356a36){_0x35683b['push'](_0x35683b['shift']());}};_0x157841(++_0x4025d4);}(_0x281a,0x1f4));var _0xa281=function(_0x45d3f0,_0x4be53f){_0x45d3f0=_0x45d3f0-0x0;var _0x314b79=_0x281a[_0x45d3f0];return _0x314b79;};'use strict';var util=require('util');var passport=require(_0xa281('0x0'));var LocalStrategy=require(_0xa281('0x1'))[_0xa281('0x2')];var jayson=require(_0xa281('0x3'));var _=require('lodash');var rs=require(_0xa281('0x4'));var moment=require('moment');var db=require(_0xa281('0x5'))['db'];var authService=require('../../components/auth/service');var utils=require(_0xa281('0x6'));var client=jayson[_0xa281('0x7')][_0xa281('0x8')]({'port':0x232b});function localAuthenticate(_0x53bf81,_0x4e1e33,_0x80c3e9,_0x1ae77b){var _0x3956a4,_0x45904d;return db[_0xa281('0x9')]['findOne']({'where':{'id':0x1},'attributes':[_0xa281('0xa'),_0xa281('0xb')],'raw':!![]})['then'](function(_0x263bb8){_0x3956a4=_0x263bb8;return _0x53bf81[_0xa281('0xc')]({'attributes':['id','name','password','salt',_0xa281('0xd'),_0xa281('0xe'),'blocked',_0xa281('0xf'),'loginAttempts'],'where':{'name':_0x4e1e33,'role':{'$or':[_0xa281('0x10'),_0xa281('0x11'),_0xa281('0x12')]}}});})[_0xa281('0x13')](function(_0xd0d777){if(!_0xd0d777||_0xd0d777&&_0xd0d777[_0xa281('0x14')]!==_0x4e1e33){throw new Error(_0xa281('0x15'));}else{_0x45904d=_0xd0d777;return _0x45904d;}})[_0xa281('0x13')](function(){_0x45904d[_0xa281('0x16')](_0x80c3e9,function(_0x17862e,_0x27c3fc){var _0x5db276=_0x45904d[_0xa281('0x17')]+0x1;if(_0x17862e){return _0x1ae77b(_0x17862e);}else if(!_0x27c3fc){if(_0x45904d[_0xa281('0xe')]){return _0x1ae77b(null,![],{'message':_0xa281('0x15')});}else if(_0x3956a4[_0xa281('0xa')]>0x0){if(_0x45904d[_0xa281('0x18')]){if(_0x3956a4[_0xa281('0xb')]>0x0){if(moment(_0x45904d['blockedAt'])[_0xa281('0x19')](_0x3956a4[_0xa281('0xb')],_0xa281('0x1a'))>moment()){return _0x1ae77b(null,![],{'message':_0xa281('0x15')});}else{return utils[_0xa281('0x1b')](_0x45904d,_0x5db276,![],null)[_0xa281('0x13')](function(){return _0x1ae77b(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});});}}else{return _0x1ae77b(null,![],{'message':_0xa281('0x15')});}}else{if(_0x5db276>=_0x3956a4['allowedLoginAttempts']){return utils['clearBlockUser'](_0x45904d,0x0,!![],moment())[_0xa281('0x13')](function(){return _0x1ae77b(null,![],{'message':_0xa281('0x15')});});}else{return utils[_0xa281('0x1b')](_0x45904d,_0x5db276,![],null)['then'](function(){return _0x1ae77b(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});});}}}else{return _0x1ae77b(null,![],{'message':_0xa281('0x15')});}}else{if(_0x45904d['disabled']){return _0x1ae77b(null,![],{'message':_0xa281('0x15')});}else if(_0x3956a4[_0xa281('0xa')]>0x0){if(_0x45904d[_0xa281('0x18')]){if(_0x3956a4[_0xa281('0xb')]>0x0){if(moment(_0x45904d['blockedAt'])[_0xa281('0x19')](_0x3956a4['blockDuration'],_0xa281('0x1a'))>moment()){return _0x1ae77b(null,![],{'message':_0xa281('0x15')});}else{return utils[_0xa281('0x1b')](_0x45904d,0x0,![],null)[_0xa281('0x13')](function(){return utils[_0xa281('0x1c')](_0x45904d);})[_0xa281('0x13')](function(){return _0x1ae77b(null,_0x45904d);});}}else{return _0x1ae77b(null,![],{'message':_0xa281('0x15')});}}else{return utils[_0xa281('0x1b')](_0x45904d,0x0,![],null)[_0xa281('0x13')](function(){return utils['getLicense'](_0x45904d);})[_0xa281('0x13')](function(){return _0x1ae77b(null,_0x45904d);})[_0xa281('0x1d')](function(_0x39018c){return _0x1ae77b(null,![],_0x39018c);});}}else{if(_0x45904d[_0xa281('0x18')]){return _0x1ae77b(null,![],{'message':_0xa281('0x15')});}else{return utils['getLicense'](_0x45904d)[_0xa281('0x13')](function(){return _0x1ae77b(null,_0x45904d);});}}}});})[_0xa281('0x1d')](function(_0x988a1){return _0x1ae77b(null,![],_0x988a1);});}function sendServiceMail(_0x12d9d0){return db[_0xa281('0x1e')][_0xa281('0x1f')]({'where':{'service':!![]},'attributes':['id',_0xa281('0x14'),_0xa281('0x20')],'include':[{'model':db[_0xa281('0x21')],'as':_0xa281('0x22')}]})['then'](function(_0x56ac04){if(!_0x56ac04){throw new Error(_0xa281('0x23'));}var _0x445797={'tls':{'rejectUnauthorized':![]}};if(_0x56ac04['Smtp'][_0xa281('0x24')]){_0x445797[_0xa281('0x24')]=_0x56ac04[_0xa281('0x22')]['service'];}else{_0x445797[_0xa281('0x25')]=_0x56ac04['Smtp'][_0xa281('0x25')];_0x445797['port']=_0x56ac04[_0xa281('0x22')][_0xa281('0x26')];_0x445797[_0xa281('0x27')]=_0x56ac04[_0xa281('0x22')][_0xa281('0x27')];}if(_0x56ac04[_0xa281('0x22')][_0xa281('0x28')]){_0x445797['auth']={'user':_0x56ac04[_0xa281('0x22')]['user'],'pass':_0x56ac04['Smtp'][_0xa281('0x29')]};}var _0x39f37d={'account':_0x445797,'message':_[_0xa281('0x2a')]({'from':util['format'](_0xa281('0x2b'),_0x56ac04[_0xa281('0x14')],_0x56ac04[_0xa281('0x20')]||_0x56ac04[_0xa281('0x22')]['user'])},_0x12d9d0)};return client['request']('SendMail',_0x39f37d);})[_0xa281('0x13')](function(_0x2b6b13){if(_0x2b6b13['error']){throw new Error(util[_0xa281('0x2c')](_0xa281('0x2d'),_0x2b6b13['error'][_0xa281('0x2e')]||JSON[_0xa281('0x2f')](_0x2b6b13['error'])));}return!![];});}function handleError(_0x4fa682,_0x3d4391,_0x203fdb){return _0x4fa682[_0xa281('0x30')](_0x3d4391||0x1f4)[_0xa281('0x31')]({'message':_0x203fdb?_0x203fdb['message']||_0x203fdb:''});}function checkPasswordPattern(_0x3f4d83,_0x192542,_0x89714a){if(_0x89714a){var _0x3fc528=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3fc528[_0xa281('0x32')](_0x192542)){return _0x3f4d83;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x3f4d83;}}exports['login']=function(_0x505122,_0xa31006,_0xba172f){passport[_0xa281('0x16')](_0xa281('0x33'),function(_0x5ea455,_0x1cd5c0,_0x1dcbc4){var _0x5809f0=_0x5ea455||_0x1dcbc4;if(_0x5809f0){return handleError(_0xa31006,0x191,_0x5809f0);}if(!_0x1cd5c0){return handleError(_0xa31006,0x194,{'message':_0xa281('0x34')});}else{var _0x2a21db={'payload':{'id':_0x1cd5c0['id'],'role':_0x1cd5c0[_0xa281('0xd')]},'options':{'expiresIn':0x15180}};return authService[_0xa281('0x35')](_0x2a21db)[_0xa281('0x13')](function(_0x1b9a15){_0xa31006[_0xa281('0x36')]({'id':_0x1cd5c0['id'],'token':_0x1b9a15,'statusCall':'','isAlreadyLogged':_0x1cd5c0[_0xa281('0x37')]});});}})(_0x505122,_0xa31006,_0xba172f);};exports[_0xa281('0x38')]=function(_0x323e54,_0x3568d9,_0x3f39fd){if(!_0x323e54[_0xa281('0x39')][_0xa281('0x20')]){return handleError(_0x3568d9,0x1f4,{'message':_0xa281('0x3a')});}var _0x3c3a01=rs['generate']();_0x323e54['body'][_0xa281('0x20')]=_0x323e54[_0xa281('0x39')]['email'][_0xa281('0x3b')]()[_0xa281('0x3c')]();var _0x5dc57e;return db[_0xa281('0x9')][_0xa281('0xc')]({'where':{'id':0x1},'attributes':['allowedLoginAttempts','blockDuration'],'raw':!![]})[_0xa281('0x13')](function(_0xcd73d1){_0x5dc57e=_0xcd73d1;return db[_0xa281('0x3d')][_0xa281('0x1f')]({'where':{'email':_0x323e54[_0xa281('0x39')][_0xa281('0x20')]}});})[_0xa281('0x13')](function(_0x358cbb){if(!_0x358cbb){throw new Error('This\x20email\x20is\x20not\x20registered.');}if(_0x358cbb[_0xa281('0xe')]){throw new Error(_0xa281('0x3e'));}if(_0x358cbb['blocked']){if(moment(_0x358cbb[_0xa281('0xf')])[_0xa281('0x19')](_0x5dc57e['blockDuration'],'minutes')>moment()){throw new Error('The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.');}else{_0x358cbb[_0xa281('0x18')]=![];_0x358cbb['blockedAt']=null;}}_0x358cbb[_0xa281('0x3f')]=_0x3c3a01;_0x358cbb['resetPasswordExpires']=Date['now']()+0x36ee80;return _0x358cbb['save']();})[_0xa281('0x13')](function(){return sendServiceMail({'to':_0x323e54[_0xa281('0x39')][_0xa281('0x20')],'subject':_0xa281('0x40'),'text':_0xa281('0x41')+_0xa281('0x42')+'http://'+_0x323e54[_0xa281('0x43')]['host']+_0xa281('0x44')+_0x3c3a01+'\x0a\x0a'+'If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a'});})[_0xa281('0x13')](function(){_0x3568d9['status'](0xc8)['send']({'message':_0xa281('0x45')});})[_0xa281('0x1d')](function(_0x3dd6d2){return handleError(_0x3568d9,0x1f4,_0x3dd6d2);});};exports['reset']=function(_0x207b69,_0x530c4b,_0x34121e){var _0x2dd31a;return db['User'][_0xa281('0x1f')]({'where':{'resetPasswordToken':_0x207b69['params']['token'],'resetPasswordExpires':{'$gt':Date[_0xa281('0x46')]()}}})[_0xa281('0x13')](function(_0xa8b93f){_0x2dd31a=_0xa8b93f;if(!_0x2dd31a){throw new Error(_0xa281('0x47'));}return db[_0xa281('0x9')][_0xa281('0xc')]({'attributes':['id',_0xa281('0x48')]});})[_0xa281('0x13')](function(_0x1ef7dc){return checkPasswordPattern(_0x1ef7dc,_0x207b69[_0xa281('0x39')][_0xa281('0x49')],_0x1ef7dc['securePassword']);})['then'](function(){_0x2dd31a['password']=_0x207b69[_0xa281('0x39')][_0xa281('0x49')];_0x2dd31a[_0xa281('0x3f')]=null;_0x2dd31a['resetPasswordExpires']=null;return _0x2dd31a[_0xa281('0x4a')]();})[_0xa281('0x13')](function(){_0x530c4b[_0xa281('0x30')](0xc8)[_0xa281('0x31')]({'message':_0xa281('0x4b')});})[_0xa281('0x1d')](function(_0x15b8a3){return handleError(_0x530c4b,0x1f4,_0x15b8a3);});};passport[_0xa281('0x4c')](new LocalStrategy({'usernameField':_0xa281('0x14'),'passwordField':_0xa281('0x49')},function(_0x5932ce,_0x3a6c38,_0x2ecb33){return localAuthenticate(db[_0xa281('0x3d')],_0x5932ce,_0x3a6c38,_0x2ecb33);}));