| | <?php |
| |
|
| | namespace Kanboard\Core\Ldap; |
| |
|
| | use LogicException; |
| | use Kanboard\Core\Security\Role; |
| | use Kanboard\User\LdapUserProvider; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | class User |
| | { |
| | |
| | |
| | |
| | |
| | |
| | |
| | protected $query; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | protected $group; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function __construct(Query $query, Group $group = null) |
| | { |
| | $this->query = $query; |
| | $this->group = $group; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public static function getUser(Client $client, $username) |
| | { |
| | $self = new static(new Query($client), new Group(new Query($client))); |
| | return $self->find($self->getLdapUserPattern($username)); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function find($query) |
| | { |
| | $this->query->execute($this->getBaseDn(), $query, $this->getAttributes()); |
| | $user = null; |
| |
|
| | if ($this->query->hasResult()) { |
| | $user = $this->build(); |
| | } |
| |
|
| | return $user; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | protected function getGroups(Entry $entry) |
| | { |
| | $userattr = ''; |
| | if ('username' == $this->getGroupUserAttribute()) { |
| | $userattr = $entry->getFirstValue($this->getAttributeUsername()); |
| | } else if ('dn' == $this->getGroupUserAttribute()) { |
| | $userattr = $entry->getDn(); |
| | } |
| | $groupIds = array(); |
| |
|
| | if (! empty($userattr) && $this->group !== null && $this->hasGroupUserFilter()) { |
| | $groups = $this->group->find(sprintf($this->getGroupUserFilter(), $userattr)); |
| |
|
| | foreach ($groups as $group) { |
| | $groupIds[] = $group->getExternalId(); |
| | } |
| | } else { |
| | $groupIds = $entry->getAll($this->getAttributeGroup()); |
| | } |
| |
|
| | return $groupIds; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | protected function getRole(array $groupIds) |
| | { |
| | if (! $this->hasGroupsConfigured()) { |
| | return null; |
| | } |
| | |
| | if (LDAP_USER_DEFAULT_ROLE_MANAGER) { |
| | $role = Role::APP_MANAGER; |
| | } else { |
| | $role = Role::APP_USER; |
| | } |
| |
|
| | foreach ($groupIds as $groupId) { |
| | $groupId = strtolower($groupId); |
| |
|
| | if ($groupId === strtolower($this->getGroupAdminDn())) { |
| | $role = Role::APP_ADMIN; |
| | break; |
| | } |
| |
|
| | if ($groupId === strtolower($this->getGroupManagerDn())) { |
| | $role = Role::APP_MANAGER; |
| | } |
| | } |
| |
|
| | return $role; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | protected function build() |
| | { |
| | $entry = $this->query->getEntries()->getFirstEntry(); |
| | $groupIds = $this->getGroups($entry); |
| |
|
| | return new LdapUserProvider( |
| | $entry->getDn(), |
| | $entry->getFirstValue($this->getAttributeUsername()), |
| | $entry->getFirstValue($this->getAttributeName()), |
| | $entry->getFirstValue($this->getAttributeEmail()), |
| | $this->getRole($groupIds), |
| | $groupIds, |
| | $entry->getFirstValue($this->getAttributePhoto()), |
| | $entry->getFirstValue($this->getAttributeLanguage()) |
| | ); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAttributes() |
| | { |
| | return array_values(array_filter(array( |
| | $this->getAttributeUsername(), |
| | $this->getAttributeName(), |
| | $this->getAttributeEmail(), |
| | $this->getAttributeGroup(), |
| | $this->getAttributePhoto(), |
| | $this->getAttributeLanguage(), |
| | ))); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAttributeUsername() |
| | { |
| | if (! LDAP_USER_ATTRIBUTE_USERNAME) { |
| | throw new LogicException('LDAP username attribute empty, check the parameter LDAP_USER_ATTRIBUTE_USERNAME'); |
| | } |
| |
|
| | return strtolower(LDAP_USER_ATTRIBUTE_USERNAME); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAttributeName() |
| | { |
| | if (! LDAP_USER_ATTRIBUTE_FULLNAME) { |
| | throw new LogicException('LDAP full name attribute empty, check the parameter LDAP_USER_ATTRIBUTE_FULLNAME'); |
| | } |
| |
|
| | return strtolower(LDAP_USER_ATTRIBUTE_FULLNAME); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAttributeEmail() |
| | { |
| | if (! LDAP_USER_ATTRIBUTE_EMAIL) { |
| | throw new LogicException('LDAP email attribute empty, check the parameter LDAP_USER_ATTRIBUTE_EMAIL'); |
| | } |
| |
|
| | return strtolower(LDAP_USER_ATTRIBUTE_EMAIL); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAttributeGroup() |
| | { |
| | return strtolower(LDAP_USER_ATTRIBUTE_GROUPS); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAttributePhoto() |
| | { |
| | return strtolower(LDAP_USER_ATTRIBUTE_PHOTO); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAttributeLanguage() |
| | { |
| | return strtolower(LDAP_USER_ATTRIBUTE_LANGUAGE); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getGroupUserFilter() |
| | { |
| | return LDAP_GROUP_USER_FILTER; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getGroupUserAttribute() |
| | { |
| | return LDAP_GROUP_USER_ATTRIBUTE; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function hasGroupUserFilter() |
| | { |
| | return $this->getGroupUserFilter() !== '' && $this->getGroupUserFilter() !== null; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function hasGroupsConfigured() |
| | { |
| | return $this->getGroupAdminDn() || $this->getGroupManagerDn(); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getGroupAdminDn(): string |
| | { |
| | return strtolower(LDAP_GROUP_ADMIN_DN); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getGroupManagerDn(): string |
| | { |
| | return LDAP_GROUP_MANAGER_DN; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getBaseDn() |
| | { |
| | return LDAP_USER_BASE_DN; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getLdapUserPattern($username, $filter = LDAP_USER_FILTER) |
| | { |
| | if (! $filter) { |
| | throw new LogicException('LDAP user filter empty, check the parameter LDAP_USER_FILTER'); |
| | } |
| |
|
| | return str_replace('%s', $username, $filter); |
| | } |
| | } |
| |
|