Skip to content

Commit d04604a

Browse files
author
Till Brehm
committed
Merge branch 'stable-3.0.5' of git.ispconfig.org:ispconfig/ispconfig3 into stable-3.0.5
2 parents 6a8a67f + f386c61 commit d04604a

File tree

12 files changed

+66
-9
lines changed

12 files changed

+66
-9
lines changed

install/sql/ispconfig3.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,6 +1583,7 @@ CREATE TABLE `sys_session` (
15831583
`session_id` varchar(64) NOT NULL DEFAULT '',
15841584
`date_created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
15851585
`last_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
1586+
`permanent` enum('n','y') NOT NULL DEFAULT 'n',
15861587
`session_data` longtext,
15871588
PRIMARY KEY (`session_id`),
15881589
KEY `last_updated` (`last_updated`)

install/tpl/system.ini.master

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,4 @@ customer_no_template=C[CUSTOMER_NO]
5050
customer_no_start=1
5151
customer_no_counter=0
5252
session_timeout=0
53+
session_allow_endless=0

interface/lib/app.inc.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,25 @@ public function __construct() {
6868
$this->uses('session');
6969
$tmp = $this->db->queryOneRecord("SELECT `value` FROM sys_config WHERE `config_id` = 2 AND `group` = 'interface' AND `name` = 'session_timeout'");
7070
if($tmp && $tmp['value'] > 0) {
71-
$this->session->set_timeout($tmp['value']);
72-
session_set_cookie_params(($tmp['value'] * 60) + 300); // make the cookie live 5 minutes longer
71+
/* check if user wants to stay logged in */
72+
if(isset($_POST['s_mod']) && isset($_POST['s_pg']) && $_POST['s_mod'] == 'login' && $_POST['s_pg'] == 'index' && isset($_POST['stay']) && $_POST['stay'] == '1') {
73+
/* check if staying logged in is allowed */
74+
$app->uses('ini_parser');
75+
$tmp = $app->db->queryOneRecord('SELECT config FROM sys_ini WHERE sysini_id = 1');
76+
$tmp = $app->ini_parser->parse_ini_string(stripslashes($tmp['config']));
77+
if(!isset($tmp['misc']['session_allow_endless']) || $tmp['misc']['session_allow_endless'] != 'y') {
78+
$this->session->set_timeout($tmp['value']);
79+
session_set_cookie_params(($tmp['value'] * 60) + 300); // make the cookie live 5 minutes longer
80+
} else {
81+
// we are doing login here, so we need to set the session data
82+
$this->session->set_permanent(true);
83+
$this->session->set_timeout(365 * 24 * 3600); // one year
84+
session_set_cookie_params(365 * 24 * 3600); // make the cookie live 5 minutes longer
85+
}
86+
} else {
87+
$this->session->set_timeout($tmp['value']);
88+
session_set_cookie_params(($tmp['value'] * 60) + 300); // make the cookie live 5 minutes longer
89+
}
7390
} else {
7491
session_set_cookie_params(0); // until browser is closed
7592
}

interface/lib/classes/session.inc.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class session {
3333
private $session_array = array();
3434
private $db;
3535
private $timeout = 0;
36+
private $permanent = false;
3637

3738
function __construct($session_timeout = 0) {
3839
$this->db = new db;
@@ -44,6 +45,10 @@ function set_timeout($session_timeout = 0) {
4445
$this->timeout = $session_timeout;
4546
return $old_timeout;
4647
}
48+
49+
function set_permanent($value = false) {
50+
$this->permanent = $value;
51+
}
4752

4853
function open ($save_path, $session_name) {
4954
return true;
@@ -61,7 +66,7 @@ function close () {
6166
function read ($session_id) {
6267

6368
if($this->timeout > 0) {
64-
$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = '".$this->db->quote($session_id)."' AND last_updated >= DATE_SUB(NOW(), INTERVAL " . intval($this->timeout) . " MINUTE)");
69+
$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = '".$this->db->quote($session_id)."' AND (`permanent` = 'y' OR last_updated >= DATE_SUB(NOW(), INTERVAL " . intval($this->timeout) . " MINUTE))");
6570
} else {
6671
$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = '".$this->db->quote($session_id)."'");
6772
}
@@ -94,14 +99,14 @@ function write ($session_id, $session_data) {
9499
$date_created = date('Y-m-d H:i:s');
95100
$last_updated = date('Y-m-d H:i:s');
96101
$session_data = $this->db->quote($session_data);
97-
$sql = "INSERT INTO sys_session (session_id,date_created,last_updated,session_data) VALUES ('$session_id','$date_created','$last_updated','$session_data')";
102+
$sql = "INSERT INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES ('$session_id','$date_created','$last_updated','$session_data','" . ($this->permanent ? 'y' : 'n') . "')";
98103
$this->db->query($sql);
99104

100105
} else {
101106
$session_id = $this->db->quote($session_id);
102107
$last_updated = date('Y-m-d H:i:s');
103108
$session_data = $this->db->quote($session_data);
104-
$sql = "UPDATE sys_session SET last_updated = '$last_updated', session_data = '$session_data' WHERE session_id = '$session_id'";
109+
$sql = "UPDATE sys_session SET last_updated = '$last_updated', session_data = '$session_data'" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = '$session_id'";
105110
$this->db->query($sql);
106111

107112
}
@@ -127,6 +132,13 @@ function gc ($max_lifetime) {
127132
$dt1 = strtotime("$real_now -$max_lifetime seconds");
128133
$dt2 = date('Y-m-d H:i:s', $dt1);
129134

135+
$sql = "DELETE FROM sys_session WHERE last_updated < '$dt2' AND `permanent` != 'y'";
136+
$this->db->query($sql);
137+
138+
/* delete very old even if they are permanent */
139+
$dt1 = strtotime("$real_now -365 days");
140+
$dt2 = date('Y-m-d H:i:s', $dt1);
141+
130142
$sql = "DELETE FROM sys_session WHERE last_updated < '$dt2'";
131143
$this->db->query($sql);
132144
//}

interface/web/admin/form/system_config.tform.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,12 @@
481481
'width' => '30',
482482
'maxlength' => '255'
483483
),
484+
'session_allow_endless' => array (
485+
'datatype' => 'VARCHAR',
486+
'formtype' => 'CHECKBOX',
487+
'default' => 'n',
488+
'value' => array(0 => 'n', 1 => 'y')
489+
),
484490
//#################################
485491
// ENDE Datatable fields
486492
//#################################

interface/web/admin/lib/lang/de_system_config.lng

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,5 @@ $wb['customer_no_template_error_regex_txt'] = 'Die Kundennummer-Vorlage enthält
6464
$wb['customer_no_start_txt'] = 'Kundennummer Startwert';
6565
$wb['customer_no_counter_txt'] = 'Kundennummer Zähler';
6666
$wb['session_timeout_txt'] = 'Session-Timeout (Minuten)';
67+
$wb['session_allow_endless_txt'] = '"Eingeloggt bleiben" aktivieren';
6768
?>

interface/web/admin/lib/lang/en_system_config.lng

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,5 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
6464
$wb['customer_no_start_txt'] = 'Customer No. start value';
6565
$wb['customer_no_counter_txt'] = 'Customer No. counter';
6666
$wb['session_timeout_txt'] = 'Session timeout (minutes)';
67+
$wb['session_allow_endless_txt'] = 'Enable "stay logged in"';
6768
?>

interface/web/admin/templates/system_config_misc_edit.htm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ <h2><tmpl_var name="list_head_txt"></h2>
8484
<div class="ctrlHolder">
8585
<label for="session_timeout">{tmpl_var name='session_timeout_txt'}</label>
8686
<input name="session_timeout" id="session_timeout" value="{tmpl_var name='session_timeout'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
87+
</div>
88+
<div class="ctrlHolder">
89+
<p class="label">{tmpl_var name='session_allow_endless_txt'}</p>
90+
<div class="multiField">
91+
{tmpl_var name='session_allow_endless'}
92+
</div>
8793
</div>
8894
<div class="ctrlHolder">
8995
<p class="label">{tmpl_var name='maintenance_mode_txt'}</p>

interface/web/login/index.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public function render() {
122122
else {
123123
die("You don't have the right to 'login as'!");
124124
}
125-
} elseif($_SESSION['s']['user']['typ'] != 'admin') {
125+
} elseif($_SESSION['s']['user']['typ'] != 'admin' && (!isset($_SESSION['s_old']['user']) || $_SESSION['s_old']['user']['typ'] != 'admin')) {
126126
/* a reseller wants to 'login as', we need to check if he is allowed to */
127127
$res_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
128128
$res_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $res_client_group_id");
@@ -230,7 +230,6 @@ public function render() {
230230
$_SESSION['s']['user']['theme'] = isset($user['app_theme']) ? $user['app_theme'] : 'default';
231231
$_SESSION['s']['language'] = $user['language'];
232232
$_SESSION["s"]['theme'] = $_SESSION['s']['user']['theme'];
233-
$_SESSION['s']['session_timeout'] = $server_config_array['session_timeout'];
234233

235234
if(is_file($_SESSION['s']['user']['startmodule'].'/lib/module.conf.php')) {
236235
include_once $_SESSION['s']['user']['startmodule'].'/lib/module.conf.php';
@@ -318,12 +317,15 @@ public function render() {
318317
if($error != ''){
319318
$error = '<div class="box box_error"><h1>Error</h1>'.$error.'</div>';
320319
}
321-
320+
322321
$app->tpl->setVar('error', $error);
323322
$app->tpl->setVar('pw_lost_txt', $app->lng('pw_lost_txt'));
324323
$app->tpl->setVar('username_txt', $app->lng('username_txt'));
325324
$app->tpl->setVar('password_txt', $app->lng('password_txt'));
325+
$app->tpl->setVar('stay_logged_in_txt', $app->lng('stay_logged_in_txt'));
326326
$app->tpl->setVar('login_button_txt', $app->lng('login_button_txt'));
327+
$app->tpl->setVar('session_timeout', $server_config_array['session_timeout']);
328+
$app->tpl->setVar('session_allow_endless', $server_config_array['session_allow_endless']);
327329
$app->tpl->setInclude('content_tpl', 'login/templates/index.htm');
328330
$app->tpl_defaults();
329331

interface/web/login/lib/lang/de.lng

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ $wb['email_txt'] = 'E-Mail';
2222
$wb['error_maintenance_mode'] = 'Diese ISPConfig Installation wird gerade gewartet. Wir sind in Kürze wieder für Sie da. Vielen Dank für Ihre Geduld.';
2323
$wb['theme_not_compatible'] = 'Das gewählte Design ist mit dieser ISPConfig Version nicht kompatibel. Bitte prüfen Sie, ob ein Update des Themes verfügbar ist.<br />Es wurde nun automatisch das Standard Design aktiviert.';
2424
$wb['back_txt'] = 'Zur&uuml;ck';
25+
$wb['stay_logged_in_txt'] = 'Dauerhaft eingeloggt bleiben';
2526
?>

0 commit comments

Comments
 (0)