mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-21 21:04:25 +02:00
Move cookie support detection to a helper class
Icinga\Web\Cookie will become a real cookie implementation.
This commit is contained in:
parent
de10171580
commit
271b5f9d5c
@ -6,6 +6,7 @@ namespace Icinga\Controllers;
|
|||||||
use Icinga\Application\Icinga;
|
use Icinga\Application\Icinga;
|
||||||
use Icinga\Forms\Authentication\LoginForm;
|
use Icinga\Forms\Authentication\LoginForm;
|
||||||
use Icinga\Web\Controller;
|
use Icinga\Web\Controller;
|
||||||
|
use Icinga\Web\Helper\CookieHelper;
|
||||||
use Icinga\Web\Url;
|
use Icinga\Web\Url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -37,13 +38,14 @@ class AuthenticationController extends Controller
|
|||||||
$this->redirectNow($form->getRedirectUrl());
|
$this->redirectNow($form->getRedirectUrl());
|
||||||
}
|
}
|
||||||
if (! $requiresSetup) {
|
if (! $requiresSetup) {
|
||||||
if (! $this->getRequest()->hasCookieSupport()) {
|
$cookies = new CookieHelper($this->getRequest());
|
||||||
|
if (! $cookies->isSupported()) {
|
||||||
$this
|
$this
|
||||||
->getResponse()
|
->getResponse()
|
||||||
->setBody("Cookies must be enabled to run this application.\n")
|
->setBody("Cookies must be enabled to run this application.\n")
|
||||||
->setHttpResponseCode(403)
|
->setHttpResponseCode(403)
|
||||||
->sendResponse();
|
->sendResponse();
|
||||||
exit();
|
exit;
|
||||||
}
|
}
|
||||||
$form->handleRequest();
|
$form->handleRequest();
|
||||||
}
|
}
|
||||||
|
81
library/Icinga/Web/Helper/CookieHelper.php
Normal file
81
library/Icinga/Web/Helper/CookieHelper.php
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
|
||||||
|
|
||||||
|
namespace Icinga\Web\Helper;
|
||||||
|
|
||||||
|
use Icinga\Web\Request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper Class Cookie
|
||||||
|
*/
|
||||||
|
class CookieHelper
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -118,15 +118,4 @@ class Request extends Zend_Controller_Request_Http
|
|||||||
}
|
}
|
||||||
return $id . '-' . $this->uniqueId;
|
return $id . '-' . $this->uniqueId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Detect whether cookies are enabled
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function hasCookieSupport()
|
|
||||||
{
|
|
||||||
$cookie = new Cookie($this);
|
|
||||||
return $cookie->isSupported();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user