mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-11-04 13:14:41 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/* Icinga Web 2 | (c) 2013 Icinga Development Team | GPLv2+ */
 | 
						|
 | 
						|
namespace Icinga\Controllers;
 | 
						|
 | 
						|
use Icinga\Application\Icinga;
 | 
						|
use Icinga\Forms\Authentication\LoginForm;
 | 
						|
use Icinga\Web\Controller;
 | 
						|
use Icinga\Web\Helper\CookieHelper;
 | 
						|
use Icinga\Web\Url;
 | 
						|
 | 
						|
/**
 | 
						|
 * Application wide controller for authentication
 | 
						|
 */
 | 
						|
class AuthenticationController extends Controller
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * {@inheritdoc}
 | 
						|
     */
 | 
						|
    protected $requiresAuthentication = false;
 | 
						|
 | 
						|
    /**
 | 
						|
     * {@inheritdoc}
 | 
						|
     */
 | 
						|
    protected $innerLayout = 'inline';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Log into the application
 | 
						|
     */
 | 
						|
    public function loginAction()
 | 
						|
    {
 | 
						|
        $icinga = Icinga::app();
 | 
						|
        if (($requiresSetup = $icinga->requiresSetup()) && $icinga->setupTokenExists()) {
 | 
						|
            $this->redirectNow(Url::fromPath('setup'));
 | 
						|
        }
 | 
						|
        $form = new LoginForm();
 | 
						|
        if ($this->Auth()->isAuthenticated()) {
 | 
						|
            $this->redirectNow($form->getRedirectUrl());
 | 
						|
        }
 | 
						|
        if (! $requiresSetup) {
 | 
						|
            $cookies = new CookieHelper($this->getRequest());
 | 
						|
            if (! $cookies->isSupported()) {
 | 
						|
                $this
 | 
						|
                    ->getResponse()
 | 
						|
                    ->setBody("Cookies must be enabled to run this application.\n")
 | 
						|
                    ->setHttpResponseCode(403)
 | 
						|
                    ->sendResponse();
 | 
						|
                exit;
 | 
						|
            }
 | 
						|
            $form->handleRequest();
 | 
						|
        }
 | 
						|
        $this->view->form = $form;
 | 
						|
        $this->view->title = $this->translate('Icinga Web 2 Login');
 | 
						|
        $this->view->requiresSetup = $requiresSetup;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Log out the current user
 | 
						|
     */
 | 
						|
    public function logoutAction()
 | 
						|
    {
 | 
						|
        $auth = $this->Auth();
 | 
						|
        if (! $auth->isAuthenticated()) {
 | 
						|
            $this->redirectToLogin();
 | 
						|
        }
 | 
						|
        // Get info whether the user is externally authenticated before removing authorization which destroys the
 | 
						|
        // session and the user object
 | 
						|
        $isExternalUser = $auth->getUser()->isExternalUser();
 | 
						|
        $auth->removeAuthorization();
 | 
						|
        if ($isExternalUser) {
 | 
						|
            $this->getResponse()->setHttpResponseCode(401);
 | 
						|
        } else {
 | 
						|
            $this->redirectToLogin();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |