Skip to content

Commit 1431fc4

Browse files
committed
Add the "remember me" option to the default login form.
1 parent b5ff6f0 commit 1431fc4

4 files changed

Lines changed: 93 additions & 34 deletions

File tree

dictionaries/login.definition.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,8 @@
5858
},
5959
"remember_username": {
6060
"en": "Remember my username"
61-
}
61+
},
62+
"remember_me": {
63+
"en": "Remember me"
64+
}
6265
}

modules/core/lib/Auth/UserPassBase.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,23 @@ abstract class sspmod_core_Auth_UserPassBase extends SimpleSAML_Auth_Source {
5555
*/
5656
protected $rememberUsernameChecked = FALSE;
5757

58+
/**
59+
* Storage for general config option session.rememberme.enable.
60+
* loginuserpass.php page/template uses this option to present
61+
* users with a checkbox to keep their session alive across
62+
* different browser sessions (that is, closing and opening the
63+
* browser again).
64+
* @var bool
65+
*/
66+
protected $rememberMeEnabled = FALSE;
67+
68+
/**
69+
* Storage for general config option session.rememberme.checked.
70+
* loginuserpass.php page/template uses this option to default
71+
* the "remember me" checkbox to checked or not.
72+
* @var bool
73+
*/
74+
protected $rememberMeChecked = FALSE;
5875

5976
/**
6077
* Constructor for this authentication source.
@@ -85,6 +102,11 @@ public function __construct($info, &$config) {
85102
$this->rememberUsernameChecked = (bool) $config['remember.username.checked'];
86103
unset($config['remember.username.checked']);
87104
}
105+
106+
// get the "remember me" config options
107+
$sspcnf = SimpleSAML_Configuration::getInstance();
108+
$this->rememberMeEnabled = $sspcnf->getBoolean('session.rememberme.enable', FALSE);
109+
$this->rememberMeChecked = $sspcnf->getBoolean('session.rememberme.checked', FALSE);
88110
}
89111

90112

@@ -121,6 +143,21 @@ public function getRememberUsernameChecked() {
121143
return $this->rememberUsernameChecked;
122144
}
123145

146+
/**
147+
* Check if the "remember me" feature is enabled.
148+
* @return bool TRUE if enabled, FALSE otherwise.
149+
*/
150+
public function isRememberMeEnabled() {
151+
return $this->rememberMeEnabled;
152+
}
153+
154+
/**
155+
* Check if the "remember me" checkbox should be checked.
156+
* @return bool TRUE if enabled, FALSE otherwise.
157+
*/
158+
public function isRememberMeChecked() {
159+
return $this->rememberMeChecked;
160+
}
124161

125162
/**
126163
* Initialize login.

modules/core/templates/loginuserpass.php

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -40,44 +40,52 @@
4040
}
4141
?>
4242
</td>
43-
<?php
44-
if ($this->data['rememberUsernameEnabled']) {
45-
$rowspan = 1;
46-
} elseif (array_key_exists('organizations', $this->data)) {
47-
$rowspan = 3;
48-
} else {
49-
$rowspan = 2;
50-
}
51-
?>
52-
<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
53-
<?php
54-
if ($this->data['rememberUsernameEnabled']) {
55-
echo str_repeat("\t", 4);
56-
echo '<input type="checkbox" id="remember_username" tabindex="4" name="remember_username" value="Yes" ';
57-
echo ($this->data['rememberUsernameChecked'] ? 'checked="Yes" /> ' : '/> ');
58-
echo $this->t('{login:remember_username}');
59-
} else {
60-
$text = $this->t('{login:login_button}');
61-
echo str_repeat("\t", 4);
62-
echo "<input type=\"submit\" tabindex=\"4\" id=\"regularsubmit\" value=\"{$text}\" />";
63-
}
64-
?>
43+
<?php
44+
if ($this->data['rememberUsernameEnabled'] || $this->data['rememberMeEnabled']) {
45+
$rowspan = 1;
46+
} elseif (array_key_exists('organizations', $this->data)) {
47+
$rowspan = 3;
48+
} else {
49+
$rowspan = 2;
50+
}
51+
?>
52+
<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
53+
<?php
54+
if ($this->data['rememberUsernameEnabled'] || $this->data['rememberMeEnabled']) {
55+
if ($this->data['rememberUsernameEnabled']) {
56+
echo str_repeat("\t", 4);
57+
echo '<input type="checkbox" id="remember_username" tabindex="4" name="remember_username" value="Yes" ';
58+
echo ($this->data['rememberUsernameChecked'] ? 'checked="Yes" /> ' : '/> ');
59+
echo $this->t('{login:remember_username}');
60+
}
61+
if ($this->data['rememberMeEnabled']) {
62+
echo str_repeat("\t", 4);
63+
echo '<input type="checkbox" id="remember_me" tabindex="4" name="remember_me" value="Yes" ';
64+
echo $this->data['rememberMeChecked'] ? 'checked="Yes" /> ' : '/> ';
65+
echo $this->t('{login:remember_me}');
66+
}
67+
} else {
68+
$text = $this->t('{login:login_button}');
69+
echo str_repeat("\t", 4);
70+
echo "<input type=\"submit\" tabindex=\"4\" id=\"regularsubmit\" value=\"{$text}\" />";
71+
}
72+
?>
6573
</td>
6674
</tr>
6775
<tr>
6876
<td style="padding: .3em;"><?php echo $this->t('{login:password}'); ?></td>
6977
<td><input id="password" type="password" tabindex="2" name="password" /></td>
70-
<?php
71-
// Move submit button to next row if remember checkbox enabled
72-
if ($this->data['rememberUsernameEnabled']) {
73-
$rowspan = (array_key_exists('organizations', $this->data) ? 2 : 1);
74-
?>
75-
<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
76-
<input type="submit" tabindex="5" id="regularsubmit" value="<?php echo $this->t('{login:login_button}'); ?>" />
77-
</td>
78-
<?php
79-
}
80-
?>
78+
<?php
79+
// Move submit button to next row if remember checkbox enabled
80+
if ($this->data['rememberUsernameEnabled'] || $this->data['rememberMeEnabled']) {
81+
$rowspan = (array_key_exists('organizations', $this->data) ? 2 : 1);
82+
?>
83+
<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
84+
<input type="submit" tabindex="5" id="regularsubmit" value="<?php echo $this->t('{login:login_button}'); ?>" />
85+
</td>
86+
<?php
87+
}
88+
?>
8189
</tr>
8290

8391
<?php

modules/core/www/loginuserpass.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@
6565
SimpleSAML_Utilities::setCookie($source->getAuthId() . '-username', $username, $params, FALSE);
6666
}
6767

68+
if ($source->isRememberMeEnabled()) {
69+
if (array_key_exists('remember_me', $_REQUEST) && $_REQUEST['remember_me'] === 'Yes') {
70+
$state['RememberMe'] = TRUE;
71+
$authStateId = SimpleSAML_Auth_State::saveState($state, sspmod_core_Auth_UserPassBase::STAGEID);
72+
}
73+
}
74+
6875
try {
6976
sspmod_core_Auth_UserPassBase::handleLogin($authStateId, $username, $password);
7077
} catch (SimpleSAML_Error_Error $e) {
@@ -82,11 +89,15 @@
8289
$t->data['forceUsername'] = TRUE;
8390
$t->data['rememberUsernameEnabled'] = FALSE;
8491
$t->data['rememberUsernameChecked'] = FALSE;
92+
$t->data['rememberMeEnabled'] = $source->isRememberMeEnabled();
93+
$t->data['rememberMeChecked'] = $source->isRememberMeChecked();
8594
} else {
8695
$t->data['username'] = $username;
8796
$t->data['forceUsername'] = FALSE;
8897
$t->data['rememberUsernameEnabled'] = $source->getRememberUsernameEnabled();
8998
$t->data['rememberUsernameChecked'] = $source->getRememberUsernameChecked();
99+
$t->data['rememberMeEnabled'] = $source->isRememberMeEnabled();
100+
$t->data['rememberMeChecked'] = $source->isRememberMeChecked();
90101
if (isset($_COOKIE[$source->getAuthId() . '-username'])) $t->data['rememberUsernameChecked'] = TRUE;
91102
}
92103
$t->data['links'] = $source->getLoginLinks();

0 commit comments

Comments
 (0)