27dceebc08bc66aa380530427e97ab1e653eab7c
[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 _0x92be=['online','Email\x20parameter\x20is\x20missing','generate','body','The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.','The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.','resetPasswordToken','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://','host','/reset/','If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a','Reset\x20Email\x20sent!','User','securePassword','enforcePasswordHistory','passwordHistoryLimit','validatePasswordPattern','password','previousPasswords','Password\x20reset!','use','local-login','passport','passport-local','Strategy','jayson/promise','moment','../../mysqldb','../../components/auth/service','../../config/utils','client','http','Setting','findOne','allowedLoginAttempts','blockDuration','then','name','salt','disabled','blockedAt','loginAttempts','admin','user','authenticate','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','blocked','add','minutes','clearBlockUser','catch','getLicense','MailAccount','find','email','MailServerOut','Smtp','CloudProvider','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','merge','format','\x22%s\x22\x20<%s>','request','SendMail','error','SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!','message','stringify','status','send','Something\x20went\x20wrong,\x20please\x20try\x20again.','role'];(function(_0xf22dce,_0x46f799){var _0x55c4ba=function(_0xc09efa){while(--_0xc09efa){_0xf22dce['push'](_0xf22dce['shift']());}};_0x55c4ba(++_0x46f799);}(_0x92be,0x1e9));var _0xe92b=function(_0x4a9fb1,_0x273043){_0x4a9fb1=_0x4a9fb1-0x0;var _0x348672=_0x92be[_0x4a9fb1];return _0x348672;};'use strict';var util=require('util');var passport=require(_0xe92b('0x0'));var LocalStrategy=require(_0xe92b('0x1'))[_0xe92b('0x2')];var jayson=require(_0xe92b('0x3'));var _=require('lodash');var rs=require('randomstring');var moment=require(_0xe92b('0x4'));var db=require(_0xe92b('0x5'))['db'];var authService=require(_0xe92b('0x6'));var utils=require(_0xe92b('0x7'));var client=jayson[_0xe92b('0x8')][_0xe92b('0x9')]({'port':0x232b});function localAuthenticate(_0x2659e0,_0x3049aa,_0x4342d6,_0x1d5740){var _0x1cd802,_0x1d8c32;return db[_0xe92b('0xa')][_0xe92b('0xb')]({'where':{'id':0x1},'attributes':[_0xe92b('0xc'),_0xe92b('0xd')],'raw':!![]})[_0xe92b('0xe')](function(_0x28ad6e){_0x1cd802=_0x28ad6e;return _0x2659e0[_0xe92b('0xb')]({'attributes':['id',_0xe92b('0xf'),'password',_0xe92b('0x10'),'role',_0xe92b('0x11'),'blocked',_0xe92b('0x12'),_0xe92b('0x13')],'where':{'name':_0x3049aa,'role':{'$or':[_0xe92b('0x14'),_0xe92b('0x15'),'agent']}}});})[_0xe92b('0xe')](function(_0x1befce){if(!_0x1befce||_0x1befce&&_0x1befce['name']!==_0x3049aa){throw new Error('Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.');}else{_0x1d8c32=_0x1befce;return _0x1d8c32;}})[_0xe92b('0xe')](function(){_0x1d8c32[_0xe92b('0x16')](_0x4342d6,function(_0x43b4cb,_0x1d3b30){var _0x208bc2=_0x1d8c32['loginAttempts']+0x1;if(_0x43b4cb){return _0x1d5740(_0x43b4cb);}else if(!_0x1d3b30){if(_0x1d8c32[_0xe92b('0x11')]){return _0x1d5740(null,![],{'message':_0xe92b('0x17')});}else if(_0x1cd802[_0xe92b('0xc')]>0x0){if(_0x1d8c32[_0xe92b('0x18')]){if(_0x1cd802[_0xe92b('0xd')]>0x0){if(moment(_0x1d8c32[_0xe92b('0x12')])[_0xe92b('0x19')](_0x1cd802['blockDuration'],_0xe92b('0x1a'))>moment()){return _0x1d5740(null,![],{'message':_0xe92b('0x17')});}else{return utils['clearBlockUser'](_0x1d8c32,_0x208bc2,![],null)[_0xe92b('0xe')](function(){return _0x1d5740(null,![],{'message':_0xe92b('0x17')});});}}else{return _0x1d5740(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}}else{if(_0x208bc2>=_0x1cd802['allowedLoginAttempts']){return utils[_0xe92b('0x1b')](_0x1d8c32,0x0,!![],moment())[_0xe92b('0xe')](function(){return _0x1d5740(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});});}else{return utils['clearBlockUser'](_0x1d8c32,_0x208bc2,![],null)['then'](function(){return _0x1d5740(null,![],{'message':_0xe92b('0x17')});});}}}else{return _0x1d5740(null,![],{'message':_0xe92b('0x17')});}}else{if(_0x1d8c32[_0xe92b('0x11')]){return _0x1d5740(null,![],{'message':_0xe92b('0x17')});}else if(_0x1cd802[_0xe92b('0xc')]>0x0){if(_0x1d8c32[_0xe92b('0x18')]){if(_0x1cd802['blockDuration']>0x0){if(moment(_0x1d8c32[_0xe92b('0x12')])['add'](_0x1cd802[_0xe92b('0xd')],_0xe92b('0x1a'))>moment()){return _0x1d5740(null,![],{'message':_0xe92b('0x17')});}else{return utils['clearBlockUser'](_0x1d8c32,0x0,![],null)[_0xe92b('0xe')](function(){return utils['getLicense'](_0x1d8c32);})[_0xe92b('0xe')](function(){return _0x1d5740(null,_0x1d8c32);});}}else{return _0x1d5740(null,![],{'message':_0xe92b('0x17')});}}else{return utils[_0xe92b('0x1b')](_0x1d8c32,0x0,![],null)[_0xe92b('0xe')](function(){return utils['getLicense'](_0x1d8c32);})[_0xe92b('0xe')](function(){return _0x1d5740(null,_0x1d8c32);})[_0xe92b('0x1c')](function(_0x38f2c8){return _0x1d5740(null,![],_0x38f2c8);});}}else{if(_0x1d8c32[_0xe92b('0x18')]){return _0x1d5740(null,![],{'message':_0xe92b('0x17')});}else{return utils[_0xe92b('0x1d')](_0x1d8c32)[_0xe92b('0xe')](function(){return _0x1d5740(null,_0x1d8c32);});}}}});})[_0xe92b('0x1c')](function(_0x211dd4){return _0x1d5740(null,![],_0x211dd4);});}function sendServiceMail(_0x3ab183){return db[_0xe92b('0x1e')][_0xe92b('0x1f')]({'where':{'service':!![]},'attributes':['id',_0xe92b('0xf'),_0xe92b('0x20')],'include':[{'model':db[_0xe92b('0x21')],'as':_0xe92b('0x22'),'include':[{'model':db['CloudProvider'],'as':_0xe92b('0x23')}]}]})[_0xe92b('0xe')](function(_0xeee233){if(!_0xeee233){throw new Error(_0xe92b('0x24'));}var _0x1cc3a9=_0xeee233['getSmtpOptions']();var _0xfdadf8={'account':_0x1cc3a9,'message':_[_0xe92b('0x25')]({'from':util[_0xe92b('0x26')](_0xe92b('0x27'),_0xeee233[_0xe92b('0xf')],_0xeee233[_0xe92b('0x20')]||_0xeee233[_0xe92b('0x22')][_0xe92b('0x15')])},_0x3ab183)};return client[_0xe92b('0x28')](_0xe92b('0x29'),_0xfdadf8);})[_0xe92b('0xe')](function(_0x18fe1f){if(_0x18fe1f[_0xe92b('0x2a')]){throw new Error(util[_0xe92b('0x26')](_0xe92b('0x2b'),_0x18fe1f['error'][_0xe92b('0x2c')]||JSON[_0xe92b('0x2d')](_0x18fe1f['error'])));}return!![];});}function handleError(_0x5619c9,_0x470240,_0x187f01){return _0x5619c9[_0xe92b('0x2e')](_0x470240||0x1f4)[_0xe92b('0x2f')]({'message':_0x187f01?_0x187f01['message']||_0x187f01:''});}exports['login']=function(_0x5ede8c,_0x588438,_0xd16fd0){passport['authenticate']('local-login',function(_0x496169,_0x12c97f,_0x49f157){var _0x395d5f=_0x496169||_0x49f157;if(_0x395d5f){return handleError(_0x588438,0x191,_0x395d5f);}if(!_0x12c97f){return handleError(_0x588438,0x194,{'message':_0xe92b('0x30')});}else{var _0x4afa05={'payload':{'id':_0x12c97f['id'],'role':_0x12c97f[_0xe92b('0x31')]},'options':{'expiresIn':0x15180}};return authService['signToken'](_0x4afa05)[_0xe92b('0xe')](function(_0x15e83d){_0x588438['json']({'id':_0x12c97f['id'],'token':_0x15e83d,'statusCall':'','isAlreadyLogged':_0x12c97f[_0xe92b('0x32')]});});}})(_0x5ede8c,_0x588438,_0xd16fd0);};exports['forgot']=function(_0x14ce75,_0x421e8f){if(!_0x14ce75['body'][_0xe92b('0x20')]){return handleError(_0x421e8f,0x1f4,{'message':_0xe92b('0x33')});}var _0x334a73=rs[_0xe92b('0x34')]();_0x14ce75[_0xe92b('0x35')]['email']=_0x14ce75[_0xe92b('0x35')]['email']['trim']()['toLowerCase']();var _0x3a9f9b;return db[_0xe92b('0xa')][_0xe92b('0xb')]({'where':{'id':0x1},'attributes':['allowedLoginAttempts',_0xe92b('0xd')],'raw':!![]})[_0xe92b('0xe')](function(_0x14e8bb){_0x3a9f9b=_0x14e8bb;return db['User'][_0xe92b('0x1f')]({'where':{'email':_0x14ce75['body'][_0xe92b('0x20')]}});})['then'](function(_0x4bf949){if(!_0x4bf949){throw new Error('This\x20email\x20is\x20not\x20registered.');}if(_0x4bf949[_0xe92b('0x11')]){throw new Error(_0xe92b('0x36'));}if(_0x4bf949[_0xe92b('0x18')]){if(moment(_0x4bf949[_0xe92b('0x12')])['add'](_0x3a9f9b[_0xe92b('0xd')],_0xe92b('0x1a'))>moment()){throw new Error(_0xe92b('0x37'));}else{_0x4bf949[_0xe92b('0x18')]=![];_0x4bf949[_0xe92b('0x12')]=null;}}_0x4bf949[_0xe92b('0x38')]=_0x334a73;_0x4bf949[_0xe92b('0x39')]=Date[_0xe92b('0x3a')]()+0x36ee80;return _0x4bf949['save']();})['then'](function(){return sendServiceMail({'to':_0x14ce75[_0xe92b('0x35')]['email'],'subject':_0xe92b('0x3b'),'text':_0xe92b('0x3c')+_0xe92b('0x3d')+_0xe92b('0x3e')+_0x14ce75['headers'][_0xe92b('0x3f')]+_0xe92b('0x40')+_0x334a73+'\x0a\x0a'+_0xe92b('0x41')});})['then'](function(){_0x421e8f[_0xe92b('0x2e')](0xc8)[_0xe92b('0x2f')]({'message':_0xe92b('0x42')});})[_0xe92b('0x1c')](function(_0x267954){return handleError(_0x421e8f,0x1f4,_0x267954);});};exports['reset']=function(_0x5e9bb4,_0x201154){return db[_0xe92b('0x43')][_0xe92b('0x1f')]({'where':{'resetPasswordToken':_0x5e9bb4['params']['token'],'resetPasswordExpires':{'$gt':Date[_0xe92b('0x3a')]()}}})[_0xe92b('0xe')](function(_0x2567e6){if(!_0x2567e6){throw new Error('Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.');}return db[_0xe92b('0xa')]['findOne']({'attributes':['id',_0xe92b('0x44'),_0xe92b('0x45'),_0xe92b('0x46')]})[_0xe92b('0xe')](function(_0x53c71d){if(_0x53c71d[_0xe92b('0x44')])authService[_0xe92b('0x47')](_0x5e9bb4[_0xe92b('0x35')][_0xe92b('0x48')]);if(!_0x53c71d[_0xe92b('0x45')]||!_0x2567e6['previousPasswords'])return _0x2567e6;authService['validatePasswordHistory'](_0x5e9bb4[_0xe92b('0x35')]['password'],_0x2567e6[_0xe92b('0x49')],_0x53c71d[_0xe92b('0x46')]);return _0x2567e6;})[_0xe92b('0xe')](function(){_0x2567e6[_0xe92b('0x48')]=_0x5e9bb4['body'][_0xe92b('0x48')];_0x2567e6[_0xe92b('0x38')]=null;_0x2567e6[_0xe92b('0x39')]=null;return _0x2567e6['save']();});})[_0xe92b('0xe')](function(){_0x201154['status'](0xc8)[_0xe92b('0x2f')]({'message':_0xe92b('0x4a')});})[_0xe92b('0x1c')](function(_0x3bc8ac){return handleError(_0x201154,0x1f4,_0x3bc8ac);});};passport[_0xe92b('0x4b')](_0xe92b('0x4c'),new LocalStrategy({'usernameField':'name','passwordField':_0xe92b('0x48')},function(_0x333d64,_0x300d55,_0x3ac1bf){return localAuthenticate(db[_0xe92b('0x43')],_0x333d64,_0x300d55,_0x3ac1bf);}));