78 lines
2.4 KiB
PHP
78 lines
2.4 KiB
PHP
<?php
|
|
|
|
class LibreTime_Model_FreeIpa
|
|
{
|
|
/**
|
|
* get userinfo in the format needed by the Auth Adaptor.
|
|
*
|
|
* @param mixed $username
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function GetUserInfo($username)
|
|
{
|
|
$config = Config::getConfig();
|
|
$conn = self::_getLdapConnection();
|
|
|
|
$ldapResults = $conn->search(sprintf('%s=%s', $config['ldap_filter_field'], $username, $config['ldap_basedn']));
|
|
|
|
if ($ldapResults->count() !== 1) {
|
|
throw new Exception('Could not find logged user in LDAP');
|
|
}
|
|
$ldapUser = $ldapResults->getFirst();
|
|
|
|
$groupMap = [
|
|
UTYPE_GUEST => $config['ldap_groupmap_guest'],
|
|
UTYPE_HOST => $config['ldap_groupmap_host'],
|
|
UTYPE_PROGRAM_MANAGER => $config['ldap_groupmap_program_manager'],
|
|
UTYPE_ADMIN => $config['ldap_groupmap_admin'],
|
|
UTYPE_SUPERADMIN => $config['ldap_groupmap_superadmin'],
|
|
];
|
|
$type = UTYPE_GUEST;
|
|
foreach ($groupMap as $groupType => $group) {
|
|
if (in_array($group, $ldapUser['memberof'])) {
|
|
$type = $groupType;
|
|
}
|
|
}
|
|
|
|
// grab first value for multivalue field
|
|
$firstName = $ldapUser['givenname'][0];
|
|
$lastName = $ldapUser['sn'][0];
|
|
$mail = $ldapUser['mail'][0];
|
|
|
|
// return full user info for auth adapter
|
|
return [
|
|
'type' => $type,
|
|
'first_name' => $firstName,
|
|
'last_name' => $lastName,
|
|
'email' => $mail,
|
|
'cell_phone' => '', // empty since I did not find it in ldap
|
|
'skype' => '', // empty until we decide on a field
|
|
'jabber' => '', // empty until we decide on a field
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Bind to ldap so we can fetch additional user info.
|
|
*
|
|
* @return Zend_Ldap
|
|
*/
|
|
private static function _getLdapConnection()
|
|
{
|
|
$config = Config::getConfig();
|
|
|
|
$options = [
|
|
'host' => $config['ldap_hostname'],
|
|
'username' => $config['ldap_binddn'],
|
|
'password' => $config['ldap_password'],
|
|
'bindRequiresDn' => true,
|
|
'accountDomainName' => $config['ldap_account_domain'],
|
|
'baseDn' => $config['ldap_basedn'],
|
|
];
|
|
$conn = new Zend_Ldap($options);
|
|
$conn->connect();
|
|
|
|
return $conn;
|
|
}
|
|
}
|