89d6237ce15fc1a4da1d6a7bb4c2588ff26f8b74
[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 _0x0504=['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://','/reset/','If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a','status','Reset\x20Email\x20sent!','token','securePassword','passwordHistoryLimit','validatePasswordPattern','enforcePasswordHistory','previousPasswords','Password\x20reset!','use','User','passport','passport-local','Strategy','lodash','randomstring','moment','../../config/utils','client','http','allowedLoginAttempts','then','findOne','name','password','salt','role','disabled','blockedAt','loginAttempts','admin','agent','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','authenticate','blockDuration','minutes','clearBlockUser','add','getLicense','catch','blocked','MailAccount','find','email','MailServerOut','Smtp','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','service','host','port','secure','authentication','auth','user','merge','\x22%s\x22\x20<%s>','request','SendMail','error','format','message','send','login','local-login','Something\x20went\x20wrong,\x20please\x20try\x20again.','signToken','json','online','forgot','body','Email\x20parameter\x20is\x20missing','generate','trim','toLowerCase','Setting','This\x20email\x20is\x20not\x20registered.','The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.','The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.','resetPasswordToken','resetPasswordExpires','now','xCally\x20Motion\x20Password\x20Reset'];(function(_0x175ee9,_0x2de806){var _0x475b96=function(_0x98c9ec){while(--_0x98c9ec){_0x175ee9['push'](_0x175ee9['shift']());}};_0x475b96(++_0x2de806);}(_0x0504,0x1c3));var _0x4050=function(_0xb0f7c3,_0x4eae95){_0xb0f7c3=_0xb0f7c3-0x0;var _0x28ea68=_0x0504[_0xb0f7c3];return _0x28ea68;};'use strict';var util=require('util');var passport=require(_0x4050('0x0'));var LocalStrategy=require(_0x4050('0x1'))[_0x4050('0x2')];var jayson=require('jayson/promise');var _=require(_0x4050('0x3'));var rs=require(_0x4050('0x4'));var moment=require(_0x4050('0x5'));var db=require('../../mysqldb')['db'];var authService=require('../../components/auth/service');var utils=require(_0x4050('0x6'));var client=jayson[_0x4050('0x7')][_0x4050('0x8')]({'port':0x232b});function localAuthenticate(_0x4b86c4,_0x307538,_0x321748,_0x1d7eb0){var _0x4276cc,_0x21b34d;return db['Setting']['findOne']({'where':{'id':0x1},'attributes':[_0x4050('0x9'),'blockDuration'],'raw':!![]})[_0x4050('0xa')](function(_0x55f2fa){_0x4276cc=_0x55f2fa;return _0x4b86c4[_0x4050('0xb')]({'attributes':['id',_0x4050('0xc'),_0x4050('0xd'),_0x4050('0xe'),_0x4050('0xf'),_0x4050('0x10'),'blocked',_0x4050('0x11'),_0x4050('0x12')],'where':{'name':_0x307538,'role':{'$or':[_0x4050('0x13'),'user',_0x4050('0x14')]}}});})[_0x4050('0xa')](function(_0x57be0e){if(!_0x57be0e||_0x57be0e&&_0x57be0e['name']!==_0x307538){throw new Error(_0x4050('0x15'));}else{_0x21b34d=_0x57be0e;return _0x21b34d;}})[_0x4050('0xa')](function(){_0x21b34d[_0x4050('0x16')](_0x321748,function(_0x49cbdb,_0x4f632a){var _0x56c435=_0x21b34d[_0x4050('0x12')]+0x1;if(_0x49cbdb){return _0x1d7eb0(_0x49cbdb);}else if(!_0x4f632a){if(_0x21b34d[_0x4050('0x10')]){return _0x1d7eb0(null,![],{'message':_0x4050('0x15')});}else if(_0x4276cc[_0x4050('0x9')]>0x0){if(_0x21b34d['blocked']){if(_0x4276cc[_0x4050('0x17')]>0x0){if(moment(_0x21b34d[_0x4050('0x11')])['add'](_0x4276cc[_0x4050('0x17')],_0x4050('0x18'))>moment()){return _0x1d7eb0(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else{return utils[_0x4050('0x19')](_0x21b34d,_0x56c435,![],null)[_0x4050('0xa')](function(){return _0x1d7eb0(null,![],{'message':_0x4050('0x15')});});}}else{return _0x1d7eb0(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}}else{if(_0x56c435>=_0x4276cc['allowedLoginAttempts']){return utils[_0x4050('0x19')](_0x21b34d,0x0,!![],moment())[_0x4050('0xa')](function(){return _0x1d7eb0(null,![],{'message':_0x4050('0x15')});});}else{return utils['clearBlockUser'](_0x21b34d,_0x56c435,![],null)[_0x4050('0xa')](function(){return _0x1d7eb0(null,![],{'message':_0x4050('0x15')});});}}}else{return _0x1d7eb0(null,![],{'message':_0x4050('0x15')});}}else{if(_0x21b34d['disabled']){return _0x1d7eb0(null,![],{'message':_0x4050('0x15')});}else if(_0x4276cc['allowedLoginAttempts']>0x0){if(_0x21b34d['blocked']){if(_0x4276cc[_0x4050('0x17')]>0x0){if(moment(_0x21b34d['blockedAt'])[_0x4050('0x1a')](_0x4276cc[_0x4050('0x17')],_0x4050('0x18'))>moment()){return _0x1d7eb0(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else{return utils[_0x4050('0x19')](_0x21b34d,0x0,![],null)['then'](function(){return utils[_0x4050('0x1b')](_0x21b34d);})['then'](function(){return _0x1d7eb0(null,_0x21b34d);});}}else{return _0x1d7eb0(null,![],{'message':_0x4050('0x15')});}}else{return utils[_0x4050('0x19')](_0x21b34d,0x0,![],null)[_0x4050('0xa')](function(){return utils[_0x4050('0x1b')](_0x21b34d);})['then'](function(){return _0x1d7eb0(null,_0x21b34d);})[_0x4050('0x1c')](function(_0xa592d9){return _0x1d7eb0(null,![],_0xa592d9);});}}else{if(_0x21b34d[_0x4050('0x1d')]){return _0x1d7eb0(null,![],{'message':_0x4050('0x15')});}else{return utils[_0x4050('0x1b')](_0x21b34d)[_0x4050('0xa')](function(){return _0x1d7eb0(null,_0x21b34d);});}}}});})[_0x4050('0x1c')](function(_0x34e6af){return _0x1d7eb0(null,![],_0x34e6af);});}function sendServiceMail(_0xb6fe4){return db[_0x4050('0x1e')][_0x4050('0x1f')]({'where':{'service':!![]},'attributes':['id','name',_0x4050('0x20')],'include':[{'model':db[_0x4050('0x21')],'as':_0x4050('0x22')}]})[_0x4050('0xa')](function(_0x1783ad){if(!_0x1783ad){throw new Error(_0x4050('0x23'));}var _0x5f4142={'tls':{'rejectUnauthorized':![]}};if(_0x1783ad['Smtp'][_0x4050('0x24')]){_0x5f4142[_0x4050('0x24')]=_0x1783ad[_0x4050('0x22')]['service'];}else{_0x5f4142[_0x4050('0x25')]=_0x1783ad[_0x4050('0x22')][_0x4050('0x25')];_0x5f4142['port']=_0x1783ad[_0x4050('0x22')][_0x4050('0x26')];_0x5f4142[_0x4050('0x27')]=_0x1783ad['Smtp'][_0x4050('0x27')];}if(_0x1783ad[_0x4050('0x22')][_0x4050('0x28')]){_0x5f4142[_0x4050('0x29')]={'user':_0x1783ad[_0x4050('0x22')][_0x4050('0x2a')],'pass':_0x1783ad['Smtp']['pass']};}var _0x1f3860={'account':_0x5f4142,'message':_[_0x4050('0x2b')]({'from':util['format'](_0x4050('0x2c'),_0x1783ad[_0x4050('0xc')],_0x1783ad[_0x4050('0x20')]||_0x1783ad[_0x4050('0x22')][_0x4050('0x2a')])},_0xb6fe4)};return client[_0x4050('0x2d')](_0x4050('0x2e'),_0x1f3860);})[_0x4050('0xa')](function(_0x1fb041){if(_0x1fb041[_0x4050('0x2f')]){throw new Error(util[_0x4050('0x30')]('SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!',_0x1fb041[_0x4050('0x2f')][_0x4050('0x31')]||JSON['stringify'](_0x1fb041['error'])));}return!![];});}function handleError(_0x5673b1,_0x5577da,_0x14acf3){return _0x5673b1['status'](_0x5577da||0x1f4)[_0x4050('0x32')]({'message':_0x14acf3?_0x14acf3[_0x4050('0x31')]||_0x14acf3:''});}exports[_0x4050('0x33')]=function(_0x45c739,_0x46b415,_0x24e37a){passport['authenticate'](_0x4050('0x34'),function(_0x2ac8fd,_0x182351,_0x26a480){var _0x43155a=_0x2ac8fd||_0x26a480;if(_0x43155a){return handleError(_0x46b415,0x191,_0x43155a);}if(!_0x182351){return handleError(_0x46b415,0x194,{'message':_0x4050('0x35')});}else{var _0x1ed4ed={'payload':{'id':_0x182351['id'],'role':_0x182351[_0x4050('0xf')]},'options':{'expiresIn':0x15180}};return authService[_0x4050('0x36')](_0x1ed4ed)[_0x4050('0xa')](function(_0x1e9a0c){_0x46b415[_0x4050('0x37')]({'id':_0x182351['id'],'token':_0x1e9a0c,'statusCall':'','isAlreadyLogged':_0x182351[_0x4050('0x38')]});});}})(_0x45c739,_0x46b415,_0x24e37a);};exports[_0x4050('0x39')]=function(_0x48b16,_0x2bfc6b,_0x929dea){if(!_0x48b16[_0x4050('0x3a')][_0x4050('0x20')]){return handleError(_0x2bfc6b,0x1f4,{'message':_0x4050('0x3b')});}var _0x12624f=rs[_0x4050('0x3c')]();_0x48b16['body'][_0x4050('0x20')]=_0x48b16[_0x4050('0x3a')][_0x4050('0x20')][_0x4050('0x3d')]()[_0x4050('0x3e')]();var _0x514fe8;return db[_0x4050('0x3f')][_0x4050('0xb')]({'where':{'id':0x1},'attributes':['allowedLoginAttempts',_0x4050('0x17')],'raw':!![]})[_0x4050('0xa')](function(_0x41f3b4){_0x514fe8=_0x41f3b4;return db['User']['find']({'where':{'email':_0x48b16['body'][_0x4050('0x20')]}});})[_0x4050('0xa')](function(_0x1d256e){if(!_0x1d256e){throw new Error(_0x4050('0x40'));}if(_0x1d256e['disabled']){throw new Error(_0x4050('0x41'));}if(_0x1d256e[_0x4050('0x1d')]){if(moment(_0x1d256e[_0x4050('0x11')])[_0x4050('0x1a')](_0x514fe8[_0x4050('0x17')],_0x4050('0x18'))>moment()){throw new Error(_0x4050('0x42'));}else{_0x1d256e[_0x4050('0x1d')]=![];_0x1d256e[_0x4050('0x11')]=null;}}_0x1d256e[_0x4050('0x43')]=_0x12624f;_0x1d256e[_0x4050('0x44')]=Date[_0x4050('0x45')]()+0x36ee80;return _0x1d256e['save']();})['then'](function(){return sendServiceMail({'to':_0x48b16['body']['email'],'subject':_0x4050('0x46'),'text':_0x4050('0x47')+_0x4050('0x48')+_0x4050('0x49')+_0x48b16['headers'][_0x4050('0x25')]+_0x4050('0x4a')+_0x12624f+'\x0a\x0a'+_0x4050('0x4b')});})[_0x4050('0xa')](function(){_0x2bfc6b[_0x4050('0x4c')](0xc8)[_0x4050('0x32')]({'message':_0x4050('0x4d')});})['catch'](function(_0x3a7c0a){return handleError(_0x2bfc6b,0x1f4,_0x3a7c0a);});};exports['reset']=function(_0x2b4996,_0x58bf2e,_0x1b49a9){return db['User'][_0x4050('0x1f')]({'where':{'resetPasswordToken':_0x2b4996['params'][_0x4050('0x4e')],'resetPasswordExpires':{'$gt':Date[_0x4050('0x45')]()}}})[_0x4050('0xa')](function(_0x3fcfc3){if(!_0x3fcfc3){throw new Error('Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.');}return db[_0x4050('0x3f')]['findOne']({'attributes':['id',_0x4050('0x4f'),'enforcePasswordHistory',_0x4050('0x50')]})[_0x4050('0xa')](function(_0x3e229f){if(_0x3e229f[_0x4050('0x4f')])authService[_0x4050('0x51')](_0x2b4996[_0x4050('0x3a')][_0x4050('0xd')]);if(!_0x3e229f[_0x4050('0x52')]||!_0x3fcfc3[_0x4050('0x53')])return _0x3fcfc3;authService['validatePasswordHistory'](_0x2b4996[_0x4050('0x3a')][_0x4050('0xd')],_0x3fcfc3[_0x4050('0x53')],_0x3e229f[_0x4050('0x50')]);return _0x3fcfc3;})[_0x4050('0xa')](function(){_0x3fcfc3['password']=_0x2b4996[_0x4050('0x3a')][_0x4050('0xd')];_0x3fcfc3[_0x4050('0x43')]=null;_0x3fcfc3[_0x4050('0x44')]=null;return _0x3fcfc3['save']();});})['then'](function(){_0x58bf2e[_0x4050('0x4c')](0xc8)[_0x4050('0x32')]({'message':_0x4050('0x54')});})['catch'](function(_0x5c7693){return handleError(_0x58bf2e,0x1f4,_0x5c7693);});};passport[_0x4050('0x55')](_0x4050('0x34'),new LocalStrategy({'usernameField':_0x4050('0xc'),'passwordField':_0x4050('0xd')},function(_0x25ab86,_0x33cdfa,_0x2bca79){return localAuthenticate(db[_0x4050('0x56')],_0x25ab86,_0x33cdfa,_0x2bca79);}));