c0cd5b38f1b246e068b2934345c2c79a32e99566
[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 _0xf486=['allowedLoginAttempts','blockDuration','name','password','salt','role','disabled','blocked','blockedAt','loginAttempts','admin','then','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','clearBlockUser','add','minutes','getLicense','catch','find','email','MailServerOut','Smtp','CloudProvider','getSmtpOptions','format','\x22%s\x22\x20<%s>','user','SendMail','error','message','stringify','status','send','login','Something\x20went\x20wrong,\x20please\x20try\x20again.','signToken','json','forgot','body','Email\x20parameter\x20is\x20missing','generate','Setting','This\x20email\x20is\x20not\x20registered.','The\x20user\x20is\x20disabled.\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','host','/reset/','If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a','Reset\x20Email\x20sent!','reset','User','token','Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.','securePassword','passwordHistoryLimit','validatePasswordPattern','enforcePasswordHistory','validatePasswordHistory','previousPasswords','resetPasswordToken','save','use','local-login','util','passport-local','Strategy','jayson/promise','randomstring','../../mysqldb','../../components/auth/service','../../config/utils','client','findOne'];(function(_0x99ff61,_0x361951){var _0x3683d8=function(_0x4a55d9){while(--_0x4a55d9){_0x99ff61['push'](_0x99ff61['shift']());}};_0x3683d8(++_0x361951);}(_0xf486,0xda));var _0x6f48=function(_0x47959f,_0x1b4977){_0x47959f=_0x47959f-0x0;var _0x2ea8f7=_0xf486[_0x47959f];return _0x2ea8f7;};'use strict';var util=require(_0x6f48('0x0'));var passport=require('passport');var LocalStrategy=require(_0x6f48('0x1'))[_0x6f48('0x2')];var jayson=require(_0x6f48('0x3'));var _=require('lodash');var rs=require(_0x6f48('0x4'));var moment=require('moment');var db=require(_0x6f48('0x5'))['db'];var authService=require(_0x6f48('0x6'));var utils=require(_0x6f48('0x7'));var client=jayson[_0x6f48('0x8')]['http']({'port':0x232b});function localAuthenticate(_0x1e49b4,_0x25b409,_0x560262,_0x20e82f){var _0x3289fa,_0x3d38fd;return db['Setting'][_0x6f48('0x9')]({'where':{'id':0x1},'attributes':[_0x6f48('0xa'),_0x6f48('0xb')],'raw':!![]})['then'](function(_0x14c6d7){_0x3289fa=_0x14c6d7;return _0x1e49b4[_0x6f48('0x9')]({'attributes':['id',_0x6f48('0xc'),_0x6f48('0xd'),_0x6f48('0xe'),_0x6f48('0xf'),_0x6f48('0x10'),_0x6f48('0x11'),_0x6f48('0x12'),_0x6f48('0x13')],'where':{'name':_0x25b409,'role':{'$or':[_0x6f48('0x14'),'user','agent']}}});})[_0x6f48('0x15')](function(_0x591a8b){if(!_0x591a8b||_0x591a8b&&_0x591a8b[_0x6f48('0xc')]!==_0x25b409){throw new Error(_0x6f48('0x16'));}else{_0x3d38fd=_0x591a8b;return _0x3d38fd;}})[_0x6f48('0x15')](function(){_0x3d38fd['authenticate'](_0x560262,function(_0x1f0dea,_0x4443d5){var _0x45843d=_0x3d38fd[_0x6f48('0x13')]+0x1;if(_0x1f0dea){return _0x20e82f(_0x1f0dea);}else if(!_0x4443d5){if(_0x3d38fd[_0x6f48('0x10')]){return _0x20e82f(null,![],{'message':_0x6f48('0x16')});}else if(_0x3289fa[_0x6f48('0xa')]>0x0){if(_0x3d38fd['blocked']){if(_0x3289fa['blockDuration']>0x0){if(moment(_0x3d38fd[_0x6f48('0x12')])['add'](_0x3289fa[_0x6f48('0xb')],'minutes')>moment()){return _0x20e82f(null,![],{'message':_0x6f48('0x16')});}else{return utils['clearBlockUser'](_0x3d38fd,_0x45843d,![],null)[_0x6f48('0x15')](function(){return _0x20e82f(null,![],{'message':_0x6f48('0x16')});});}}else{return _0x20e82f(null,![],{'message':_0x6f48('0x16')});}}else{if(_0x45843d>=_0x3289fa[_0x6f48('0xa')]){return utils[_0x6f48('0x17')](_0x3d38fd,0x0,!![],moment())[_0x6f48('0x15')](function(){return _0x20e82f(null,![],{'message':_0x6f48('0x16')});});}else{return utils[_0x6f48('0x17')](_0x3d38fd,_0x45843d,![],null)[_0x6f48('0x15')](function(){return _0x20e82f(null,![],{'message':_0x6f48('0x16')});});}}}else{return _0x20e82f(null,![],{'message':_0x6f48('0x16')});}}else{if(_0x3d38fd[_0x6f48('0x10')]){return _0x20e82f(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else if(_0x3289fa['allowedLoginAttempts']>0x0){if(_0x3d38fd['blocked']){if(_0x3289fa[_0x6f48('0xb')]>0x0){if(moment(_0x3d38fd[_0x6f48('0x12')])[_0x6f48('0x18')](_0x3289fa[_0x6f48('0xb')],_0x6f48('0x19'))>moment()){return _0x20e82f(null,![],{'message':_0x6f48('0x16')});}else{return utils['clearBlockUser'](_0x3d38fd,0x0,![],null)['then'](function(){return utils['getLicense'](_0x3d38fd);})[_0x6f48('0x15')](function(){return _0x20e82f(null,_0x3d38fd);});}}else{return _0x20e82f(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}}else{return utils['clearBlockUser'](_0x3d38fd,0x0,![],null)[_0x6f48('0x15')](function(){return utils[_0x6f48('0x1a')](_0x3d38fd);})[_0x6f48('0x15')](function(){return _0x20e82f(null,_0x3d38fd);})[_0x6f48('0x1b')](function(_0x5cc5ca){return _0x20e82f(null,![],_0x5cc5ca);});}}else{if(_0x3d38fd[_0x6f48('0x11')]){return _0x20e82f(null,![],{'message':_0x6f48('0x16')});}else{return utils[_0x6f48('0x1a')](_0x3d38fd)['then'](function(){return _0x20e82f(null,_0x3d38fd);});}}}});})[_0x6f48('0x1b')](function(_0x2e6347){return _0x20e82f(null,![],_0x2e6347);});}function sendServiceMail(_0x3d3e56){return db['MailAccount'][_0x6f48('0x1c')]({'where':{'service':!![]},'attributes':['id',_0x6f48('0xc'),_0x6f48('0x1d')],'include':[{'model':db[_0x6f48('0x1e')],'as':_0x6f48('0x1f'),'include':[{'model':db[_0x6f48('0x20')],'as':'CloudProvider'}]}]})[_0x6f48('0x15')](function(_0x5bfc6b){if(!_0x5bfc6b){throw new Error('Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!');}var _0x947ad2=_0x5bfc6b[_0x6f48('0x21')]();var _0x18b7c3={'account':_0x947ad2,'message':_['merge']({'from':util[_0x6f48('0x22')](_0x6f48('0x23'),_0x5bfc6b[_0x6f48('0xc')],_0x5bfc6b[_0x6f48('0x1d')]||_0x5bfc6b['Smtp'][_0x6f48('0x24')])},_0x3d3e56)};return client['request'](_0x6f48('0x25'),_0x18b7c3);})['then'](function(_0xf998d4){if(_0xf998d4[_0x6f48('0x26')]){throw new Error(util[_0x6f48('0x22')]('SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!',_0xf998d4[_0x6f48('0x26')][_0x6f48('0x27')]||JSON[_0x6f48('0x28')](_0xf998d4[_0x6f48('0x26')])));}return!![];});}function handleError(_0x31c793,_0x1a2055,_0x10dcd4){return _0x31c793[_0x6f48('0x29')](_0x1a2055||0x1f4)[_0x6f48('0x2a')]({'message':_0x10dcd4?_0x10dcd4[_0x6f48('0x27')]||_0x10dcd4:''});}exports[_0x6f48('0x2b')]=function(_0x480175,_0x586745,_0x5cd925){passport['authenticate']('local-login',function(_0x2574dc,_0x4cd0ef,_0x470bf5){var _0x444afa=_0x2574dc||_0x470bf5;if(_0x444afa){return handleError(_0x586745,0x191,_0x444afa);}if(!_0x4cd0ef){return handleError(_0x586745,0x194,{'message':_0x6f48('0x2c')});}else{var _0x997b53={'payload':{'id':_0x4cd0ef['id'],'role':_0x4cd0ef[_0x6f48('0xf')]},'options':{'expiresIn':0x15180}};return authService[_0x6f48('0x2d')](_0x997b53)['then'](function(_0x1b45a2){_0x586745[_0x6f48('0x2e')]({'id':_0x4cd0ef['id'],'token':_0x1b45a2,'statusCall':'','isAlreadyLogged':_0x4cd0ef['online']});});}})(_0x480175,_0x586745,_0x5cd925);};exports[_0x6f48('0x2f')]=function(_0x34f1f8,_0x384230){if(!_0x34f1f8[_0x6f48('0x30')][_0x6f48('0x1d')]){return handleError(_0x384230,0x1f4,{'message':_0x6f48('0x31')});}var _0x3ee892=rs[_0x6f48('0x32')]();_0x34f1f8[_0x6f48('0x30')][_0x6f48('0x1d')]=_0x34f1f8[_0x6f48('0x30')][_0x6f48('0x1d')]['trim']()['toLowerCase']();var _0x44169d;return db[_0x6f48('0x33')][_0x6f48('0x9')]({'where':{'id':0x1},'attributes':[_0x6f48('0xa'),_0x6f48('0xb')],'raw':!![]})[_0x6f48('0x15')](function(_0x4172d7){_0x44169d=_0x4172d7;return db['User'][_0x6f48('0x1c')]({'where':{'email':_0x34f1f8[_0x6f48('0x30')][_0x6f48('0x1d')]}});})[_0x6f48('0x15')](function(_0xed0c4f){if(!_0xed0c4f){throw new Error(_0x6f48('0x34'));}if(_0xed0c4f[_0x6f48('0x10')]){throw new Error(_0x6f48('0x35'));}if(_0xed0c4f['blocked']){if(moment(_0xed0c4f[_0x6f48('0x12')])['add'](_0x44169d[_0x6f48('0xb')],'minutes')>moment()){throw new Error('The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.');}else{_0xed0c4f[_0x6f48('0x11')]=![];_0xed0c4f[_0x6f48('0x12')]=null;}}_0xed0c4f['resetPasswordToken']=_0x3ee892;_0xed0c4f[_0x6f48('0x36')]=Date[_0x6f48('0x37')]()+0x36ee80;return _0xed0c4f['save']();})['then'](function(){return sendServiceMail({'to':_0x34f1f8['body'][_0x6f48('0x1d')],'subject':_0x6f48('0x38'),'text':_0x6f48('0x39')+'Please\x20click\x20on\x20the\x20following\x20link,\x20or\x20paste\x20this\x20into\x20your\x20browser\x20to\x20complete\x20the\x20process:\x0a\x0a'+'https://'+_0x34f1f8['headers'][_0x6f48('0x3a')]+_0x6f48('0x3b')+_0x3ee892+'\x0a\x0a'+_0x6f48('0x3c')});})['then'](function(){_0x384230[_0x6f48('0x29')](0xc8)['send']({'message':_0x6f48('0x3d')});})[_0x6f48('0x1b')](function(_0x32a814){return handleError(_0x384230,0x1f4,_0x32a814);});};exports[_0x6f48('0x3e')]=function(_0x2dc2aa,_0x5934b8){return db[_0x6f48('0x3f')][_0x6f48('0x1c')]({'where':{'resetPasswordToken':_0x2dc2aa['params'][_0x6f48('0x40')],'resetPasswordExpires':{'$gt':Date[_0x6f48('0x37')]()}}})[_0x6f48('0x15')](function(_0x5d521e){if(!_0x5d521e){throw new Error(_0x6f48('0x41'));}return db[_0x6f48('0x33')]['findOne']({'attributes':['id',_0x6f48('0x42'),'enforcePasswordHistory',_0x6f48('0x43')]})[_0x6f48('0x15')](function(_0x5be000){if(_0x5be000[_0x6f48('0x42')])authService[_0x6f48('0x44')](_0x2dc2aa['body'][_0x6f48('0xd')]);if(!_0x5be000[_0x6f48('0x45')]||!_0x5d521e['previousPasswords'])return _0x5d521e;authService[_0x6f48('0x46')](_0x2dc2aa[_0x6f48('0x30')][_0x6f48('0xd')],_0x5d521e[_0x6f48('0x47')],_0x5be000[_0x6f48('0x43')]);return _0x5d521e;})['then'](function(){_0x5d521e['password']=_0x2dc2aa[_0x6f48('0x30')]['password'];_0x5d521e[_0x6f48('0x48')]=null;_0x5d521e[_0x6f48('0x36')]=null;return _0x5d521e[_0x6f48('0x49')]();});})[_0x6f48('0x15')](function(){_0x5934b8[_0x6f48('0x29')](0xc8)[_0x6f48('0x2a')]({'message':'Password\x20reset!'});})[_0x6f48('0x1b')](function(_0x400409){return handleError(_0x5934b8,0x1f4,_0x400409);});};passport[_0x6f48('0x4a')](_0x6f48('0x4b'),new LocalStrategy({'usernameField':_0x6f48('0xc'),'passwordField':'password'},function(_0x36479a,_0x4f64bf,_0x2fe42e){return localAuthenticate(db['User'],_0x36479a,_0x4f64bf,_0x2fe42e);}));