Built motion from commit 64a6f4bc.|2.6.26
[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 _0xa6bf=['message','status','Something\x20went\x20wrong,\x20please\x20try\x20again.','signToken','online','body','Email\x20parameter\x20is\x20missing','generate','trim','toLowerCase','This\x20email\x20is\x20not\x20registered.','The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.','The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.','resetPasswordExpires','save','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','host','Reset\x20Email\x20sent!','token','now','Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.','securePassword','enforcePasswordHistory','passwordHistoryLimit','previousPasswords','validatePasswordHistory','resetPasswordToken','local-login','User','util','passport','passport-local','Strategy','jayson/promise','lodash','randomstring','../../components/auth/service','../../config/utils','client','Setting','findOne','allowedLoginAttempts','blockDuration','then','name','password','role','blocked','blockedAt','loginAttempts','admin','agent','authenticate','disabled','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','add','minutes','clearBlockUser','getLicense','catch','MailAccount','find','email','MailServerOut','Smtp','CloudProvider','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','getSmtpOptions','merge','format','\x22%s\x22\x20<%s>','request','SendMail','error'];(function(_0x2f810c,_0x2eea8f){var _0x23148e=function(_0xa88b6f){while(--_0xa88b6f){_0x2f810c['push'](_0x2f810c['shift']());}};_0x23148e(++_0x2eea8f);}(_0xa6bf,0x1ee));var _0xfa6b=function(_0x2c4915,_0x49f1b0){_0x2c4915=_0x2c4915-0x0;var _0xcc391=_0xa6bf[_0x2c4915];return _0xcc391;};'use strict';var util=require(_0xfa6b('0x0'));var passport=require(_0xfa6b('0x1'));var LocalStrategy=require(_0xfa6b('0x2'))[_0xfa6b('0x3')];var jayson=require(_0xfa6b('0x4'));var _=require(_0xfa6b('0x5'));var rs=require(_0xfa6b('0x6'));var moment=require('moment');var db=require('../../mysqldb')['db'];var authService=require(_0xfa6b('0x7'));var utils=require(_0xfa6b('0x8'));var client=jayson[_0xfa6b('0x9')]['http']({'port':0x232b});function localAuthenticate(_0x55230d,_0x2920ee,_0x2bbb1a,_0x314b0d){var _0x51abea,_0x45d75e;return db[_0xfa6b('0xa')][_0xfa6b('0xb')]({'where':{'id':0x1},'attributes':[_0xfa6b('0xc'),_0xfa6b('0xd')],'raw':!![]})[_0xfa6b('0xe')](function(_0x341e69){_0x51abea=_0x341e69;return _0x55230d[_0xfa6b('0xb')]({'attributes':['id',_0xfa6b('0xf'),_0xfa6b('0x10'),'salt',_0xfa6b('0x11'),'disabled',_0xfa6b('0x12'),_0xfa6b('0x13'),_0xfa6b('0x14')],'where':{'name':_0x2920ee,'role':{'$or':[_0xfa6b('0x15'),'user',_0xfa6b('0x16')]}}});})[_0xfa6b('0xe')](function(_0x2b20f5){if(!_0x2b20f5||_0x2b20f5&&_0x2b20f5[_0xfa6b('0xf')]!==_0x2920ee){throw new Error('Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.');}else{_0x45d75e=_0x2b20f5;return _0x45d75e;}})[_0xfa6b('0xe')](function(){_0x45d75e[_0xfa6b('0x17')](_0x2bbb1a,function(_0x132900,_0x39d4fc){var _0x1614d1=_0x45d75e['loginAttempts']+0x1;if(_0x132900){return _0x314b0d(_0x132900);}else if(!_0x39d4fc){if(_0x45d75e[_0xfa6b('0x18')]){return _0x314b0d(null,![],{'message':_0xfa6b('0x19')});}else if(_0x51abea['allowedLoginAttempts']>0x0){if(_0x45d75e[_0xfa6b('0x12')]){if(_0x51abea[_0xfa6b('0xd')]>0x0){if(moment(_0x45d75e[_0xfa6b('0x13')])[_0xfa6b('0x1a')](_0x51abea['blockDuration'],_0xfa6b('0x1b'))>moment()){return _0x314b0d(null,![],{'message':_0xfa6b('0x19')});}else{return utils[_0xfa6b('0x1c')](_0x45d75e,_0x1614d1,![],null)['then'](function(){return _0x314b0d(null,![],{'message':_0xfa6b('0x19')});});}}else{return _0x314b0d(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}}else{if(_0x1614d1>=_0x51abea[_0xfa6b('0xc')]){return utils[_0xfa6b('0x1c')](_0x45d75e,0x0,!![],moment())[_0xfa6b('0xe')](function(){return _0x314b0d(null,![],{'message':_0xfa6b('0x19')});});}else{return utils[_0xfa6b('0x1c')](_0x45d75e,_0x1614d1,![],null)['then'](function(){return _0x314b0d(null,![],{'message':_0xfa6b('0x19')});});}}}else{return _0x314b0d(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}}else{if(_0x45d75e[_0xfa6b('0x18')]){return _0x314b0d(null,![],{'message':_0xfa6b('0x19')});}else if(_0x51abea[_0xfa6b('0xc')]>0x0){if(_0x45d75e[_0xfa6b('0x12')]){if(_0x51abea[_0xfa6b('0xd')]>0x0){if(moment(_0x45d75e['blockedAt'])[_0xfa6b('0x1a')](_0x51abea[_0xfa6b('0xd')],'minutes')>moment()){return _0x314b0d(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else{return utils[_0xfa6b('0x1c')](_0x45d75e,0x0,![],null)[_0xfa6b('0xe')](function(){return utils[_0xfa6b('0x1d')](_0x45d75e);})[_0xfa6b('0xe')](function(){return _0x314b0d(null,_0x45d75e);});}}else{return _0x314b0d(null,![],{'message':_0xfa6b('0x19')});}}else{return utils[_0xfa6b('0x1c')](_0x45d75e,0x0,![],null)[_0xfa6b('0xe')](function(){return utils[_0xfa6b('0x1d')](_0x45d75e);})[_0xfa6b('0xe')](function(){return _0x314b0d(null,_0x45d75e);})[_0xfa6b('0x1e')](function(_0x50a354){return _0x314b0d(null,![],_0x50a354);});}}else{if(_0x45d75e[_0xfa6b('0x12')]){return _0x314b0d(null,![],{'message':_0xfa6b('0x19')});}else{return utils[_0xfa6b('0x1d')](_0x45d75e)[_0xfa6b('0xe')](function(){return _0x314b0d(null,_0x45d75e);});}}}});})[_0xfa6b('0x1e')](function(_0x5c75ea){return _0x314b0d(null,![],_0x5c75ea);});}function sendServiceMail(_0x6b443){return db[_0xfa6b('0x1f')][_0xfa6b('0x20')]({'where':{'service':!![]},'attributes':['id','name',_0xfa6b('0x21')],'include':[{'model':db[_0xfa6b('0x22')],'as':_0xfa6b('0x23'),'include':[{'model':db[_0xfa6b('0x24')],'as':'CloudProvider'}]}]})['then'](function(_0x536f38){if(!_0x536f38){throw new Error(_0xfa6b('0x25'));}var _0x19d3ef=_0x536f38[_0xfa6b('0x26')]();var _0x135330={'account':_0x19d3ef,'message':_[_0xfa6b('0x27')]({'from':util[_0xfa6b('0x28')](_0xfa6b('0x29'),_0x536f38['name'],_0x536f38[_0xfa6b('0x21')]||_0x536f38[_0xfa6b('0x23')]['user'])},_0x6b443)};return client[_0xfa6b('0x2a')](_0xfa6b('0x2b'),_0x135330);})[_0xfa6b('0xe')](function(_0x249ac1){if(_0x249ac1[_0xfa6b('0x2c')]){throw new Error(util[_0xfa6b('0x28')]('SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!',_0x249ac1[_0xfa6b('0x2c')][_0xfa6b('0x2d')]||JSON['stringify'](_0x249ac1[_0xfa6b('0x2c')])));}return!![];});}function handleError(_0x19f09d,_0x1f760c,_0x15f5c7){return _0x19f09d[_0xfa6b('0x2e')](_0x1f760c||0x1f4)['send']({'message':_0x15f5c7?_0x15f5c7[_0xfa6b('0x2d')]||_0x15f5c7:''});}exports['login']=function(_0xebcd1,_0x4a1415,_0x78942b){passport[_0xfa6b('0x17')]('local-login',function(_0x4a92fb,_0x52b006,_0x10e4e6){var _0x5d0d7d=_0x4a92fb||_0x10e4e6;if(_0x5d0d7d){return handleError(_0x4a1415,0x191,_0x5d0d7d);}if(!_0x52b006){return handleError(_0x4a1415,0x194,{'message':_0xfa6b('0x2f')});}else{var _0x641689={'payload':{'id':_0x52b006['id'],'role':_0x52b006[_0xfa6b('0x11')]},'options':{'expiresIn':0x15180}};return authService[_0xfa6b('0x30')](_0x641689)[_0xfa6b('0xe')](function(_0x570bd6){_0x4a1415['json']({'id':_0x52b006['id'],'token':_0x570bd6,'statusCall':'','isAlreadyLogged':_0x52b006[_0xfa6b('0x31')]});});}})(_0xebcd1,_0x4a1415,_0x78942b);};exports['forgot']=function(_0x483b2b,_0x5bfa3a){if(!_0x483b2b[_0xfa6b('0x32')][_0xfa6b('0x21')]){return handleError(_0x5bfa3a,0x1f4,{'message':_0xfa6b('0x33')});}var _0xfc2751=rs[_0xfa6b('0x34')]();_0x483b2b['body'][_0xfa6b('0x21')]=_0x483b2b[_0xfa6b('0x32')][_0xfa6b('0x21')][_0xfa6b('0x35')]()[_0xfa6b('0x36')]();var _0x1fe190;return db[_0xfa6b('0xa')]['findOne']({'where':{'id':0x1},'attributes':[_0xfa6b('0xc'),_0xfa6b('0xd')],'raw':!![]})['then'](function(_0x4b89f1){_0x1fe190=_0x4b89f1;return db['User'][_0xfa6b('0x20')]({'where':{'email':_0x483b2b[_0xfa6b('0x32')]['email']}});})[_0xfa6b('0xe')](function(_0x3d76ca){if(!_0x3d76ca){throw new Error(_0xfa6b('0x37'));}if(_0x3d76ca[_0xfa6b('0x18')]){throw new Error(_0xfa6b('0x38'));}if(_0x3d76ca[_0xfa6b('0x12')]){if(moment(_0x3d76ca[_0xfa6b('0x13')])[_0xfa6b('0x1a')](_0x1fe190[_0xfa6b('0xd')],_0xfa6b('0x1b'))>moment()){throw new Error(_0xfa6b('0x39'));}else{_0x3d76ca[_0xfa6b('0x12')]=![];_0x3d76ca[_0xfa6b('0x13')]=null;}}_0x3d76ca['resetPasswordToken']=_0xfc2751;_0x3d76ca[_0xfa6b('0x3a')]=Date['now']()+0x36ee80;return _0x3d76ca[_0xfa6b('0x3b')]();})[_0xfa6b('0xe')](function(){return sendServiceMail({'to':_0x483b2b['body'][_0xfa6b('0x21')],'subject':_0xfa6b('0x3c'),'text':_0xfa6b('0x3d')+_0xfa6b('0x3e')+'https://'+_0x483b2b[_0xfa6b('0x3f')][_0xfa6b('0x40')]+'/reset/'+_0xfc2751+'\x0a\x0a'+'If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a'});})[_0xfa6b('0xe')](function(){_0x5bfa3a[_0xfa6b('0x2e')](0xc8)['send']({'message':_0xfa6b('0x41')});})[_0xfa6b('0x1e')](function(_0x1d0345){return handleError(_0x5bfa3a,0x1f4,_0x1d0345);});};exports['reset']=function(_0x57f206,_0x143213){return db['User'][_0xfa6b('0x20')]({'where':{'resetPasswordToken':_0x57f206['params'][_0xfa6b('0x42')],'resetPasswordExpires':{'$gt':Date[_0xfa6b('0x43')]()}}})['then'](function(_0x5cd874){if(!_0x5cd874){throw new Error(_0xfa6b('0x44'));}return db['Setting'][_0xfa6b('0xb')]({'attributes':['id',_0xfa6b('0x45'),_0xfa6b('0x46'),_0xfa6b('0x47')]})['then'](function(_0x4e7a1e){if(_0x4e7a1e[_0xfa6b('0x45')])authService['validatePasswordPattern'](_0x57f206[_0xfa6b('0x32')][_0xfa6b('0x10')]);if(!_0x4e7a1e['enforcePasswordHistory']||!_0x5cd874[_0xfa6b('0x48')])return _0x5cd874;authService[_0xfa6b('0x49')](_0x57f206[_0xfa6b('0x32')]['password'],_0x5cd874[_0xfa6b('0x48')],_0x4e7a1e['passwordHistoryLimit']);return _0x5cd874;})[_0xfa6b('0xe')](function(){_0x5cd874[_0xfa6b('0x10')]=_0x57f206[_0xfa6b('0x32')]['password'];_0x5cd874[_0xfa6b('0x4a')]=null;_0x5cd874[_0xfa6b('0x3a')]=null;return _0x5cd874[_0xfa6b('0x3b')]();});})[_0xfa6b('0xe')](function(){_0x143213[_0xfa6b('0x2e')](0xc8)['send']({'message':'Password\x20reset!'});})[_0xfa6b('0x1e')](function(_0x1104ad){return handleError(_0x143213,0x1f4,_0x1104ad);});};passport['use'](_0xfa6b('0x4b'),new LocalStrategy({'usernameField':'name','passwordField':_0xfa6b('0x10')},function(_0x25261f,_0x49aa2,_0x715b09){return localAuthenticate(db[_0xfa6b('0x4c')],_0x25261f,_0x49aa2,_0x715b09);}));