Skip to content
Snippets Groups Projects
Commit 1431fc47 authored by Jaime Perez's avatar Jaime Perez
Browse files

Add the "remember me" option to the default login form.

parent b5ff6f0d
No related branches found
No related tags found
No related merge requests found
......@@ -58,5 +58,8 @@
},
"remember_username": {
"en": "Remember my username"
}
},
"remember_me": {
"en": "Remember me"
}
}
......@@ -55,6 +55,23 @@ abstract class sspmod_core_Auth_UserPassBase extends SimpleSAML_Auth_Source {
*/
protected $rememberUsernameChecked = FALSE;
/**
* Storage for general config option session.rememberme.enable.
* loginuserpass.php page/template uses this option to present
* users with a checkbox to keep their session alive across
* different browser sessions (that is, closing and opening the
* browser again).
* @var bool
*/
protected $rememberMeEnabled = FALSE;
/**
* Storage for general config option session.rememberme.checked.
* loginuserpass.php page/template uses this option to default
* the "remember me" checkbox to checked or not.
* @var bool
*/
protected $rememberMeChecked = FALSE;
/**
* Constructor for this authentication source.
......@@ -85,6 +102,11 @@ abstract class sspmod_core_Auth_UserPassBase extends SimpleSAML_Auth_Source {
$this->rememberUsernameChecked = (bool) $config['remember.username.checked'];
unset($config['remember.username.checked']);
}
// get the "remember me" config options
$sspcnf = SimpleSAML_Configuration::getInstance();
$this->rememberMeEnabled = $sspcnf->getBoolean('session.rememberme.enable', FALSE);
$this->rememberMeChecked = $sspcnf->getBoolean('session.rememberme.checked', FALSE);
}
......@@ -121,6 +143,21 @@ abstract class sspmod_core_Auth_UserPassBase extends SimpleSAML_Auth_Source {
return $this->rememberUsernameChecked;
}
/**
* Check if the "remember me" feature is enabled.
* @return bool TRUE if enabled, FALSE otherwise.
*/
public function isRememberMeEnabled() {
return $this->rememberMeEnabled;
}
/**
* Check if the "remember me" checkbox should be checked.
* @return bool TRUE if enabled, FALSE otherwise.
*/
public function isRememberMeChecked() {
return $this->rememberMeChecked;
}
/**
* Initialize login.
......
......@@ -40,44 +40,52 @@ if ($this->data['forceUsername']) {
}
?>
</td>
<?php
if ($this->data['rememberUsernameEnabled']) {
$rowspan = 1;
} elseif (array_key_exists('organizations', $this->data)) {
$rowspan = 3;
} else {
$rowspan = 2;
}
?>
<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
<?php
if ($this->data['rememberUsernameEnabled']) {
echo str_repeat("\t", 4);
echo '<input type="checkbox" id="remember_username" tabindex="4" name="remember_username" value="Yes" ';
echo ($this->data['rememberUsernameChecked'] ? 'checked="Yes" /> ' : '/> ');
echo $this->t('{login:remember_username}');
} else {
$text = $this->t('{login:login_button}');
echo str_repeat("\t", 4);
echo "<input type=\"submit\" tabindex=\"4\" id=\"regularsubmit\" value=\"{$text}\" />";
}
?>
<?php
if ($this->data['rememberUsernameEnabled'] || $this->data['rememberMeEnabled']) {
$rowspan = 1;
} elseif (array_key_exists('organizations', $this->data)) {
$rowspan = 3;
} else {
$rowspan = 2;
}
?>
<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
<?php
if ($this->data['rememberUsernameEnabled'] || $this->data['rememberMeEnabled']) {
if ($this->data['rememberUsernameEnabled']) {
echo str_repeat("\t", 4);
echo '<input type="checkbox" id="remember_username" tabindex="4" name="remember_username" value="Yes" ';
echo ($this->data['rememberUsernameChecked'] ? 'checked="Yes" /> ' : '/> ');
echo $this->t('{login:remember_username}');
}
if ($this->data['rememberMeEnabled']) {
echo str_repeat("\t", 4);
echo '<input type="checkbox" id="remember_me" tabindex="4" name="remember_me" value="Yes" ';
echo $this->data['rememberMeChecked'] ? 'checked="Yes" /> ' : '/> ';
echo $this->t('{login:remember_me}');
}
} else {
$text = $this->t('{login:login_button}');
echo str_repeat("\t", 4);
echo "<input type=\"submit\" tabindex=\"4\" id=\"regularsubmit\" value=\"{$text}\" />";
}
?>
</td>
</tr>
<tr>
<td style="padding: .3em;"><?php echo $this->t('{login:password}'); ?></td>
<td><input id="password" type="password" tabindex="2" name="password" /></td>
<?php
// Move submit button to next row if remember checkbox enabled
if ($this->data['rememberUsernameEnabled']) {
$rowspan = (array_key_exists('organizations', $this->data) ? 2 : 1);
?>
<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
<input type="submit" tabindex="5" id="regularsubmit" value="<?php echo $this->t('{login:login_button}'); ?>" />
</td>
<?php
}
?>
<?php
// Move submit button to next row if remember checkbox enabled
if ($this->data['rememberUsernameEnabled'] || $this->data['rememberMeEnabled']) {
$rowspan = (array_key_exists('organizations', $this->data) ? 2 : 1);
?>
<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
<input type="submit" tabindex="5" id="regularsubmit" value="<?php echo $this->t('{login:login_button}'); ?>" />
</td>
<?php
}
?>
</tr>
<?php
......
......@@ -65,6 +65,13 @@ if (!empty($_REQUEST['username']) || !empty($password)) {
SimpleSAML_Utilities::setCookie($source->getAuthId() . '-username', $username, $params, FALSE);
}
if ($source->isRememberMeEnabled()) {
if (array_key_exists('remember_me', $_REQUEST) && $_REQUEST['remember_me'] === 'Yes') {
$state['RememberMe'] = TRUE;
$authStateId = SimpleSAML_Auth_State::saveState($state, sspmod_core_Auth_UserPassBase::STAGEID);
}
}
try {
sspmod_core_Auth_UserPassBase::handleLogin($authStateId, $username, $password);
} catch (SimpleSAML_Error_Error $e) {
......@@ -82,11 +89,15 @@ if (array_key_exists('forcedUsername', $state)) {
$t->data['forceUsername'] = TRUE;
$t->data['rememberUsernameEnabled'] = FALSE;
$t->data['rememberUsernameChecked'] = FALSE;
$t->data['rememberMeEnabled'] = $source->isRememberMeEnabled();
$t->data['rememberMeChecked'] = $source->isRememberMeChecked();
} else {
$t->data['username'] = $username;
$t->data['forceUsername'] = FALSE;
$t->data['rememberUsernameEnabled'] = $source->getRememberUsernameEnabled();
$t->data['rememberUsernameChecked'] = $source->getRememberUsernameChecked();
$t->data['rememberMeEnabled'] = $source->isRememberMeEnabled();
$t->data['rememberMeChecked'] = $source->isRememberMeChecked();
if (isset($_COOKIE[$source->getAuthId() . '-username'])) $t->data['rememberUsernameChecked'] = TRUE;
}
$t->data['links'] = $source->getLoginLinks();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment