Built motion from commit 44377920.|2.6.11
[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 _0xc8e0=['resetPasswordExpires','now','save','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','host','/reset/','If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a','Reset\x20Email\x20sent!','reset','params','token','securePassword','previousPasswords','Password\x20reset!','util','passport','passport-local','Strategy','jayson/promise','lodash','randomstring','moment','../../mysqldb','../../components/auth/service','http','Setting','allowedLoginAttempts','blockDuration','then','name','password','salt','disabled','blocked','blockedAt','loginAttempts','admin','user','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','authenticate','add','minutes','clearBlockUser','getLicense','catch','MailAccount','find','email','Smtp','CloudProvider','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','getSmtpOptions','merge','request','SendMail','error','format','stringify','status','send','message','login','local-login','Something\x20went\x20wrong,\x20please\x20try\x20again.','signToken','online','body','Email\x20parameter\x20is\x20missing','generate','trim','toLowerCase','findOne','User','The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.','The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.','resetPasswordToken'];(function(_0x3070dc,_0x40cf11){var _0x431489=function(_0x49bc2a){while(--_0x49bc2a){_0x3070dc['push'](_0x3070dc['shift']());}};_0x431489(++_0x40cf11);}(_0xc8e0,0x190));var _0x0c8e=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0xc8e0[_0x2641f9];return _0x585741;};'use strict';var util=require(_0x0c8e('0x0'));var passport=require(_0x0c8e('0x1'));var LocalStrategy=require(_0x0c8e('0x2'))[_0x0c8e('0x3')];var jayson=require(_0x0c8e('0x4'));var _=require(_0x0c8e('0x5'));var rs=require(_0x0c8e('0x6'));var moment=require(_0x0c8e('0x7'));var db=require(_0x0c8e('0x8'))['db'];var authService=require(_0x0c8e('0x9'));var utils=require('../../config/utils');var client=jayson['client'][_0x0c8e('0xa')]({'port':0x232b});function localAuthenticate(_0x3217be,_0xc7ce9,_0x2e737b,_0x143fea){var _0x29fc86,_0xab4cda;return db[_0x0c8e('0xb')]['findOne']({'where':{'id':0x1},'attributes':[_0x0c8e('0xc'),_0x0c8e('0xd')],'raw':!![]})[_0x0c8e('0xe')](function(_0x46cd5e){_0x29fc86=_0x46cd5e;return _0x3217be['findOne']({'attributes':['id',_0x0c8e('0xf'),_0x0c8e('0x10'),_0x0c8e('0x11'),'role',_0x0c8e('0x12'),_0x0c8e('0x13'),_0x0c8e('0x14'),_0x0c8e('0x15')],'where':{'name':_0xc7ce9,'role':{'$or':[_0x0c8e('0x16'),_0x0c8e('0x17'),'agent']}}});})[_0x0c8e('0xe')](function(_0xba1d80){if(!_0xba1d80||_0xba1d80&&_0xba1d80[_0x0c8e('0xf')]!==_0xc7ce9){throw new Error(_0x0c8e('0x18'));}else{_0xab4cda=_0xba1d80;return _0xab4cda;}})[_0x0c8e('0xe')](function(){_0xab4cda[_0x0c8e('0x19')](_0x2e737b,function(_0x146cbb,_0x263ec6){var _0x536fb1=_0xab4cda[_0x0c8e('0x15')]+0x1;if(_0x146cbb){return _0x143fea(_0x146cbb);}else if(!_0x263ec6){if(_0xab4cda[_0x0c8e('0x12')]){return _0x143fea(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else if(_0x29fc86[_0x0c8e('0xc')]>0x0){if(_0xab4cda[_0x0c8e('0x13')]){if(_0x29fc86[_0x0c8e('0xd')]>0x0){if(moment(_0xab4cda['blockedAt'])[_0x0c8e('0x1a')](_0x29fc86[_0x0c8e('0xd')],_0x0c8e('0x1b'))>moment()){return _0x143fea(null,![],{'message':_0x0c8e('0x18')});}else{return utils[_0x0c8e('0x1c')](_0xab4cda,_0x536fb1,![],null)[_0x0c8e('0xe')](function(){return _0x143fea(null,![],{'message':_0x0c8e('0x18')});});}}else{return _0x143fea(null,![],{'message':_0x0c8e('0x18')});}}else{if(_0x536fb1>=_0x29fc86[_0x0c8e('0xc')]){return utils[_0x0c8e('0x1c')](_0xab4cda,0x0,!![],moment())[_0x0c8e('0xe')](function(){return _0x143fea(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});});}else{return utils['clearBlockUser'](_0xab4cda,_0x536fb1,![],null)['then'](function(){return _0x143fea(null,![],{'message':_0x0c8e('0x18')});});}}}else{return _0x143fea(null,![],{'message':_0x0c8e('0x18')});}}else{if(_0xab4cda[_0x0c8e('0x12')]){return _0x143fea(null,![],{'message':_0x0c8e('0x18')});}else if(_0x29fc86[_0x0c8e('0xc')]>0x0){if(_0xab4cda[_0x0c8e('0x13')]){if(_0x29fc86[_0x0c8e('0xd')]>0x0){if(moment(_0xab4cda[_0x0c8e('0x14')])[_0x0c8e('0x1a')](_0x29fc86[_0x0c8e('0xd')],'minutes')>moment()){return _0x143fea(null,![],{'message':_0x0c8e('0x18')});}else{return utils['clearBlockUser'](_0xab4cda,0x0,![],null)[_0x0c8e('0xe')](function(){return utils['getLicense'](_0xab4cda);})[_0x0c8e('0xe')](function(){return _0x143fea(null,_0xab4cda);});}}else{return _0x143fea(null,![],{'message':_0x0c8e('0x18')});}}else{return utils['clearBlockUser'](_0xab4cda,0x0,![],null)[_0x0c8e('0xe')](function(){return utils[_0x0c8e('0x1d')](_0xab4cda);})[_0x0c8e('0xe')](function(){return _0x143fea(null,_0xab4cda);})[_0x0c8e('0x1e')](function(_0x57e817){return _0x143fea(null,![],_0x57e817);});}}else{if(_0xab4cda[_0x0c8e('0x13')]){return _0x143fea(null,![],{'message':_0x0c8e('0x18')});}else{return utils[_0x0c8e('0x1d')](_0xab4cda)[_0x0c8e('0xe')](function(){return _0x143fea(null,_0xab4cda);});}}}});})[_0x0c8e('0x1e')](function(_0x3af606){return _0x143fea(null,![],_0x3af606);});}function sendServiceMail(_0x246098){return db[_0x0c8e('0x1f')][_0x0c8e('0x20')]({'where':{'service':!![]},'attributes':['id',_0x0c8e('0xf'),_0x0c8e('0x21')],'include':[{'model':db['MailServerOut'],'as':_0x0c8e('0x22'),'include':[{'model':db[_0x0c8e('0x23')],'as':_0x0c8e('0x23')}]}]})['then'](function(_0x40ce37){if(!_0x40ce37){throw new Error(_0x0c8e('0x24'));}var _0x4da0b9=_0x40ce37[_0x0c8e('0x25')]();var _0x29fca0={'account':_0x4da0b9,'message':_[_0x0c8e('0x26')]({'from':util['format']('\x22%s\x22\x20<%s>',_0x40ce37[_0x0c8e('0xf')],_0x40ce37[_0x0c8e('0x21')]||_0x40ce37[_0x0c8e('0x22')][_0x0c8e('0x17')])},_0x246098)};return client[_0x0c8e('0x27')](_0x0c8e('0x28'),_0x29fca0);})[_0x0c8e('0xe')](function(_0x34ac9d){if(_0x34ac9d[_0x0c8e('0x29')]){throw new Error(util[_0x0c8e('0x2a')]('SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!',_0x34ac9d[_0x0c8e('0x29')]['message']||JSON[_0x0c8e('0x2b')](_0x34ac9d[_0x0c8e('0x29')])));}return!![];});}function handleError(_0x22a9b3,_0x5349bd,_0x2fc559){return _0x22a9b3[_0x0c8e('0x2c')](_0x5349bd||0x1f4)[_0x0c8e('0x2d')]({'message':_0x2fc559?_0x2fc559[_0x0c8e('0x2e')]||_0x2fc559:''});}exports[_0x0c8e('0x2f')]=function(_0x34e6d9,_0x3cad07,_0xe5b7bd){passport[_0x0c8e('0x19')](_0x0c8e('0x30'),function(_0x2ecce6,_0x405988,_0x4fcf74){var _0x18df3f=_0x2ecce6||_0x4fcf74;if(_0x18df3f){return handleError(_0x3cad07,0x191,_0x18df3f);}if(!_0x405988){return handleError(_0x3cad07,0x194,{'message':_0x0c8e('0x31')});}else{var _0xab817b={'payload':{'id':_0x405988['id'],'role':_0x405988['role']},'options':{'expiresIn':0x15180}};return authService[_0x0c8e('0x32')](_0xab817b)['then'](function(_0xba828d){_0x3cad07['json']({'id':_0x405988['id'],'token':_0xba828d,'statusCall':'','isAlreadyLogged':_0x405988[_0x0c8e('0x33')]});});}})(_0x34e6d9,_0x3cad07,_0xe5b7bd);};exports['forgot']=function(_0x535460,_0x486725){if(!_0x535460[_0x0c8e('0x34')][_0x0c8e('0x21')]){return handleError(_0x486725,0x1f4,{'message':_0x0c8e('0x35')});}var _0x16f7ea=rs[_0x0c8e('0x36')]();_0x535460[_0x0c8e('0x34')]['email']=_0x535460[_0x0c8e('0x34')][_0x0c8e('0x21')][_0x0c8e('0x37')]()[_0x0c8e('0x38')]();var _0x7d85b6;return db['Setting'][_0x0c8e('0x39')]({'where':{'id':0x1},'attributes':[_0x0c8e('0xc'),_0x0c8e('0xd')],'raw':!![]})[_0x0c8e('0xe')](function(_0x249e63){_0x7d85b6=_0x249e63;return db[_0x0c8e('0x3a')][_0x0c8e('0x20')]({'where':{'email':_0x535460[_0x0c8e('0x34')]['email']}});})[_0x0c8e('0xe')](function(_0xa172a4){if(!_0xa172a4){throw new Error('This\x20email\x20is\x20not\x20registered.');}if(_0xa172a4[_0x0c8e('0x12')]){throw new Error(_0x0c8e('0x3b'));}if(_0xa172a4['blocked']){if(moment(_0xa172a4[_0x0c8e('0x14')])[_0x0c8e('0x1a')](_0x7d85b6[_0x0c8e('0xd')],_0x0c8e('0x1b'))>moment()){throw new Error(_0x0c8e('0x3c'));}else{_0xa172a4[_0x0c8e('0x13')]=![];_0xa172a4[_0x0c8e('0x14')]=null;}}_0xa172a4[_0x0c8e('0x3d')]=_0x16f7ea;_0xa172a4[_0x0c8e('0x3e')]=Date[_0x0c8e('0x3f')]()+0x36ee80;return _0xa172a4[_0x0c8e('0x40')]();})[_0x0c8e('0xe')](function(){return sendServiceMail({'to':_0x535460[_0x0c8e('0x34')][_0x0c8e('0x21')],'subject':'xCally\x20Motion\x20Password\x20Reset','text':_0x0c8e('0x41')+_0x0c8e('0x42')+'https://'+_0x535460['headers'][_0x0c8e('0x43')]+_0x0c8e('0x44')+_0x16f7ea+'\x0a\x0a'+_0x0c8e('0x45')});})['then'](function(){_0x486725[_0x0c8e('0x2c')](0xc8)[_0x0c8e('0x2d')]({'message':_0x0c8e('0x46')});})[_0x0c8e('0x1e')](function(_0x2d83f){return handleError(_0x486725,0x1f4,_0x2d83f);});};exports[_0x0c8e('0x47')]=function(_0x3e6d54,_0x41f0ee){return db[_0x0c8e('0x3a')]['find']({'where':{'resetPasswordToken':_0x3e6d54[_0x0c8e('0x48')][_0x0c8e('0x49')],'resetPasswordExpires':{'$gt':Date[_0x0c8e('0x3f')]()}}})[_0x0c8e('0xe')](function(_0x489ee3){if(!_0x489ee3){throw new Error('Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.');}return db[_0x0c8e('0xb')][_0x0c8e('0x39')]({'attributes':['id',_0x0c8e('0x4a'),'enforcePasswordHistory','passwordHistoryLimit']})[_0x0c8e('0xe')](function(_0x1f5e86){if(_0x1f5e86[_0x0c8e('0x4a')])authService['validatePasswordPattern'](_0x3e6d54[_0x0c8e('0x34')][_0x0c8e('0x10')]);if(!_0x1f5e86['enforcePasswordHistory']||!_0x489ee3[_0x0c8e('0x4b')])return _0x489ee3;authService['validatePasswordHistory'](_0x3e6d54['body'][_0x0c8e('0x10')],_0x489ee3[_0x0c8e('0x4b')],_0x1f5e86['passwordHistoryLimit']);return _0x489ee3;})['then'](function(){_0x489ee3['password']=_0x3e6d54['body'][_0x0c8e('0x10')];_0x489ee3['resetPasswordToken']=null;_0x489ee3[_0x0c8e('0x3e')]=null;return _0x489ee3[_0x0c8e('0x40')]();});})['then'](function(){_0x41f0ee[_0x0c8e('0x2c')](0xc8)['send']({'message':_0x0c8e('0x4c')});})['catch'](function(_0x5a907e){return handleError(_0x41f0ee,0x1f4,_0x5a907e);});};passport['use'](_0x0c8e('0x30'),new LocalStrategy({'usernameField':'name','passwordField':_0x0c8e('0x10')},function(_0x28aeaf,_0x4496fd,_0x593785){return localAuthenticate(db[_0x0c8e('0x3a')],_0x28aeaf,_0x4496fd,_0x593785);}));