Skip to content

Commit 065e3f4

Browse files
committed
Refactor value check and normalization of extended_session_lifetime config
option
1 parent bcf008f commit 065e3f4

3 files changed

Lines changed: 23 additions & 11 deletions

File tree

program/include/rcmail_output_html.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2349,14 +2349,12 @@ protected function login_form($attrib)
23492349
'buttons' => [],
23502350
];
23512351

2352-
$extended_session_lifetime_days = $this->config->get('extended_session_lifetime_days', 0);
2353-
if (is_int($extended_session_lifetime_days) && $extended_session_lifetime_days > 0) {
2352+
if ($this->config->extended_session_lifetime_days() > 0) {
23542353
$extended_session_lifetime_hidden_field = new html_hiddenfield(['name' => '_extended_session_lifetime', 'value' => '0']);
23552354
$form_content['hidden']['extended_session_lifetime'] = $extended_session_lifetime_hidden_field->show();
23562355

23572356
// Make sure the value is in the range 1..365.
2358-
$extended_session_lifetime_days = min(max(1, $extended_session_lifetime_days), 365);
2359-
$extended_session_lifetime_text = str_replace('#', $extended_session_lifetime_days, $this->app->gettext('extended_session_lifetime_switch_text'));
2357+
$extended_session_lifetime_text = str_replace('#', $this->config->extended_session_lifetime_days(), $this->app->gettext('extended_session_lifetime_switch_text'));
23602358
$extended_session_lifetime_checkbox = new html_checkbox(['name' => '_extended_session_lifetime', 'id' => '_extended_session_lifetime', 'title' => $extended_session_lifetime_text]);
23612359
$form_content['inputs']['extended_session_lifetime'] = [
23622360
'content' => html::label(['for' => '_extended_session_lifetime'], [$extended_session_lifetime_checkbox->show(), $extended_session_lifetime_text]),

program/lib/Roundcube/rcube_config.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class rcube_config
3434
private $userprefs = [];
3535
private $immutable = [];
3636
private $client_tz;
37+
private $extended_session_lifetime_days;
3738

3839
/**
3940
* Renamed options
@@ -926,4 +927,18 @@ public static function resolve_timezone_alias($tzname)
926927

927928
return $deprecated_timezones[$tzname] ?? $tzname;
928929
}
930+
931+
public function extended_session_lifetime_days(): int
932+
{
933+
if ($this->extended_session_lifetime_days === null) {
934+
$config_value = $this->get('extended_session_lifetime_days', 0);
935+
if (is_int($config_value) && $config_value > 0) {
936+
// Make sure the value is in the range 1..365.
937+
$this->extended_session_lifetime_days = min(max(1, $config_value), 365);
938+
} else {
939+
$this->extended_session_lifetime_days = 0;
940+
}
941+
}
942+
return $this->extended_session_lifetime_days;
943+
}
929944
}

program/lib/Roundcube/rcube_session.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -745,13 +745,12 @@ public function check_auth()
745745
public function set_auth_cookie(bool $extended_session_lifetime = false): void
746746
{
747747
if ($extended_session_lifetime === true) {
748-
$extended_session_lifetime_days = $this->config->get('extended_session_lifetime_days', 0);
749-
if (is_int($extended_session_lifetime_days) && $extended_session_lifetime_days > 0) {
750-
// Make sure the value is in the range 1..365.
751-
$days = min(max(1, $extended_session_lifetime_days), 365);
752-
$this->set_lifetime($days * 24 * 60 * 60);
753-
$_SESSION['extended_session_lifetime'] = $days * 24 * 60 * 60;
754-
$cookie_expiry = time() + $_SESSION['extended_session_lifetime'];
748+
749+
if ($this->config->extended_session_lifetime_days() > 0) {
750+
$lifetime_seconds = $this->config->extended_session_lifetime_days() * 24 * 60 * 60;
751+
$this->set_lifetime($lifetime_seconds);
752+
$_SESSION['extended_session_lifetime'] = $lifetime_seconds;
753+
$cookie_expiry = time() + $lifetime_seconds;
755754
// Set the sessid-cookie (again) to force/renew its expiration date.
756755
rcube_utils::setcookie(ini_get('session.name'), session_id(), $cookie_expiry);
757756
}

0 commit comments

Comments
 (0)