Built motion from commit 4c281f94.|2.6.31
[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 _0xb87c=['catch','email','MailServerOut','Smtp','CloudProvider','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','getSmtpOptions','merge','\x22%s\x22\x20<%s>','request','SendMail','error','format','SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!','message','status','login','Something\x20went\x20wrong,\x20please\x20try\x20again.','role','signToken','online','forgot','Email\x20parameter\x20is\x20missing','body','trim','toLowerCase','find','This\x20email\x20is\x20not\x20registered.','The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.','The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.','now','save','You\x20are\x20receiving\x20this\x20because\x20you\x20(or\x20someone\x20else)\x20have\x20requested\x20the\x20reset\x20of\x20the\x20password\x20for\x20your\x20account.\x0a\x0a','https://','headers','/reset/','If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a','send','User','token','Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.','passwordHistoryLimit','securePassword','validatePasswordPattern','password','enforcePasswordHistory','previousPasswords','validatePasswordHistory','resetPasswordToken','resetPasswordExpires','Password\x20reset!','util','passport','passport-local','Strategy','jayson/promise','randomstring','moment','../../config/utils','client','Setting','findOne','blockDuration','then','name','salt','disabled','loginAttempts','user','agent','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','authenticate','allowedLoginAttempts','blocked','add','minutes','clearBlockUser','blockedAt','getLicense'];(function(_0x51c9a9,_0x239840){var _0x2b8ea4=function(_0x353b73){while(--_0x353b73){_0x51c9a9['push'](_0x51c9a9['shift']());}};_0x2b8ea4(++_0x239840);}(_0xb87c,0x16f));var _0xcb87=function(_0xb07c50,_0x16dbf8){_0xb07c50=_0xb07c50-0x0;var _0x553e26=_0xb87c[_0xb07c50];return _0x553e26;};'use strict';var util=require(_0xcb87('0x0'));var passport=require(_0xcb87('0x1'));var LocalStrategy=require(_0xcb87('0x2'))[_0xcb87('0x3')];var jayson=require(_0xcb87('0x4'));var _=require('lodash');var rs=require(_0xcb87('0x5'));var moment=require(_0xcb87('0x6'));var db=require('../../mysqldb')['db'];var authService=require('../../components/auth/service');var utils=require(_0xcb87('0x7'));var client=jayson[_0xcb87('0x8')]['http']({'port':0x232b});function localAuthenticate(_0x45a81d,_0x49d9a6,_0x43b533,_0x59ede3){var _0x10df30,_0x5a006f;return db[_0xcb87('0x9')][_0xcb87('0xa')]({'where':{'id':0x1},'attributes':['allowedLoginAttempts',_0xcb87('0xb')],'raw':!![]})[_0xcb87('0xc')](function(_0x30c622){_0x10df30=_0x30c622;return _0x45a81d[_0xcb87('0xa')]({'attributes':['id',_0xcb87('0xd'),'password',_0xcb87('0xe'),'role',_0xcb87('0xf'),'blocked','blockedAt',_0xcb87('0x10')],'where':{'name':_0x49d9a6,'role':{'$or':['admin',_0xcb87('0x11'),_0xcb87('0x12')]}}});})[_0xcb87('0xc')](function(_0x3c1b7e){if(!_0x3c1b7e||_0x3c1b7e&&_0x3c1b7e[_0xcb87('0xd')]!==_0x49d9a6){throw new Error(_0xcb87('0x13'));}else{_0x5a006f=_0x3c1b7e;return _0x5a006f;}})[_0xcb87('0xc')](function(){_0x5a006f[_0xcb87('0x14')](_0x43b533,function(_0x5f0cf8,_0xb93d84){var _0x1fa6f1=_0x5a006f[_0xcb87('0x10')]+0x1;if(_0x5f0cf8){return _0x59ede3(_0x5f0cf8);}else if(!_0xb93d84){if(_0x5a006f[_0xcb87('0xf')]){return _0x59ede3(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else if(_0x10df30[_0xcb87('0x15')]>0x0){if(_0x5a006f[_0xcb87('0x16')]){if(_0x10df30[_0xcb87('0xb')]>0x0){if(moment(_0x5a006f['blockedAt'])[_0xcb87('0x17')](_0x10df30[_0xcb87('0xb')],_0xcb87('0x18'))>moment()){return _0x59ede3(null,![],{'message':_0xcb87('0x13')});}else{return utils['clearBlockUser'](_0x5a006f,_0x1fa6f1,![],null)['then'](function(){return _0x59ede3(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});});}}else{return _0x59ede3(null,![],{'message':_0xcb87('0x13')});}}else{if(_0x1fa6f1>=_0x10df30[_0xcb87('0x15')]){return utils[_0xcb87('0x19')](_0x5a006f,0x0,!![],moment())[_0xcb87('0xc')](function(){return _0x59ede3(null,![],{'message':_0xcb87('0x13')});});}else{return utils[_0xcb87('0x19')](_0x5a006f,_0x1fa6f1,![],null)[_0xcb87('0xc')](function(){return _0x59ede3(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});});}}}else{return _0x59ede3(null,![],{'message':_0xcb87('0x13')});}}else{if(_0x5a006f['disabled']){return _0x59ede3(null,![],{'message':_0xcb87('0x13')});}else if(_0x10df30[_0xcb87('0x15')]>0x0){if(_0x5a006f[_0xcb87('0x16')]){if(_0x10df30[_0xcb87('0xb')]>0x0){if(moment(_0x5a006f[_0xcb87('0x1a')])[_0xcb87('0x17')](_0x10df30[_0xcb87('0xb')],_0xcb87('0x18'))>moment()){return _0x59ede3(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else{return utils[_0xcb87('0x19')](_0x5a006f,0x0,![],null)[_0xcb87('0xc')](function(){return utils[_0xcb87('0x1b')](_0x5a006f);})['then'](function(){return _0x59ede3(null,_0x5a006f);});}}else{return _0x59ede3(null,![],{'message':_0xcb87('0x13')});}}else{return utils[_0xcb87('0x19')](_0x5a006f,0x0,![],null)['then'](function(){return utils[_0xcb87('0x1b')](_0x5a006f);})[_0xcb87('0xc')](function(){return _0x59ede3(null,_0x5a006f);})['catch'](function(_0x222b9a){return _0x59ede3(null,![],_0x222b9a);});}}else{if(_0x5a006f[_0xcb87('0x16')]){return _0x59ede3(null,![],{'message':_0xcb87('0x13')});}else{return utils[_0xcb87('0x1b')](_0x5a006f)[_0xcb87('0xc')](function(){return _0x59ede3(null,_0x5a006f);});}}}});})[_0xcb87('0x1c')](function(_0x4719d0){return _0x59ede3(null,![],_0x4719d0);});}function sendServiceMail(_0x114635){return db['MailAccount']['find']({'where':{'service':!![]},'attributes':['id',_0xcb87('0xd'),_0xcb87('0x1d')],'include':[{'model':db[_0xcb87('0x1e')],'as':_0xcb87('0x1f'),'include':[{'model':db[_0xcb87('0x20')],'as':_0xcb87('0x20')}]}]})[_0xcb87('0xc')](function(_0x404d7d){if(!_0x404d7d){throw new Error(_0xcb87('0x21'));}var _0x570a21=_0x404d7d[_0xcb87('0x22')]();var _0x5a0a4f={'account':_0x570a21,'message':_[_0xcb87('0x23')]({'from':util['format'](_0xcb87('0x24'),_0x404d7d[_0xcb87('0xd')],_0x404d7d['email']||_0x404d7d['Smtp'][_0xcb87('0x11')])},_0x114635)};return client[_0xcb87('0x25')](_0xcb87('0x26'),_0x5a0a4f);})['then'](function(_0xe405a3){if(_0xe405a3[_0xcb87('0x27')]){throw new Error(util[_0xcb87('0x28')](_0xcb87('0x29'),_0xe405a3['error'][_0xcb87('0x2a')]||JSON['stringify'](_0xe405a3['error'])));}return!![];});}function handleError(_0x3db9d9,_0x368e95,_0x2f1762){return _0x3db9d9[_0xcb87('0x2b')](_0x368e95||0x1f4)['send']({'message':_0x2f1762?_0x2f1762['message']||_0x2f1762:''});}exports[_0xcb87('0x2c')]=function(_0x4c6e4d,_0x421204,_0x38caa8){passport['authenticate']('local-login',function(_0x8786ac,_0x48c6c4,_0x137ebe){var _0x49bc4f=_0x8786ac||_0x137ebe;if(_0x49bc4f){return handleError(_0x421204,0x191,_0x49bc4f);}if(!_0x48c6c4){return handleError(_0x421204,0x194,{'message':_0xcb87('0x2d')});}else{var _0x3f3f3a={'payload':{'id':_0x48c6c4['id'],'role':_0x48c6c4[_0xcb87('0x2e')]},'options':{'expiresIn':0x15180}};return authService[_0xcb87('0x2f')](_0x3f3f3a)[_0xcb87('0xc')](function(_0x378cc4){_0x421204['json']({'id':_0x48c6c4['id'],'token':_0x378cc4,'statusCall':'','isAlreadyLogged':_0x48c6c4[_0xcb87('0x30')]});});}})(_0x4c6e4d,_0x421204,_0x38caa8);};exports[_0xcb87('0x31')]=function(_0x5c79a0,_0x17a165){if(!_0x5c79a0['body'][_0xcb87('0x1d')]){return handleError(_0x17a165,0x1f4,{'message':_0xcb87('0x32')});}var _0x1e49f1=rs['generate']();_0x5c79a0['body'][_0xcb87('0x1d')]=_0x5c79a0[_0xcb87('0x33')][_0xcb87('0x1d')][_0xcb87('0x34')]()[_0xcb87('0x35')]();var _0x146b38;return db[_0xcb87('0x9')]['findOne']({'where':{'id':0x1},'attributes':[_0xcb87('0x15'),'blockDuration'],'raw':!![]})[_0xcb87('0xc')](function(_0x1ddbbb){_0x146b38=_0x1ddbbb;return db['User'][_0xcb87('0x36')]({'where':{'email':_0x5c79a0[_0xcb87('0x33')][_0xcb87('0x1d')]}});})[_0xcb87('0xc')](function(_0x49f8d1){if(!_0x49f8d1){throw new Error(_0xcb87('0x37'));}if(_0x49f8d1[_0xcb87('0xf')]){throw new Error(_0xcb87('0x38'));}if(_0x49f8d1[_0xcb87('0x16')]){if(moment(_0x49f8d1[_0xcb87('0x1a')])[_0xcb87('0x17')](_0x146b38[_0xcb87('0xb')],_0xcb87('0x18'))>moment()){throw new Error(_0xcb87('0x39'));}else{_0x49f8d1['blocked']=![];_0x49f8d1[_0xcb87('0x1a')]=null;}}_0x49f8d1['resetPasswordToken']=_0x1e49f1;_0x49f8d1['resetPasswordExpires']=Date[_0xcb87('0x3a')]()+0x36ee80;return _0x49f8d1[_0xcb87('0x3b')]();})[_0xcb87('0xc')](function(){return sendServiceMail({'to':_0x5c79a0[_0xcb87('0x33')][_0xcb87('0x1d')],'subject':'xCally\x20Motion\x20Password\x20Reset','text':_0xcb87('0x3c')+'Please\x20click\x20on\x20the\x20following\x20link,\x20or\x20paste\x20this\x20into\x20your\x20browser\x20to\x20complete\x20the\x20process:\x0a\x0a'+_0xcb87('0x3d')+_0x5c79a0[_0xcb87('0x3e')]['host']+_0xcb87('0x3f')+_0x1e49f1+'\x0a\x0a'+_0xcb87('0x40')});})['then'](function(){_0x17a165[_0xcb87('0x2b')](0xc8)[_0xcb87('0x41')]({'message':'Reset\x20Email\x20sent!'});})[_0xcb87('0x1c')](function(_0x421aa2){return handleError(_0x17a165,0x1f4,_0x421aa2);});};exports['reset']=function(_0x34e114,_0x3df2e3){return db[_0xcb87('0x42')]['find']({'where':{'resetPasswordToken':_0x34e114['params'][_0xcb87('0x43')],'resetPasswordExpires':{'$gt':Date['now']()}}})[_0xcb87('0xc')](function(_0x929f34){if(!_0x929f34){throw new Error(_0xcb87('0x44'));}return db[_0xcb87('0x9')][_0xcb87('0xa')]({'attributes':['id','securePassword','enforcePasswordHistory',_0xcb87('0x45')]})['then'](function(_0x2cbbe5){if(_0x2cbbe5[_0xcb87('0x46')])authService[_0xcb87('0x47')](_0x34e114['body'][_0xcb87('0x48')]);if(!_0x2cbbe5[_0xcb87('0x49')]||!_0x929f34[_0xcb87('0x4a')])return _0x929f34;authService[_0xcb87('0x4b')](_0x34e114['body'][_0xcb87('0x48')],_0x929f34[_0xcb87('0x4a')],_0x2cbbe5['passwordHistoryLimit']);return _0x929f34;})[_0xcb87('0xc')](function(){_0x929f34[_0xcb87('0x48')]=_0x34e114[_0xcb87('0x33')][_0xcb87('0x48')];_0x929f34[_0xcb87('0x4c')]=null;_0x929f34[_0xcb87('0x4d')]=null;return _0x929f34[_0xcb87('0x3b')]();});})[_0xcb87('0xc')](function(){_0x3df2e3['status'](0xc8)['send']({'message':_0xcb87('0x4e')});})[_0xcb87('0x1c')](function(_0x43c91e){return handleError(_0x3df2e3,0x1f4,_0x43c91e);});};passport['use']('local-login',new LocalStrategy({'usernameField':_0xcb87('0xd'),'passwordField':_0xcb87('0x48')},function(_0x501f36,_0x3c4e4c,_0x1797f9){return localAuthenticate(db[_0xcb87('0x42')],_0x501f36,_0x3c4e4c,_0x1797f9);}));