mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-11-04 13:14:41 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/* Icinga Web 2 | (c) 2015 Icinga Development Team | GPLv2+ */
 | 
						|
 | 
						|
namespace Icinga\Controllers;
 | 
						|
 | 
						|
use Icinga\Forms\AcknowledgeApplicationStateMessageForm;
 | 
						|
use Icinga\Web\Announcement\AnnouncementCookie;
 | 
						|
use Icinga\Web\Announcement\AnnouncementIniRepository;
 | 
						|
use Icinga\Web\Controller;
 | 
						|
use Icinga\Web\RememberMe;
 | 
						|
use Icinga\Web\Session;
 | 
						|
use Icinga\Web\Widget;
 | 
						|
 | 
						|
/**
 | 
						|
 * @TODO(el): https://dev.icinga.com/issues/10646
 | 
						|
 */
 | 
						|
class ApplicationStateController extends Controller
 | 
						|
{
 | 
						|
    protected $requiresAuthentication = false;
 | 
						|
 | 
						|
    protected $autorefreshInterval = 60;
 | 
						|
 | 
						|
    public function init()
 | 
						|
    {
 | 
						|
        $this->_helper->layout->disableLayout();
 | 
						|
        $this->_helper->viewRenderer->setNoRender(true);
 | 
						|
    }
 | 
						|
 | 
						|
    public function indexAction()
 | 
						|
    {
 | 
						|
        if ($this->Auth()->isAuthenticated()) {
 | 
						|
            if (isset($_COOKIE['icingaweb2-session'])) {
 | 
						|
                $last = (int) $_COOKIE['icingaweb2-session'];
 | 
						|
            } else {
 | 
						|
                $last = 0;
 | 
						|
            }
 | 
						|
            $now = time();
 | 
						|
            if ($last + 600 < $now) {
 | 
						|
                Session::getSession()->write();
 | 
						|
                $params = session_get_cookie_params();
 | 
						|
                setcookie(
 | 
						|
                    'icingaweb2-session',
 | 
						|
                    $now,
 | 
						|
                    null,
 | 
						|
                    $params['path'],
 | 
						|
                    $params['domain'],
 | 
						|
                    $params['secure'],
 | 
						|
                    $params['httponly']
 | 
						|
                );
 | 
						|
                $_COOKIE['icingaweb2-session'] = $now;
 | 
						|
            }
 | 
						|
            $announcementCookie = new AnnouncementCookie();
 | 
						|
            $announcementRepo = new AnnouncementIniRepository();
 | 
						|
            if ($announcementCookie->getEtag() !== $announcementRepo->getEtag()) {
 | 
						|
                $announcementCookie
 | 
						|
                    ->setEtag($announcementRepo->getEtag())
 | 
						|
                    ->setNextActive($announcementRepo->findNextActive());
 | 
						|
                $this->getResponse()->setCookie($announcementCookie);
 | 
						|
                $this->getResponse()->setHeader('X-Icinga-Announcements', 'refresh', true);
 | 
						|
            } else {
 | 
						|
                $nextActive = $announcementCookie->getNextActive();
 | 
						|
                if ($nextActive && $nextActive <= $now) {
 | 
						|
                    $announcementCookie->setNextActive($announcementRepo->findNextActive());
 | 
						|
                    $this->getResponse()->setCookie($announcementCookie);
 | 
						|
                    $this->getResponse()->setHeader('X-Icinga-Announcements', 'refresh', true);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        RememberMe::removeExpired();
 | 
						|
    }
 | 
						|
 | 
						|
    public function summaryAction()
 | 
						|
    {
 | 
						|
        if ($this->Auth()->isAuthenticated()) {
 | 
						|
            $this->getResponse()->setBody((string) Widget::create('ApplicationStateMessages'));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function acknowledgeMessageAction()
 | 
						|
    {
 | 
						|
        if (! $this->Auth()->isAuthenticated()) {
 | 
						|
            $this->getResponse()
 | 
						|
                ->setHttpResponseCode(401)
 | 
						|
                ->sendHeaders();
 | 
						|
            exit;
 | 
						|
        }
 | 
						|
 | 
						|
        $this->assertHttpMethod('POST');
 | 
						|
 | 
						|
        $this->getResponse()->setHeader('X-Icinga-Container', 'ignore', true);
 | 
						|
 | 
						|
        (new AcknowledgeApplicationStateMessageForm())->handleRequest();
 | 
						|
    }
 | 
						|
}
 |