mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-30 01:04:09 +02:00
User: split the username into localpart and domain (if given)
This commit is contained in:
parent
46c5b30de8
commit
2b9e9bf2b3
@ -231,4 +231,55 @@ class UserBackend implements ConfigAwareFactory
|
|||||||
$backend->setName($name);
|
$backend->setName($name);
|
||||||
return $backend;
|
return $backend;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return whether the given backend is responsible for authenticating the given user (based on their domains)
|
||||||
|
*
|
||||||
|
* @param UserBackendInterface $backend
|
||||||
|
* @param User $user
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isBackendResponsibleForUser(UserBackendInterface $backend, User $user)
|
||||||
|
{
|
||||||
|
$backendDomain = static::getBackendDomain($backend);
|
||||||
|
$userDomain = $user->getDomain();
|
||||||
|
|
||||||
|
if ($userDomain === null) {
|
||||||
|
// The user logs in as "jdoe", not as "jdoe@example.com" and there's no default domain.
|
||||||
|
// The backend is only responsible if its domain is also missing.
|
||||||
|
return $backendDomain === null;
|
||||||
|
} else {
|
||||||
|
// The user logs in as "jdoe@example.com" or "jdoe" with a default domain being configured.
|
||||||
|
return strtolower($userDomain) === strtolower($backendDomain);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the domain the given backend is responsible for (fall back to the default domain if any)
|
||||||
|
*
|
||||||
|
* @param UserBackendInterface $backend
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public static function getBackendDomain(UserBackendInterface $backend)
|
||||||
|
{
|
||||||
|
$backendDomain = Config::app('authentication')->get($backend->getName(), 'domain');
|
||||||
|
return $backendDomain === null ? Config::app()->get('authentication', 'default_domain') : $backendDomain;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the user from the given username without its domain and the backend as fully assembled {@link User} object
|
||||||
|
*
|
||||||
|
* @param string $localUsername
|
||||||
|
* @param UserBackendInterface $backend
|
||||||
|
*
|
||||||
|
* @return User
|
||||||
|
*/
|
||||||
|
public static function getUserFromBackend($localUsername, UserBackendInterface $backend)
|
||||||
|
{
|
||||||
|
$user = new User($localUsername);
|
||||||
|
$user->setDomain(static::getBackendDomain($backend));
|
||||||
|
return $user->setDefaultDomainIfNeeded();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,13 +17,6 @@ use Icinga\Web\Navigation\Navigation;
|
|||||||
*/
|
*/
|
||||||
class User
|
class User
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Username
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $username;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Firstname
|
* Firstname
|
||||||
*
|
*
|
||||||
@ -45,6 +38,13 @@ class User
|
|||||||
*/
|
*/
|
||||||
protected $email;
|
protected $email;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link username} without {@link domain}
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $localUsername;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Domain
|
* Domain
|
||||||
*
|
*
|
||||||
@ -279,7 +279,7 @@ class User
|
|||||||
*/
|
*/
|
||||||
public function getUsername()
|
public function getUsername()
|
||||||
{
|
{
|
||||||
return $this->username;
|
return $this->domain === null ? $this->localUsername : $this->localUsername . '@' . $this->domain;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -289,7 +289,18 @@ class User
|
|||||||
*/
|
*/
|
||||||
public function setUsername($name)
|
public function setUsername($name)
|
||||||
{
|
{
|
||||||
$this->username = $name;
|
$parts = explode('\\', $name, 2);
|
||||||
|
if (count($parts) === 2) {
|
||||||
|
list($this->domain, $this->localUsername) = $parts;
|
||||||
|
} else {
|
||||||
|
$parts = explode('@', $name, 2);
|
||||||
|
if (count($parts) === 2) {
|
||||||
|
list($this->localUsername, $this->domain) = $parts;
|
||||||
|
} else {
|
||||||
|
$this->localUsername = $name;
|
||||||
|
$this->domain = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -354,7 +365,7 @@ class User
|
|||||||
if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
|
if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
|
||||||
$this->email = $mail;
|
$this->email = $mail;
|
||||||
} else {
|
} else {
|
||||||
throw new InvalidArgumentException("Invalid mail given for user $this->username: $mail");
|
throw new InvalidArgumentException('Invalid mail given for user ' . $this->getUsername() . ': $mail');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,6 +389,15 @@ class User
|
|||||||
return $this->domain;
|
return $this->domain;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the local username, ie. the username without its domain
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getLocalUsername()
|
||||||
|
{
|
||||||
|
return $this->localUsername;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set additional information about user
|
* Set additional information about user
|
||||||
|
Loading…
x
Reference in New Issue
Block a user