using one list of auth-types (in order of importance) and detecting additional ones in the filesystem

This commit is contained in:
Ralf Becker 2010-09-10 09:26:17 +00:00
parent 741a12bef2
commit 871e5718af
3 changed files with 86 additions and 41 deletions

View File

@ -59,6 +59,9 @@ class setup_cmd_config extends setup_cmd
$this->check_installed($this->domain,15,$this->verbose);
// fixing authtypes in self::$options
self::auth_types(true);
$values = array();
if ($this->arguments) // we have command line arguments
{
@ -317,6 +320,11 @@ class setup_cmd_config extends setup_cmd
{
if (is_array($data) && isset($data['allowed']))
{
if ($data['name'] == 'auth_type')
{
$options[$data['name']] = self::auth_types();
continue;
}
foreach($data['allowed'] as $label => $value)
{
if (is_int($label))
@ -331,6 +339,47 @@ class setup_cmd_config extends setup_cmd
}
return $options;
}
/**
* Read auth-types (existing auth backends) from filesystem and fix our $options array
*
* @return array
*/
static function auth_types()
{
// default backends in order of importance
static $auth_types = array(
'sql' => 'SQL',
'ldap' => 'LDAP',
'mail' => 'Mail',
'ads' => 'Active Directory',
'http' => 'HTTP',
'fallback' => 'Fallback LDAP --> SQL',
'sqlssl' => 'SQL / SSL',
);
static $scan_done;
if (!$scan_done++)
{
// now add auth backends found in filesystem
foreach(scandir(EGW_INCLUDE_ROOT.'/phpgwapi/inc') as $class)
{
if (preg_match('/^class\.auth_([a-z]+)\.inc\.php$/',$class,$matches) &&
!isset($auth_types[$matches[1]]))
{
$auth_types[$matches[1]] = ucfirst($matches[1]);
}
}
foreach(self::$options['--account-auth'] as &$param)
{
if ($param['name'] == 'auth_type')
{
$param['allowed'] = array_keys($auth_types);
break;
}
}
}
return $auth_types;
}
/**
* Return the defaults from the $options array

View File

@ -239,20 +239,41 @@ function sql_passwdhashes($config)
*/
function mail_login_type($config)
{
$types = emailadmin_ui::getIMAPLoginTypes('cyrusimap');
unset($types['admin']);
foreach($types as $value => $label)
return _options_from(emailadmin_ui::getIMAPLoginTypes('cyrusimap'),$config['mail_login_type']);
}
/**
* Make auth-types from setup_cmd_config available
*
* @param array $config
* @return string
*/
function auth_type($config)
{
return _options_from(setup_cmd_config::auth_types(),$config['auth_type']);
}
function auth_type_syncml($config)
{
return _options_from(setup_cmd_config::auth_types(),$config['auth_type_syncml']);
}
function auth_type_groupdav($config)
{
return _options_from(setup_cmd_config::auth_types(),$config['auth_type_groupdav']);
}
/**
* Returns options string
*
* @param array $options value => label pairs
* @param string $selected value of selected optino
* @return string
*/
function _options_from(array $options,$selected)
{
foreach($options as $value => $label)
{
if($config['mail_login_type'] == $value)
{
$selected = ' selected="selected"';
}
else
{
$selected = '';
}
$out .= '<option value="' . $value . '"' . $selected . '>' . $label . '</option>' . "\n";
$out .= '<option value="' . htmlspecialchars($value) . '"' .
($selected == $value ? ' selected="selected"' : '') . '>' . $label . '</option>' . "\n";
}
return $out;
}

View File

@ -213,16 +213,7 @@
<td>{lang_Select_which_type_of_authentication_you_are_using}:</td>
<td>
<select name="newsettings[auth_type]">
<option value="sql"{selected_auth_type_sql}>SQL</option>
<option value="sqlssl"{selected_auth_type_sqlssl}>SQL / SSL</option>
<option value="ldap"{selected_auth_type_ldap}>LDAP</option>
<option value="ads"{selected_auth_type_ads}>ADS</option>
<option value="mail"{selected_auth_type_mail}>Mail</option>
<option value="http"{selected_auth_type_http}>HTTP</option>
<option value="nis"{selected_auth_type_nis}>NIS</option>
<option value="pam"{selected_auth_type_pam}>PAM</option>
<option value="cas"{selected_auth_type_cas}>CAS</option>
<option value="fallback"{selected_auth_type_fallback}>Fallback LDAP -> SQL</option>
{hook_auth_type}
</select>
</td>
</tr>
@ -232,15 +223,7 @@
<td>
<select name="newsettings[auth_type_syncml]">
<option value="">{lang_Standard,_as_defined_above}</option>
<option value="sql"{selected_auth_type_syncml_sql}>SQL</option>
<option value="sqlssl"{selected_auth_type_syncml_sqlssl}>SQL / SSL</option>
<option value="ldap"{selected_auth_type_syncml_ldap}>LDAP</option>
<option value="ads"{selected_auth_type_syncml_ads}>ADS</option>
<option value="mail"{selected_auth_type_syncml_mail}>Mail</option>
<option value="http"{selected_auth_type_syncml_http}>HTTP</option>
<option value="nis"{selected_auth_type_syncml_nis}>NIS</option>
<option value="pam"{selected_auth_type_syncml_pam}>PAM</option>
<option value="fallback"{selected_auth_type_fallback}>Fallback LDAP -> SQL</option>
{hook_auth_type_syncml}
</select>
</td>
</tr>
@ -250,15 +233,7 @@
<td>
<select name="newsettings[auth_type_groupdav]">
<option value="">{lang_Standard,_as_defined_above}</option>
<option value="sql"{selected_auth_type_groupdav_sql}>SQL</option>
<option value="sqlssl"{selected_auth_type_groupdav_sqlssl}>SQL / SSL</option>
<option value="ldap"{selected_auth_type_groupdav_ldap}>LDAP</option>
<option value="ads"{selected_auth_type_groupdav_ads}>ADS</option>
<option value="mail"{selected_auth_type_groupdav_mail}>Mail</option>
<option value="http"{selected_auth_type_groupdav_http}>HTTP</option>
<option value="nis"{selected_auth_type_groupdav_nis}>NIS</option>
<option value="pam"{selected_auth_type_groupdav_pam}>PAM</option>
<option value="fallback"{selected_auth_type_fallback}>Fallback LDAP -> SQL</option>
{hook_auth_type_groupdav}
</select>
</td>
</tr>