* @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2 * @author Icinga Development Team * */ // {{{ICINGA_LICENSE_HEADER}}} # namespace Icinga\Application\Controllers; use \Exception; use Icinga\Web\Controller\ActionController; use Icinga\Authentication\Credential; use Icinga\Authentication\Manager as AuthManager; use Icinga\Form\Authentication\LoginForm; /** * Application wide controller for authentication */ class AuthenticationController extends ActionController { /** * This controller does not require authentication * * @var bool */ protected $requiresAuthentication = false; /** * Log into the application */ public function loginAction() { $this->_helper->layout->setLayout('login'); $this->view->form = new LoginForm(); $this->view->form->setRequest($this->_request); $this->view->title = 'Icinga Web Login'; try { $redirectUrl = $this->_request->getParam('redirect', 'index?_render=body'); $auth = AuthManager::getInstance(); if ($auth->isAuthenticated()) { $this->redirectNow($redirectUrl); } if ($this->view->form->isSubmittedAndValid()) { $credentials = new Credential( $this->view->form->getValue('username'), $this->view->form->getValue('password') ); if (!$auth->authenticate($credentials)) { $this->view->form->getElement('password') ->addError(t('Please provide a valid username and password')); } else { $this->redirectNow($redirectUrl); } } } catch (Exception $e) { $this->view->errorInfo = $e->getMessage(); } } /** * Log out the current user */ public function logoutAction() { $auth = AuthManager::getInstance(); $auth->removeAuthorization(); if ($auth->isAuthenticatedFromRemoteUser()) { $this->_helper->layout->setLayout('login'); $this->_response->setHttpResponseCode(401); } else { $this->_helper->layout->setLayout('inline'); $this->redirectToLogin(); } } } // @codingStandardsIgnoreEnd