From b13c07cca23c81171d5258b5a10bf06c348be1f4 Mon Sep 17 00:00:00 2001 From: Malishev Dmitry Date: Fri, 30 Dec 2011 15:48:20 +0300 Subject: [PATCH] Log in as user / Logout to real user. --- web/js/__init__.js | 6 +- web/js/actions.js | 28 ++++++++++ web/js/helpers.js | 7 +++ web/js/templates.js | 10 +++- web/vesta/api/MAIN.class.php | 3 +- web/vesta/api/WEB_DOMAIN.class.php | 89 +++++++++++++++++++++--------- 6 files changed, 111 insertions(+), 32 deletions(-) diff --git a/web/js/__init__.js b/web/js/__init__.js index 0926352f..a475c716 100644 --- a/web/js/__init__.js +++ b/web/js/__init__.js @@ -11,9 +11,9 @@ $('document').ready(function() { App.Utils.detectBrowser(); App.Ref.init(); - //App.Env.world = 'USER'; + App.Env.world = 'USER'; // Disabled cookie tab restoring. Enable if needed - if ('undefined' != typeof App.Tmp.loadTAB) { + /*if ('undefined' != typeof App.Tmp.loadTAB) { App.Env.world = App.Tmp.loadTAB; } @@ -25,7 +25,7 @@ $('document').ready(function() { else { App.Env.world = App.Constants.TABS[0]; } - } + }*/ App.Pages.init(); App.Core.listen(); diff --git a/web/js/actions.js b/web/js/actions.js index 17c0902d..4a962783 100644 --- a/web/js/actions.js +++ b/web/js/actions.js @@ -1,3 +1,18 @@ +App.Actions.login_as = function(evt) +{ + var elm = $(evt.target); + var ref = elm.parents('.row'); + var source = App.Helpers.evalJSON($(ref).find('.source').val()) + App.Ajax.request('USER.loginAs', {'user': source.LOGIN_NAME}, function(reply) { + if (reply.result) { + location.href = ""; + } + else { + App.Helpers.alert('You cannot do this action. Please contact support'); + } + }); +} + App.Actions.toggle_suspend = function(evt) { var elm = $(evt.target); @@ -156,6 +171,19 @@ App.Actions.change_password = function(evt) App.Actions.profile_exit = function(evt) { evt.preventDefault(); + if (App.Env.initialParams.real_user) { // exit "logged in as" state + App.Ajax.request('USER.logoutAs', {}, function(reply) { + if (reply.result) { + location.href = ""; + } + else { + App.Helpers.alert('You cannot do this action. Please contact support'); + } + }); + return; + } + + App.Ajax.request('MAIN.logoff', {}, function(reply) { location.href = ''; }); diff --git a/web/js/helpers.js b/web/js/helpers.js index 6a620067..167fb193 100644 --- a/web/js/helpers.js +++ b/web/js/helpers.js @@ -134,6 +134,13 @@ App.Helpers.updateInitial = function() }); $('#user-name').html(App.Env.initialParams.PROFILE.uid); $('#page').removeClass('hidden'); + + if (App.Env.initialParams.real_user) { + var tpl = App.Templates.get('logged_as', 'general'); + tpl.set(':YOU_ARE', App.Env.initialParams.real_user); + tpl.set(':USER', App.Env.initialParams.auth_user.uid.uid); + $('body').prepend(tpl.finalize()); + } } App.Helpers.beforeAjax = function(jedi_method) diff --git a/web/js/templates.js b/web/js/templates.js index 3e86a8c9..bbe42a13 100644 --- a/web/js/templates.js +++ b/web/js/templates.js @@ -16,7 +16,8 @@ App.Templates.html = { "Well," the farmer said, "I didn\'t have anymore rope, so I took off my belt and tied her tail to the rafter. In that moment, my pants fell down and my wife walked in ... Some things you just can\'t explain."'] }, general: { - over_bar: [''], + logged_as: ['
You (~!:YOU_ARE~!) are viewing ~!:USER~! interface. Exit it to return to your own.
'], + over_bar: [''], loading: ['
\
\
'], @@ -397,13 +398,13 @@ App.Templates.html = { \
\ \ - \ ~!:PACKAGE_OPTIONS~!\ \
\
\ \ - \ ~!:SHELL_OPTIONS~!\ \
\ @@ -474,6 +475,9 @@ App.Templates.html = { \ \
\ + \ \ name:\ ~!:FULLNAME~!\ diff --git a/web/vesta/api/MAIN.class.php b/web/vesta/api/MAIN.class.php index b7525817..d221d9b0 100644 --- a/web/vesta/api/MAIN.class.php +++ b/web/vesta/api/MAIN.class.php @@ -227,7 +227,8 @@ MAIL; 'DB' => $this->getDbParams($data_db), 'USERS' => $this->getUsersParams($data_user), 'totals' => $totals, - 'PROFILE' => $user + 'PROFILE' => $user, + 'real_user' => $_SESSION['real_user'] ? $_SESSION['real_user'] : NULL ); return $this->reply(true, $reply); diff --git a/web/vesta/api/WEB_DOMAIN.class.php b/web/vesta/api/WEB_DOMAIN.class.php index 416ae487..dc793216 100644 --- a/web/vesta/api/WEB_DOMAIN.class.php +++ b/web/vesta/api/WEB_DOMAIN.class.php @@ -158,7 +158,7 @@ class WEB_DOMAIN extends AjaxHandler } } - /* if ($_s['SSL']) { + /* if ($_s['SSL']) { $params = array( 'USER' => $user['uid'], 'DOMAIN' => $_s['DOMAIN'], @@ -178,7 +178,7 @@ class WEB_DOMAIN extends AjaxHandler } if ($_s['SSL_HOME']) { - }*/ + }*/ /*if (!empty($_s['DNS'])) { $params = array( @@ -194,7 +194,7 @@ class WEB_DOMAIN extends AjaxHandler $result = $dns->addExecute($params); if (!$result['status']) { $this->errors['DNS_DOMAIN'] = array($result['error_code'] => $result['error_message']); - } + } }*/ @@ -264,25 +264,42 @@ class WEB_DOMAIN extends AjaxHandler $_old['ELOG'] = $_old['ELOG'] == 'yes' ? 'on' : 'off'; $_old['CGI'] = $_old['CGI'] == 'yes' ? 'on' : 'off'; - $_old['AUTH'] = $_old['AUTH'] == 'yes' ? 'on' : 'off'; + $_old['AUTH'] = $_old['AUTH'] == 'yes' ? 'on' : 'off'; $_old['SSL'] = $_old['SSL'] == 'yes' ? 'on' : 'off'; $user = $this->getLoggedUser(); $_DOMAIN = $_new['DOMAIN']; - if ($_new['SUSPEND'] == 'on') { - $result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN)); - if (!$result['status']) { - $this->status = FALSE; - $this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']); + if ($_old['SUSPEND'] != $_new['SUSPEND']) { + if ($_new['SUSPEND'] == 'on') { + $result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN)); + if (!$result['status']) { + $this->status = FALSE; + $this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']); + } + // return $this->reply($result['status']); } - // return $this->reply($result['status']); - } - else { - $result = Vesta::execute(Vesta::V_UNSUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN)); - if (!$result['status']) { - $this->status = FALSE; - $this->errors['UNSUSPEND'] = array($result['error_code'] => $result['error_message']); + else { + $result = Vesta::execute(Vesta::V_UNSUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN)); + if (!$result['status']) { + $this->status = FALSE; + $this->errors['UNSUSPEND'] = array($result['error_code'] => $result['error_message']); + } + } + if ($_new['SUSPEND'] == 'on') { + $result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN)); + if (!$result['status']) { + $this->status = FALSE; + $this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']); + } + // return $this->reply($result['status']); + } + else { + $result = Vesta::execute(Vesta::V_UNSUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN)); + if (!$result['status']) { + $this->status = FALSE; + $this->errors['UNSUSPEND'] = array($result['error_code'] => $result['error_message']); + } } } @@ -422,7 +439,7 @@ class WEB_DOMAIN extends AjaxHandler } } - if ($_new['SSL']) { + /*if ($_new['SSL']) { $params = array( 'USER' => $user['uid'], 'DOMAIN' => $_new['DOMAIN'], @@ -439,16 +456,19 @@ class WEB_DOMAIN extends AjaxHandler if (!$result['status']) { $this->errors['SSL'] = array($result['error_code'] => $result['error_message']); } - } + }*/ - if ($_s['SSL_KEY']) { + if (!empty($_s['SSL_KEY'])) { + $ssl_file = tempnam(sys_get_temp_dir(), 'ssl'); + file_put_contents($ssl_file, $_s['SSL_KEY']); + $params = array( 'USER' => $user['uid'], 'DOMAIN' => $_s['DOMAIN'], - 'SSL_KEY' => $_s['SSL_KEY'] + 'SSL_KEY' => $ssl_file ); - if ($_s['SSL_HOME']) { + if (!empty($_s['SSL_HOME'])) { $params['SSL_HOME'] = $_s['SSL_HOME']; } @@ -460,6 +480,26 @@ class WEB_DOMAIN extends AjaxHandler } } + + if (!empty($_s['SSL_CERT'])) { + $sslcert_file = tempnam(sys_get_temp_dir(), 'ssl'); + file_put_contents($sslcert_file, $_s['SSL_CERT']); + + $params = array( + 'USER' => $user['uid'], + 'DOMAIN' => $_s['DOMAIN'], + 'SSL_CERT' => $sslcert_file + ); + + $result = 0; + $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_SSLCERT, $params); + + if (!$result['status']) { + $this->errors['SSL_CERT'] = array($result['error_code'] => $result['error_message']); + } + } + + return $this->reply($result['status'], $result['data']); } @@ -511,7 +551,7 @@ class WEB_DOMAIN extends AjaxHandler $_entities = $request->getParameter('entities'); foreach($_entities as $entity){ - $result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], $entity['DOMAIN'])); + $result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAIN, array('USER' => $user, $entity['DOMAIN'])); } return $this->reply($result['status'], $result['data']); @@ -523,7 +563,7 @@ class WEB_DOMAIN extends AjaxHandler $_entities = $request->getParameter('entities'); foreach($_entities as $entity){ - $result = Vesta::execute(Vesta::V_UNUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], $entity['DOMAIN'])); + $result = Vesta::execute(Vesta::V_UNUSPEND_WEB_DOMAIN, array('USER' => $user, $entity['DOMAIN'])); } return $this->reply($result['status'], $result['data']); @@ -535,10 +575,9 @@ class WEB_DOMAIN extends AjaxHandler $_entities = $request->getParameter('entities'); foreach($_entities as $entity){ - $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN, array('USER' => $user['uid'], $entity['DOMAIN'])); + $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN, array('USER' => $user, $entity['DOMAIN'])); } return $this->reply($result['status'], $result['data']); } - }