Built motion from commit 3a7e82ea.|2.6.29
[motion2.git] / server / api / authActiveDirectory / authActiveDirectory.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 _0x9472=['Error\x20authenticate\x20%s:\x20Wrong\x20credentials','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','adSsoEnabled','then','Error\x20authenticate\x20%s:\x20Active\x20Directory\x20not\x20enabled','findOne','name','password','role','blocked','blockedAt','user','agent','disabled','blockDuration','add','minutes','clearBlockUser','getLicense','catch','send','message','login','authenticate','ad-login','Something\x20went\x20wrong,\x20please\x20try\x20again.','json','online','use','User','passport','passport-local','Strategy','moment','../../components/auth/service','../../config/utils','../../config/environment','../../config/logger','activedirectory','undefined','baseDN','domain','Error\x20authenticate\x20%s:\x20%s','error'];(function(_0x39a677,_0x54b3cd){var _0x5571bf=function(_0x342f42){while(--_0x342f42){_0x39a677['push'](_0x39a677['shift']());}};_0x5571bf(++_0x54b3cd);}(_0x9472,0x1aa));var _0x2947=function(_0x240226,_0x1eab8e){_0x240226=_0x240226-0x0;var _0x5e64fd=_0x9472[_0x240226];return _0x5e64fd;};'use strict';var passport=require(_0x2947('0x0'));var LocalStrategy=require(_0x2947('0x1'))[_0x2947('0x2')];var moment=require(_0x2947('0x3'));var ActiveDirectory=require('activedirectory2');var BPromise=require('bluebird');var util=require('util');var db=require('../../mysqldb')['db'];var authService=require(_0x2947('0x4'));var utils=require(_0x2947('0x5'));var config=require(_0x2947('0x6'));var logger=require(_0x2947('0x7'))('api');function isActiveDirectoryConfigured(_0x21b99b){var _0x4f7469=![];if(typeof _0x21b99b[_0x2947('0x8')]!==_0x2947('0x9')){_0x4f7469=_0x21b99b[_0x2947('0x8')][_0x2947('0xa')]&&_0x21b99b[_0x2947('0x8')]['url']&&_0x21b99b['activedirectory'][_0x2947('0xb')];}return _0x4f7469;}function adAuthenticate(_0x1bcb35,_0x495092,_0x48dc7d){return new BPromise(function(_0x345d59,_0x1ba886){try{var _0x3a671a=new ActiveDirectory(_0x1bcb35);_0x3a671a['authenticate'](_0x495092,_0x48dc7d,function(_0x2d3537,_0x398bca){if(_0x2d3537){logger['error'](_0x2947('0xc'),_0x495092,util['inspect'](_0x2d3537,{'showHidden':![],'depth':null}));_0x1ba886('Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.');}else if(!_0x398bca){logger[_0x2947('0xd')](_0x2947('0xe'),_0x495092);_0x1ba886(_0x2947('0xf'));}else{_0x345d59(_0x398bca);}});}catch(_0x36296c){_0x1ba886(_0x36296c);}});}function ActiveDirectoryAuthenticate(_0x3ddb58,_0x34075e,_0x46d74e,_0x5e2428){var _0x2325c0,_0x5990cb;if(!isActiveDirectoryConfigured(config)){logger[_0x2947('0xd')]('Error\x20authenticate\x20%s:\x20Active\x20Directory\x20not\x20configured',_0x34075e);return _0x5e2428(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}return db['Setting']['findOne']({'where':{'id':0x1},'attributes':[_0x2947('0x10'),'blockDuration'],'raw':!![]})[_0x2947('0x11')](function(_0x3096b5){_0x2325c0=_0x3096b5;if(!_0x2325c0['adSsoEnabled']){logger[_0x2947('0xd')](_0x2947('0x12'),_0x34075e);throw new Error(_0x2947('0xf'));}return _0x3ddb58[_0x2947('0x13')]({'attributes':['id',_0x2947('0x14'),_0x2947('0x15'),'salt',_0x2947('0x16'),'disabled',_0x2947('0x17'),_0x2947('0x18'),'online'],'where':{'name':_0x34075e,'role':{'$or':['admin',_0x2947('0x19'),_0x2947('0x1a')]},'adSsoEnabled':!![]}});})[_0x2947('0x11')](function(_0x56a17e){if(!_0x56a17e||_0x56a17e&&_0x56a17e[_0x2947('0x14')]!==_0x34075e){throw new Error(_0x2947('0xf'));}_0x5990cb=_0x56a17e;var _0x1c0e1f=_0x5990cb['name']+'@'+config[_0x2947('0x8')][_0x2947('0xb')];return adAuthenticate(config['activedirectory'],_0x1c0e1f,_0x46d74e);})[_0x2947('0x11')](function(_0x1b483b){if(_0x5990cb[_0x2947('0x1b')]){throw new Error(_0x2947('0xf'));}if(_0x2325c0[_0x2947('0x1c')]>0x0){if(_0x5990cb['blocked']){if(moment(_0x5990cb[_0x2947('0x18')])[_0x2947('0x1d')](_0x2325c0['blockDuration'],_0x2947('0x1e'))>moment()){throw new Error('Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.');}return utils[_0x2947('0x1f')](_0x5990cb,0x0,![],null)[_0x2947('0x11')](function(){return utils[_0x2947('0x20')](_0x5990cb);})['then'](function(){return _0x5e2428(null,_0x5990cb);});}else{return utils[_0x2947('0x20')](_0x5990cb)['then'](function(){return _0x5e2428(null,_0x5990cb);});}}else{return utils[_0x2947('0x20')](_0x5990cb)[_0x2947('0x11')](function(){return _0x5e2428(null,_0x5990cb);});}})[_0x2947('0x21')](function(_0x8d616e){return _0x5e2428(null,![],_0x8d616e);});}function handleError(_0x38d48f,_0x393a7a,_0x453f3f){return _0x38d48f['status'](_0x393a7a||0x1f4)[_0x2947('0x22')]({'message':_0x453f3f?_0x453f3f[_0x2947('0x23')]||_0x453f3f:''});}exports[_0x2947('0x24')]=function(_0x11bbf2,_0x1d9b02,_0x3b0c9b){passport[_0x2947('0x25')](_0x2947('0x26'),function(_0x12a196,_0x4b6adc,_0x459c19){var _0x5b5f10=_0x12a196||_0x459c19;if(_0x5b5f10){return handleError(_0x1d9b02,0x191,_0x5b5f10);}if(!_0x4b6adc){return handleError(_0x1d9b02,0x194,{'message':_0x2947('0x27')});}else{var _0x4c59c1={'payload':{'id':_0x4b6adc['id'],'role':_0x4b6adc[_0x2947('0x16')]},'options':{'expiresIn':0x15180}};return authService['signToken'](_0x4c59c1)[_0x2947('0x11')](function(_0x21f0cb){_0x1d9b02[_0x2947('0x28')]({'id':_0x4b6adc['id'],'token':_0x21f0cb,'statusCall':'','isAlreadyLogged':_0x4b6adc[_0x2947('0x29')]});});}})(_0x11bbf2,_0x1d9b02,_0x3b0c9b);};passport[_0x2947('0x2a')](_0x2947('0x26'),new LocalStrategy({'usernameField':_0x2947('0x14'),'passwordField':_0x2947('0x15')},function(_0xa73c76,_0x54b52d,_0x46f073){return ActiveDirectoryAuthenticate(db[_0x2947('0x2b')],_0xa73c76,_0x54b52d,_0x46f073);}));