parent
ce2a196c4a
commit
cf8c680482
|
@ -79,10 +79,10 @@ class Auth
|
||||||
*/
|
*/
|
||||||
public function isAuthenticated($ignoreSession = false)
|
public function isAuthenticated($ignoreSession = false)
|
||||||
{
|
{
|
||||||
if ($this->user === null && ! $ignoreSession) {
|
if ($this->user === null && ! $this->authHttp() && ! $ignoreSession) {
|
||||||
$this->authenticateFromSession();
|
$this->authenticateFromSession();
|
||||||
}
|
}
|
||||||
return is_object($this->user);
|
return $this->user !== null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setAuthenticated(User $user, $persist = true)
|
public function setAuthenticated(User $user, $persist = true)
|
||||||
|
@ -175,7 +175,7 @@ class Auth
|
||||||
public function getRequest()
|
public function getRequest()
|
||||||
{
|
{
|
||||||
if ($this->request === null) {
|
if ($this->request === null) {
|
||||||
$this->request = Icinga::app()->getFrontController()->getRequest();
|
$this->request = Icinga::app()->getRequest();
|
||||||
}
|
}
|
||||||
return $this->request;
|
return $this->request;
|
||||||
}
|
}
|
||||||
|
@ -224,6 +224,44 @@ class Auth
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to authenticate a user using HTTP authentication
|
||||||
|
*
|
||||||
|
* Supports only the Basic HTTP authentication scheme. This will not challenge the client if authorization is
|
||||||
|
* missing or invalid yet. XHR will be ignored.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function authHttp()
|
||||||
|
{
|
||||||
|
if ($this->getRequest()->isXmlHttpRequest()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$header = $this->getRequest()->getHeader('Authorization');
|
||||||
|
if (empty($header)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
list($scheme) = explode(' ', $header, 2);
|
||||||
|
if ($scheme !== 'Basic') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$authorization = substr($header, strlen('Basic '));
|
||||||
|
$credentials = base64_decode($authorization);
|
||||||
|
$credentials = array_filter(explode(':', $credentials));
|
||||||
|
if (count($credentials) !== 2) {
|
||||||
|
// Deny empty username and/or password
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$user = new User($credentials[0]);
|
||||||
|
$password = $credentials[1];
|
||||||
|
if ($this->getAuthChain()->setSkipExternalBackends(true)->authenticate($user, $password)) {
|
||||||
|
$this->setAuthenticated($user, false);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether an authenticated user has a given permission
|
* Whether an authenticated user has a given permission
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue