commit
474fd7b352
|
@ -6,6 +6,7 @@
|
|||
use Icinga\Application\Icinga;
|
||||
use Icinga\Forms\Authentication\LoginForm;
|
||||
use Icinga\Web\Controller;
|
||||
use Icinga\Web\Cookie;
|
||||
use Icinga\Web\Url;
|
||||
|
||||
/**
|
||||
|
@ -37,6 +38,11 @@ class AuthenticationController extends Controller
|
|||
$this->redirectNow($form->getRedirectUrl());
|
||||
}
|
||||
if (! $requiresSetup) {
|
||||
if (! $this->getRequest()->hasCookieSupport()) {
|
||||
echo $this->translate("Cookies must be enabled to run this application.\n");
|
||||
$this->getResponse()->setHttpResponseCode(403)->sendHeaders();
|
||||
exit();
|
||||
}
|
||||
$form->handleRequest();
|
||||
}
|
||||
$this->view->form = $form;
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
|
||||
|
||||
namespace Icinga\Web;
|
||||
|
||||
/**
|
||||
* Helper Class Cookie
|
||||
*/
|
||||
class Cookie
|
||||
{
|
||||
/**
|
||||
* The name of the control cookie
|
||||
*/
|
||||
const CHECK_COOKIE = '_chc';
|
||||
|
||||
/**
|
||||
* The request
|
||||
*
|
||||
* @var Request
|
||||
*/
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* Create a new cookie
|
||||
*
|
||||
* @param Request $request
|
||||
*/
|
||||
public function __construct(Request $request)
|
||||
{
|
||||
$this->request = $request;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether cookies are supported or not
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isSupported()
|
||||
{
|
||||
if (! empty($_COOKIE)) {
|
||||
$this->cleanupCheck();
|
||||
return true;
|
||||
}
|
||||
|
||||
$url = $this->request->getUrl();
|
||||
|
||||
if ($url->hasParam('_checkCookie') && empty($_COOKIE)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (! $url->hasParam('_checkCookie')) {
|
||||
$this->provideCheck();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare check to detect cookie support
|
||||
*/
|
||||
public function provideCheck()
|
||||
{
|
||||
setcookie(self::CHECK_COOKIE, '1');
|
||||
|
||||
$requestUri = $this->request->getUrl()->addParams(array('_checkCookie' => 1));
|
||||
$this->request->getResponse()->redirectAndExit($requestUri);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup the cookie support check
|
||||
*/
|
||||
public function cleanupCheck()
|
||||
{
|
||||
if ($this->request->getUrl()->hasParam('_checkCookie') && isset($_COOKIE[self::CHECK_COOKIE])) {
|
||||
$requestUri =$this->request->getUrl()->without('_checkCookie');
|
||||
$this->request->getResponse()->redirectAndExit($requestUri);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
namespace Icinga\Web;
|
||||
|
||||
use Icinga\Application\Icinga;
|
||||
use Zend_Controller_Request_Http;
|
||||
use Icinga\User;
|
||||
|
||||
|
@ -32,6 +33,13 @@ class Request extends Zend_Controller_Request_Http
|
|||
*/
|
||||
protected $url;
|
||||
|
||||
/**
|
||||
* Response
|
||||
*
|
||||
* @var Response
|
||||
*/
|
||||
protected $response;
|
||||
|
||||
/**
|
||||
* Get whether the request seems to be an API request
|
||||
*
|
||||
|
@ -78,6 +86,20 @@ class Request extends Zend_Controller_Request_Http
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function getResponse()
|
||||
{
|
||||
if ($this->response === null) {
|
||||
$this->response = Icinga::app()->getResponse();
|
||||
}
|
||||
|
||||
return $this->response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes an ID unique to this request, to prevent id collisions in different containers
|
||||
*
|
||||
|
@ -96,4 +118,10 @@ class Request extends Zend_Controller_Request_Http
|
|||
}
|
||||
return $id . '-' . $this->uniqueId;
|
||||
}
|
||||
|
||||
public function hasCookieSupport()
|
||||
{
|
||||
$cookie = new Cookie($this);
|
||||
return $cookie->isSupported();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue