diff --git a/web/js/__init__.js b/web/js/__init__.js
index 0926352f8..a475c716c 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 17c0902d8..4a9627839 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 6a6200674..167fb1937 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 3e86a8c91..bbe42a133 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 = {
\
\
\
-
\
\
\
- \
+ \
~!:SHELL_OPTIONS~!\
\
\
@@ -474,6 +475,9 @@ App.Templates.html = {
\
\
\
+ \
+ login as\
+ \
\
name:\
~!:FULLNAME~!\
diff --git a/web/vesta/api/MAIN.class.php b/web/vesta/api/MAIN.class.php
index b75258177..d221d9b0a 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 416ae4877..dc7932167 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']);
}
-
}