support radiusProfileDn
This commit is contained in:
parent
0c0a3a13bf
commit
6d1904ffd6
|
@ -38,6 +38,9 @@ class freeRadius extends baseModule {
|
|||
private static $monthList = array('01' => 'Jan', '02' => 'Feb', '03' => 'Mar', '04' => 'Apr', '05' => 'May',
|
||||
'06' => 'Jun', '07' => 'Jul', '08' => 'Aug', '09' => 'Sep', '10' => 'Oct', '11' => 'Nov', '12' => 'Dec'
|
||||
);
|
||||
|
||||
/** cache for profile DNs */
|
||||
private $profileCache = null;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -78,7 +81,7 @@ class freeRadius extends baseModule {
|
|||
$return['objectClasses'] = array('radiusprofile');
|
||||
// managed attributes
|
||||
$return['attributes'] = array('radiusFramedIPAddress', 'radiusFramedIPNetmask', 'radiusRealm', 'radiusGroupName',
|
||||
'radiusExpiration', 'radiusIdleTimeout', 'dialupAccess');
|
||||
'radiusExpiration', 'radiusIdleTimeout', 'dialupAccess', 'radiusProfileDn');
|
||||
// help Entries
|
||||
$return['help'] = array(
|
||||
'radiusFramedIPAddress' => array(
|
||||
|
@ -113,32 +116,18 @@ class freeRadius extends baseModule {
|
|||
"Headline" => _("Enabled"), 'attr' => 'dialupAccess',
|
||||
"Text" => _("Specifies if the user may authenticate with FreeRadius.")
|
||||
),
|
||||
'profileDN' => array(
|
||||
"Headline" => _("Profile DN"), 'attr' => 'radiusProfileDn',
|
||||
"Text" => _('DN where Radius profile templates are stored.')
|
||||
),
|
||||
'radiusProfileDn' => array(
|
||||
"Headline" => _("Profile"), 'attr' => 'radiusProfileDn',
|
||||
"Text" => _('Radius profile for this user.')
|
||||
),
|
||||
'hiddenOptions' => array(
|
||||
"Headline" => _("Hidden options"),
|
||||
"Text" => _("The selected options will not be managed inside LAM. You can use this to reduce the number of displayed input fields.")
|
||||
));
|
||||
// configuration settings
|
||||
$configContainer = new htmlTable();
|
||||
$configContainerHead = new htmlTable();
|
||||
$configContainerHead->addElement(new htmlOutputText(_('Hidden options')));
|
||||
$configContainerHead->addElement(new htmlHelpLink('hiddenOptions'));
|
||||
$configContainerOptions = new htmlTable();
|
||||
$configContainer->addElement($configContainerHead, true);
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusFramedIPAddress', false, _('IP address'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusFramedIPNetmask', false, _('Net mask'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusRealm', false, _('Realm'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusGroupName', false, _('Group names'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusExpiration', false, _('Expiration date'), null, false));
|
||||
$configContainerOptions->addNewLine();
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusIdleTimeout', false, _('Idle timeout'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideDialupAccess', false, _('Enabled'), null, false));
|
||||
$configContainer->addElement($configContainerOptions, true);
|
||||
$return['config_options']['all'] = $configContainer;
|
||||
// profile settings
|
||||
$profileElements = array();
|
||||
if (!$this->isBooleanConfigOptionSet('freeRadius_hideRadiusFramedIPNetmask')) {
|
||||
|
@ -175,6 +164,16 @@ class freeRadius extends baseModule {
|
|||
$profileElements[] = $dialupAccessSelect;
|
||||
$return['profile_mappings']['freeRadius_dialupAccess'] = 'dialupAccess';
|
||||
}
|
||||
if (!$this->isBooleanConfigOptionSet('freeRadius_hideRadiusProfileDn')) {
|
||||
$profileOptions = array('-' => '');
|
||||
foreach ($this->getProfiles() as $dn) {
|
||||
$profileOptions[getAbstractDN($dn)] = $dn;
|
||||
}
|
||||
$profileSelect = new htmlTableExtendedSelect('freeRadius_radiusProfileDn', $profileOptions, array(''), _('Profile'), 'radiusProfileDn');
|
||||
$profileSelect->setHasDescriptiveElements(true);
|
||||
$profileElements[] = $profileSelect;
|
||||
$return['profile_mappings']['freeRadius_radiusProfileDn'] = 'radiusProfileDn';
|
||||
}
|
||||
if (sizeof($profileElements) > 0) {
|
||||
$profileContainer = new htmlTable();
|
||||
for ($i = 0; $i < sizeof($profileElements); $i++) {
|
||||
|
@ -242,6 +241,14 @@ class freeRadius extends baseModule {
|
|||
'values' => 'true, false'
|
||||
);
|
||||
}
|
||||
if (!$this->isBooleanConfigOptionSet('freeRadius_hideRadiusProfileDn')) {
|
||||
$return['upload_columns'][] = array(
|
||||
'name' => 'freeRadius_radiusProfileDn',
|
||||
'description' => _('Profile'),
|
||||
'help' => 'radiusProfileDn',
|
||||
'example' => 'cn=profile,ou=radiusProfile,dc=example,dc=com'
|
||||
);
|
||||
}
|
||||
// available PDF fields
|
||||
$return['PDF_fields'] = array();
|
||||
if (!$this->isBooleanConfigOptionSet('freeRadius_hideRadiusFramedIPAddress')) {
|
||||
|
@ -265,8 +272,55 @@ class freeRadius extends baseModule {
|
|||
if (!$this->isBooleanConfigOptionSet('freeRadius_hideDialupAccess')) {
|
||||
$return['PDF_fields']['dialupAccess'] = _('Enabled');
|
||||
}
|
||||
if (!$this->isBooleanConfigOptionSet('freeRadius_hideRadiusProfileDn')) {
|
||||
$return['PDF_fields']['radiusProfileDn'] = _('Profile');
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of configuration options.
|
||||
*
|
||||
* Calling this method does not require the existence of an enclosing {@link accountContainer}.<br>
|
||||
* <br>
|
||||
* The field names are used as keywords to load and save settings.
|
||||
* We recommend to use the module name as prefix for them (e.g. posixAccount_homeDirectory) to avoid naming conflicts.
|
||||
*
|
||||
* @param array $scopes account types (user, group, host)
|
||||
* @param array $allScopes list of all active account modules and their scopes (module => array(scopes))
|
||||
* @return mixed htmlElement or array of htmlElement
|
||||
*
|
||||
* @see htmlElement
|
||||
*/
|
||||
public function get_configOptions($scopes, $allScopes) {
|
||||
$configContainer = new htmlTable();
|
||||
$configContainer->addElement(new htmlTableExtendedInputField(_('Profile DN'), 'freeRadius_profileDN', '', 'profileDN'), true);
|
||||
$configContainer->addVerticalSpace('10px');
|
||||
$configContainerHead = new htmlTable();
|
||||
$configContainerHead->colspan = 5;
|
||||
$configContainerHead->addElement(new htmlOutputText(_('Hidden options')));
|
||||
$configContainerHead->addElement(new htmlHelpLink('hiddenOptions'));
|
||||
$configContainerOptions = new htmlTable();
|
||||
$configContainerOptions->colspan = 5;
|
||||
$configContainer->addElement($configContainerHead, true);
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusFramedIPAddress', false, _('IP address'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusFramedIPNetmask', false, _('Net mask'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusRealm', false, _('Realm'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusGroupName', false, _('Group names'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusExpiration', false, _('Expiration date'), null, false));
|
||||
$configContainerOptions->addNewLine();
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusIdleTimeout', false, _('Idle timeout'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusProfileDn', false, _('Profile'), null, false));
|
||||
$configContainerOptions->addElement(new htmlOutputText(' '));
|
||||
$configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideDialupAccess', false, _('Enabled'), null, false));
|
||||
$configContainer->addElement($configContainerOptions, true);
|
||||
return $configContainer;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function fills the error message array with messages
|
||||
|
@ -285,6 +339,7 @@ class freeRadius extends baseModule {
|
|||
$this->messages['radiusIdleTimeout'][0] = array('ERROR', _('Please enter a numeric value for the idle timeout.'));
|
||||
$this->messages['radiusIdleTimeout'][1] = array('ERROR', _('Account %s:') . ' freeRadius_radiusIdleTimeout', _('Please enter a numeric value for the idle timeout.'));
|
||||
$this->messages['dialupAccess'][0] = array('ERROR', _('Account %s:') . ' freeRadius_dialupAccess', _('This value can only be "true" or "false".'));
|
||||
$this->messages['radiusProfileDn'][0] = array('ERROR', _('Account %s:') . ' freeRadius_radiusProfileDn', _('This is not a valid DN!'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -329,6 +384,23 @@ class freeRadius extends baseModule {
|
|||
$return->addElement($radiusExpirationList);
|
||||
$return->addElement(new htmlHelpLink('radiusExpiration'), true);
|
||||
}
|
||||
// profile DN
|
||||
if (!$this->isBooleanConfigOptionSet('freeRadius_hideRadiusProfileDn')) {
|
||||
$profiles = array('-' => '-');
|
||||
foreach ($this->getProfiles() as $dn) {
|
||||
$profiles[getAbstractDN($dn)] = $dn;
|
||||
}
|
||||
$profile = array();
|
||||
if (!empty($this->attributes['radiusProfileDn'][0])) {
|
||||
$profile = $this->attributes['radiusProfileDn'];
|
||||
if (!in_array($this->attributes['radiusProfileDn'][0], $profiles)) {
|
||||
$profiles[getAbstractDN($this->attributes['radiusProfileDn'][0])] = $this->attributes['radiusProfileDn'][0];
|
||||
}
|
||||
}
|
||||
$profileSelect = new htmlTableExtendedSelect('radiusProfileDn', $profiles, $profile, _('Profile'), 'radiusProfileDn');
|
||||
$profileSelect->setHasDescriptiveElements(true);
|
||||
$return->addElement($profileSelect, true);
|
||||
}
|
||||
// enabled
|
||||
if (!$this->isBooleanConfigOptionSet('freeRadius_hideDialupAccess')) {
|
||||
$enabled = array('');
|
||||
|
@ -425,6 +497,15 @@ class freeRadius extends baseModule {
|
|||
$this->attributes['dialupAccess'][0] = 'true';
|
||||
}
|
||||
}
|
||||
// profile DN
|
||||
if (!$this->isBooleanConfigOptionSet('freeRadius_hideRadiusProfileDn')) {
|
||||
if (($_POST['radiusProfileDn'] == '-') && !empty($this->attributes['radiusProfileDn'])) {
|
||||
unset($this->attributes['radiusProfileDn']);
|
||||
}
|
||||
elseif ($_POST['radiusProfileDn'] != '-') {
|
||||
$this->attributes['radiusProfileDn'][0] = $_POST['radiusProfileDn'];
|
||||
}
|
||||
}
|
||||
return $errors;
|
||||
}
|
||||
|
||||
|
@ -588,6 +669,17 @@ class freeRadius extends baseModule {
|
|||
$errors[] = $errMsg;
|
||||
}
|
||||
}
|
||||
// profile DN
|
||||
if (!empty($rawAccounts[$i][$ids['freeRadius_radiusProfileDn']])) {
|
||||
if (get_preg($rawAccounts[$i][$ids['freeRadius_radiusProfileDn']], 'dn')) {
|
||||
$partialAccounts[$i]['radiusProfileDn'] = $rawAccounts[$i][$ids['freeRadius_radiusProfileDn']];
|
||||
}
|
||||
else {
|
||||
$errMsg = $this->messages['radiusProfileDn'][0];
|
||||
array_push($errMsg, array($i));
|
||||
$errors[] = $errMsg;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $errors;
|
||||
}
|
||||
|
@ -604,6 +696,7 @@ class freeRadius extends baseModule {
|
|||
$this->addSimplePDFField($return, 'radiusRealm', _('Realm'));
|
||||
$this->addSimplePDFField($return, 'radiusGroupName', _('Group names'));
|
||||
$this->addSimplePDFField($return, 'radiusIdleTimeout', _('Idle timeout'));
|
||||
$this->addSimplePDFField($return, 'radiusProfileDn', _('Profile'));
|
||||
if (isset($this->attributes['radiusExpiration'][0])) {
|
||||
$return[get_class($this) . '_radiusExpiration'][0] = '<block><key>' . _('Expiration date') . '</key><value>' . $this->formatExpirationDate($this->attributes['radiusExpiration'][0]) . '</value></block>';
|
||||
}
|
||||
|
@ -676,6 +769,26 @@ class freeRadius extends baseModule {
|
|||
return $date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of possible profile DNs.
|
||||
*
|
||||
* @return array list of profile DNs
|
||||
*/
|
||||
private function getProfiles() {
|
||||
if ($this->profileCache != null) {
|
||||
return $this->profileCache;
|
||||
}
|
||||
if (empty($this->moduleSettings['freeRadius_profileDN'][0])) {
|
||||
return array();
|
||||
}
|
||||
$list = searchLDAP($this->moduleSettings['freeRadius_profileDN'][0], '(objectClass=radiusProfile)', array('dn'));
|
||||
foreach ($list as $attr) {
|
||||
$this->profileCache[] = $attr['dn'];
|
||||
}
|
||||
usort($this->profileCache, 'compareDN');
|
||||
return $this->profileCache;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue