Built motion from commit 56a37f2a.|2.6.21
[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 _0xcdc7=['/reset/','Reset\x20Email\x20sent!','reset','params','Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.','securePassword','enforcePasswordHistory','validatePasswordHistory','previousPasswords','resetPasswordToken','save','status','Password\x20reset!','use','local-login','passport','passport-local','jayson/promise','lodash','randomstring','../../mysqldb','../../components/auth/service','../../config/utils','client','http','findOne','blockDuration','then','name','password','salt','role','disabled','blocked','blockedAt','admin','user','agent','loginAttempts','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','add','minutes','clearBlockUser','allowedLoginAttempts','getLicense','catch','MailAccount','find','MailServerOut','Smtp','CloudProvider','merge','format','email','request','SendMail','error','send','authenticate','Something\x20went\x20wrong,\x20please\x20try\x20again.','forgot','body','Email\x20parameter\x20is\x20missing','generate','Setting','User','The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.','The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.','resetPasswordExpires','now','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','https://','headers','host'];(function(_0x230d2a,_0x575d2e){var _0x3dddc1=function(_0x233594){while(--_0x233594){_0x230d2a['push'](_0x230d2a['shift']());}};_0x3dddc1(++_0x575d2e);}(_0xcdc7,0xf3));var _0x7cdc=function(_0x3009dc,_0x516db2){_0x3009dc=_0x3009dc-0x0;var _0x260d04=_0xcdc7[_0x3009dc];return _0x260d04;};'use strict';var util=require('util');var passport=require(_0x7cdc('0x0'));var LocalStrategy=require(_0x7cdc('0x1'))['Strategy'];var jayson=require(_0x7cdc('0x2'));var _=require(_0x7cdc('0x3'));var rs=require(_0x7cdc('0x4'));var moment=require('moment');var db=require(_0x7cdc('0x5'))['db'];var authService=require(_0x7cdc('0x6'));var utils=require(_0x7cdc('0x7'));var client=jayson[_0x7cdc('0x8')][_0x7cdc('0x9')]({'port':0x232b});function localAuthenticate(_0x3e081a,_0x139473,_0x21a4f8,_0x72f767){var _0x8b16a7,_0xe40698;return db['Setting'][_0x7cdc('0xa')]({'where':{'id':0x1},'attributes':['allowedLoginAttempts',_0x7cdc('0xb')],'raw':!![]})[_0x7cdc('0xc')](function(_0xb158d8){_0x8b16a7=_0xb158d8;return _0x3e081a['findOne']({'attributes':['id',_0x7cdc('0xd'),_0x7cdc('0xe'),_0x7cdc('0xf'),_0x7cdc('0x10'),_0x7cdc('0x11'),_0x7cdc('0x12'),_0x7cdc('0x13'),'loginAttempts'],'where':{'name':_0x139473,'role':{'$or':[_0x7cdc('0x14'),_0x7cdc('0x15'),_0x7cdc('0x16')]}}});})[_0x7cdc('0xc')](function(_0x74f464){if(!_0x74f464||_0x74f464&&_0x74f464['name']!==_0x139473){throw new Error('Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.');}else{_0xe40698=_0x74f464;return _0xe40698;}})[_0x7cdc('0xc')](function(){_0xe40698['authenticate'](_0x21a4f8,function(_0x44ce2c,_0x1174e2){var _0x63673a=_0xe40698[_0x7cdc('0x17')]+0x1;if(_0x44ce2c){return _0x72f767(_0x44ce2c);}else if(!_0x1174e2){if(_0xe40698['disabled']){return _0x72f767(null,![],{'message':_0x7cdc('0x18')});}else if(_0x8b16a7['allowedLoginAttempts']>0x0){if(_0xe40698['blocked']){if(_0x8b16a7[_0x7cdc('0xb')]>0x0){if(moment(_0xe40698['blockedAt'])[_0x7cdc('0x19')](_0x8b16a7[_0x7cdc('0xb')],_0x7cdc('0x1a'))>moment()){return _0x72f767(null,![],{'message':_0x7cdc('0x18')});}else{return utils[_0x7cdc('0x1b')](_0xe40698,_0x63673a,![],null)[_0x7cdc('0xc')](function(){return _0x72f767(null,![],{'message':_0x7cdc('0x18')});});}}else{return _0x72f767(null,![],{'message':_0x7cdc('0x18')});}}else{if(_0x63673a>=_0x8b16a7[_0x7cdc('0x1c')]){return utils[_0x7cdc('0x1b')](_0xe40698,0x0,!![],moment())[_0x7cdc('0xc')](function(){return _0x72f767(null,![],{'message':_0x7cdc('0x18')});});}else{return utils[_0x7cdc('0x1b')](_0xe40698,_0x63673a,![],null)['then'](function(){return _0x72f767(null,![],{'message':_0x7cdc('0x18')});});}}}else{return _0x72f767(null,![],{'message':_0x7cdc('0x18')});}}else{if(_0xe40698[_0x7cdc('0x11')]){return _0x72f767(null,![],{'message':_0x7cdc('0x18')});}else if(_0x8b16a7[_0x7cdc('0x1c')]>0x0){if(_0xe40698[_0x7cdc('0x12')]){if(_0x8b16a7['blockDuration']>0x0){if(moment(_0xe40698[_0x7cdc('0x13')])[_0x7cdc('0x19')](_0x8b16a7[_0x7cdc('0xb')],_0x7cdc('0x1a'))>moment()){return _0x72f767(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else{return utils[_0x7cdc('0x1b')](_0xe40698,0x0,![],null)[_0x7cdc('0xc')](function(){return utils[_0x7cdc('0x1d')](_0xe40698);})[_0x7cdc('0xc')](function(){return _0x72f767(null,_0xe40698);});}}else{return _0x72f767(null,![],{'message':_0x7cdc('0x18')});}}else{return utils['clearBlockUser'](_0xe40698,0x0,![],null)[_0x7cdc('0xc')](function(){return utils[_0x7cdc('0x1d')](_0xe40698);})[_0x7cdc('0xc')](function(){return _0x72f767(null,_0xe40698);})[_0x7cdc('0x1e')](function(_0x5c7576){return _0x72f767(null,![],_0x5c7576);});}}else{if(_0xe40698[_0x7cdc('0x12')]){return _0x72f767(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else{return utils[_0x7cdc('0x1d')](_0xe40698)[_0x7cdc('0xc')](function(){return _0x72f767(null,_0xe40698);});}}}});})['catch'](function(_0x42e326){return _0x72f767(null,![],_0x42e326);});}function sendServiceMail(_0x5f0954){return db[_0x7cdc('0x1f')][_0x7cdc('0x20')]({'where':{'service':!![]},'attributes':['id','name','email'],'include':[{'model':db[_0x7cdc('0x21')],'as':_0x7cdc('0x22'),'include':[{'model':db[_0x7cdc('0x23')],'as':_0x7cdc('0x23')}]}]})[_0x7cdc('0xc')](function(_0x38f290){if(!_0x38f290){throw new Error('Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!');}var _0x1604ac=_0x38f290['getSmtpOptions']();var _0x409fbe={'account':_0x1604ac,'message':_[_0x7cdc('0x24')]({'from':util[_0x7cdc('0x25')]('\x22%s\x22\x20<%s>',_0x38f290[_0x7cdc('0xd')],_0x38f290[_0x7cdc('0x26')]||_0x38f290['Smtp'][_0x7cdc('0x15')])},_0x5f0954)};return client[_0x7cdc('0x27')](_0x7cdc('0x28'),_0x409fbe);})[_0x7cdc('0xc')](function(_0x22a6af){if(_0x22a6af[_0x7cdc('0x29')]){throw new Error(util[_0x7cdc('0x25')]('SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!',_0x22a6af[_0x7cdc('0x29')]['message']||JSON['stringify'](_0x22a6af[_0x7cdc('0x29')])));}return!![];});}function handleError(_0x39a3a0,_0x5bc668,_0x125ed0){return _0x39a3a0['status'](_0x5bc668||0x1f4)[_0x7cdc('0x2a')]({'message':_0x125ed0?_0x125ed0['message']||_0x125ed0:''});}exports['login']=function(_0x50e143,_0x2f2e83,_0x5d8161){passport[_0x7cdc('0x2b')]('local-login',function(_0x6238fe,_0x1982a0,_0x1009a9){var _0x310d1e=_0x6238fe||_0x1009a9;if(_0x310d1e){return handleError(_0x2f2e83,0x191,_0x310d1e);}if(!_0x1982a0){return handleError(_0x2f2e83,0x194,{'message':_0x7cdc('0x2c')});}else{var _0x5332d5={'payload':{'id':_0x1982a0['id'],'role':_0x1982a0[_0x7cdc('0x10')]},'options':{'expiresIn':0x15180}};return authService['signToken'](_0x5332d5)['then'](function(_0x562d67){_0x2f2e83['json']({'id':_0x1982a0['id'],'token':_0x562d67,'statusCall':'','isAlreadyLogged':_0x1982a0['online']});});}})(_0x50e143,_0x2f2e83,_0x5d8161);};exports[_0x7cdc('0x2d')]=function(_0xe6e800,_0x26c1aa){if(!_0xe6e800[_0x7cdc('0x2e')][_0x7cdc('0x26')]){return handleError(_0x26c1aa,0x1f4,{'message':_0x7cdc('0x2f')});}var _0x3c3909=rs[_0x7cdc('0x30')]();_0xe6e800[_0x7cdc('0x2e')][_0x7cdc('0x26')]=_0xe6e800['body'][_0x7cdc('0x26')]['trim']()['toLowerCase']();var _0x14913d;return db[_0x7cdc('0x31')][_0x7cdc('0xa')]({'where':{'id':0x1},'attributes':[_0x7cdc('0x1c'),_0x7cdc('0xb')],'raw':!![]})[_0x7cdc('0xc')](function(_0x31fc80){_0x14913d=_0x31fc80;return db[_0x7cdc('0x32')][_0x7cdc('0x20')]({'where':{'email':_0xe6e800['body'][_0x7cdc('0x26')]}});})[_0x7cdc('0xc')](function(_0x3b7a6c){if(!_0x3b7a6c){throw new Error('This\x20email\x20is\x20not\x20registered.');}if(_0x3b7a6c[_0x7cdc('0x11')]){throw new Error(_0x7cdc('0x33'));}if(_0x3b7a6c['blocked']){if(moment(_0x3b7a6c[_0x7cdc('0x13')])[_0x7cdc('0x19')](_0x14913d[_0x7cdc('0xb')],_0x7cdc('0x1a'))>moment()){throw new Error(_0x7cdc('0x34'));}else{_0x3b7a6c['blocked']=![];_0x3b7a6c['blockedAt']=null;}}_0x3b7a6c['resetPasswordToken']=_0x3c3909;_0x3b7a6c[_0x7cdc('0x35')]=Date[_0x7cdc('0x36')]()+0x36ee80;return _0x3b7a6c['save']();})[_0x7cdc('0xc')](function(){return sendServiceMail({'to':_0xe6e800['body']['email'],'subject':_0x7cdc('0x37'),'text':_0x7cdc('0x38')+_0x7cdc('0x39')+_0x7cdc('0x3a')+_0xe6e800[_0x7cdc('0x3b')][_0x7cdc('0x3c')]+_0x7cdc('0x3d')+_0x3c3909+'\x0a\x0a'+'If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a'});})[_0x7cdc('0xc')](function(){_0x26c1aa['status'](0xc8)[_0x7cdc('0x2a')]({'message':_0x7cdc('0x3e')});})[_0x7cdc('0x1e')](function(_0x152184){return handleError(_0x26c1aa,0x1f4,_0x152184);});};exports[_0x7cdc('0x3f')]=function(_0x5df9a7,_0x5412e5){return db['User'][_0x7cdc('0x20')]({'where':{'resetPasswordToken':_0x5df9a7[_0x7cdc('0x40')]['token'],'resetPasswordExpires':{'$gt':Date[_0x7cdc('0x36')]()}}})[_0x7cdc('0xc')](function(_0x3b4c69){if(!_0x3b4c69){throw new Error(_0x7cdc('0x41'));}return db[_0x7cdc('0x31')]['findOne']({'attributes':['id',_0x7cdc('0x42'),_0x7cdc('0x43'),'passwordHistoryLimit']})[_0x7cdc('0xc')](function(_0xe3c04e){if(_0xe3c04e['securePassword'])authService['validatePasswordPattern'](_0x5df9a7['body'][_0x7cdc('0xe')]);if(!_0xe3c04e[_0x7cdc('0x43')]||!_0x3b4c69['previousPasswords'])return _0x3b4c69;authService[_0x7cdc('0x44')](_0x5df9a7['body'][_0x7cdc('0xe')],_0x3b4c69[_0x7cdc('0x45')],_0xe3c04e['passwordHistoryLimit']);return _0x3b4c69;})[_0x7cdc('0xc')](function(){_0x3b4c69['password']=_0x5df9a7['body'][_0x7cdc('0xe')];_0x3b4c69[_0x7cdc('0x46')]=null;_0x3b4c69[_0x7cdc('0x35')]=null;return _0x3b4c69[_0x7cdc('0x47')]();});})['then'](function(){_0x5412e5[_0x7cdc('0x48')](0xc8)[_0x7cdc('0x2a')]({'message':_0x7cdc('0x49')});})[_0x7cdc('0x1e')](function(_0x22fe53){return handleError(_0x5412e5,0x1f4,_0x22fe53);});};passport[_0x7cdc('0x4a')](_0x7cdc('0x4b'),new LocalStrategy({'usernameField':'name','passwordField':_0x7cdc('0xe')},function(_0x10c849,_0x1dc6a5,_0x4d0c58){return localAuthenticate(db[_0x7cdc('0x32')],_0x10c849,_0x1dc6a5,_0x4d0c58);}));