added support for authentication via cookie. NOTE: you have to enable this in setup if u want to use it.

This commit is contained in:
Cornelius Weiß 2005-05-11 18:25:17 +00:00
parent fd9d1b1ceb
commit 632a990cfb
5 changed files with 111 additions and 2 deletions

View File

@ -151,6 +151,20 @@
{
$passwd = $_POST['passwd'];
$passwd_type = $_POST['passwd_type'];
if($GLOBALS['egw_info']['server']['allow_cookie_auth'])
{
$eGW_remember = unserialize(stripslashes($_COOKIE['eGW_remeber']));
if($eGW_remember['login'] && $eGW_remember['passwd'] && $eGW_remember['passwd_type'])
{
$_SERVER['PHP_AUTH_USER'] = $login = $eGW_remember['login'];
$_SERVER['PHP_AUTH_PW'] = $passwd = $eGW_remember['passwd'];
$passwd_type = $eGW_remember['passwd_type'];
$submit = True;
}
}
}
# Apache + mod_ssl style SSL certificate authentication
@ -192,6 +206,7 @@
if(getenv('REQUEST_METHOD') != 'POST' && $_SERVER['REQUEST_METHOD'] != 'POST' &&
!isset($_SERVER['PHP_AUTH_USER']) && !isset($_SERVER['SSL_CLIENT_S_DN']))
{
$GLOBALS['phpgw']->session->phpgw_setcookie('eGW_remeber');
$GLOBALS['egw']->redirect($GLOBALS['egw']->link('/login.php','cd=5'));
}
#if(!isset($_COOKIE['eGroupWareLoginTime']))
@ -233,10 +248,40 @@
if(!isset($GLOBALS['sessionid']) || ! $GLOBALS['sessionid'])
{
$GLOBALS['phpgw']->session->phpgw_setcookie('eGW_remeber');
$GLOBALS['egw']->redirect($GLOBALS['egw_info']['server']['webserver_url'] . '/login.php?cd=' . $GLOBALS['egw']->session->cd_reason);
}
else
{
/* set auth_cookie */
if($GLOBALS['egw_info']['server']['allow_cookie_auth'] && $_POST['remember_me'] && $_POST['passwd'])
{
switch ($_POST['remember_me'])
{
case '1hour' :
$remember_time = time()+60*60;
break;
case '1day' :
$remember_time = time()+60*60*24;
break;
case '1week' :
$remember_time = time()+60*60*24*7;
break;
case '1month' :
$remember_time = time()+60*60*24*30;
break;
case 'forever' :
default:
$remember_time = 2147483647;
break;
}
$GLOBALS['egw']->session->phpgw_setcookie('eGW_remeber',serialize(array(
'login' => $login,
'passwd' => $passwd,
'passwd_type' => $passwd_type)),
$remember_time);
}
if ($_POST['lang'] && preg_match('/^[a-z]{2}(-[a-z]{2}){0,1}$/',$_POST['lang']) &&
$_POST['lang'] != $GLOBALS['egw_info']['user']['preferences']['common']['lang'])
{
@ -399,6 +444,33 @@
}
}
/********************************************************\
* Check if authentification via cookies is allowed *
* and place a time selectbox, how long cookie is valid *
\********************************************************/
if($GLOBALS['egw_info']['server']['allow_cookie_auth'])
{
$this->html = CreateObject('phpgwapi.html'); /* Why the hell was nobody useing this here before??? */
$tmpl->set_block('login_form','remember_me_selection');
$tmpl->set_var('lang_remember_me',lang('Remember me'));
$tmpl->set_var('select_remember_me',$this->html->select('remember_me', 'forever', array(
false => lang('not'),
'1hour' => lang('1 Hour'),
'1day' => lang('1 Day'),
'1week'=> lang('1 Week'),
'1month' => lang('1 Month'),
'forever' => lang('Forever')),true
));
}
else
{
/* trick to make remember_me section disapear */
$tmpl->set_block('login_form','remember_me_selection');
$tmpl->set_var('remember_me_selection','');
}
// add a content-type header to overwrite an existing default charset in apache (AddDefaultCharset directiv)
header('Content-type: text/html; charset='.$GLOBALS['egw']->translation->charset());

View File

@ -55,6 +55,7 @@
));
}
}
$GLOBALS['phpgw']->session->phpgw_setcookie('eGW_remeber');
$GLOBALS['phpgw']->session->phpgw_setcookie('sessionid');
$GLOBALS['phpgw']->session->phpgw_setcookie('kp3');
$GLOBALS['phpgw']->session->phpgw_setcookie('domain');

View File

@ -67,8 +67,10 @@
// do we have to migrate an old password ?
if($GLOBALS['egw_info']['server']['pwd_migration_allowed'])
{
if(!is_array($GLOBALS['egw_info']['server']['pwd_migration_types'])) return false;
foreach($GLOBALS['egw_info']['server']['pwd_migration_types'] as $handle => $type)
if(!isset($GLOBALS['egw_info']['server']['pwd_migration_types'])) return false;
$allowed_types = explode(',', $GLOBALS['egw_info']['server']['pwd_migration_types']);
foreach($allowed_types as $num => $type)
{
if($this->compare_password($passwd,$this->db->f('account_pwd'),$type,strtolower($username)))
{

View File

@ -89,6 +89,13 @@
<td align="left"></td>
</tr>
<!-- END domain_selection -->
<!-- BEGIN remember_me_selection -->
<tr>
<td align="right">{lang_remember_me}:&nbsp;</td>
<td align="left" colspan="2">{select_remember_me}</td>
</tr>
<!-- END remember_me_selection -->
<tr>
<td align="right" tablindex="1">{lang_username}:&nbsp;</td>
<td align="left"><input name="login" value="{cookie}" style="width: 150px; border: 1px solid silver;"></td>

View File

@ -174,6 +174,33 @@
</td>
</tr>
<tr class="row_off">
<td>{lang_Allow_authentification_via_cookie}:</td>
<td>
<select name="newsettings[allow_cookie_auth]">
<option value="">{lang_No}</option>
<option value="True"{selected_allow_cookie_auth_True}>{lang_Yes}</option>
</select>
</td>
</tr>
<tr class="row_on">
<td>{lang_Allow_password_migration}:</td>
<td>
<select name="newsettings[pwd_migration_allowed]">
<option value="">{lang_No}</option>
<option value="True"{selected_pwd_migration_allowed_True}>{lang_Yes}</option>
</select>
</td>
</tr>
<tr class="row_on">
<td>{lang_Allowed_migration_types_(comma-separated)}:</td>
<td>
<input name="newsettings[pwd_migration_types]" value="{value_pwd_migration_types}" size="20">
</td>
</tr>
<tr class="row_off">
<td>{lang_Minimum_account_id_(e.g._500_or_100,_etc.)}:</td>
<td><input name="newsettings[account_min_id]" value="{value_account_min_id}"></td>