Redirect to /install when the setup.token exists but no config.ini

refs #6136
This commit is contained in:
Johannes Meyer 2014-05-13 14:27:30 +02:00
parent 4cf5fe6fdd
commit 88e451402f
2 changed files with 58 additions and 15 deletions

View File

@ -19,6 +19,15 @@ class InstallController extends ActionController
*/ */
protected $requiresAuthentication = false; protected $requiresAuthentication = false;
/**
* Whether the controller requires configuration
*
* The install wizard does not require any configuration.
*
* @var bool
*/
protected $requiresConfiguration = false;
/** /**
* Show the wizard and run the installation once its finished * Show the wizard and run the installation once its finished
*/ */

View File

@ -46,6 +46,7 @@ use Icinga\File\Pdf;
use Icinga\Exception\ProgrammingError; use Icinga\Exception\ProgrammingError;
use Icinga\Web\Session; use Icinga\Web\Session;
use Icinga\Session\SessionNamespace; use Icinga\Session\SessionNamespace;
use Icinga\Exception\NotReadableError;
/** /**
* Base class for all core action controllers * Base class for all core action controllers
@ -61,6 +62,13 @@ class ActionController extends Zend_Controller_Action
*/ */
protected $requiresAuthentication = true; protected $requiresAuthentication = true;
/**
* Whether the controller requires configuration
*
* @var bool
*/
protected $requiresConfiguration = true;
private $config; private $config;
private $configs = array(); private $configs = array();
@ -114,26 +122,24 @@ class ActionController extends Zend_Controller_Action
$this->_helper = new Zend_Controller_Action_HelperBroker($this); $this->_helper = new Zend_Controller_Action_HelperBroker($this);
$this->_helper->addPath('../application/controllers/helpers'); $this->_helper->addPath('../application/controllers/helpers');
// when noInit is set (e.g. for testing), authentication and init is skipped
if (isset($invokeArgs['noInit'])) {
// TODO: Find out whether this still makes sense?
return;
}
if ($this->_request->isXmlHttpRequest()) { if ($this->_request->isXmlHttpRequest()) {
$this->windowId = $this->_request->getHeader('X-Icinga-WindowId', null); $this->windowId = $this->_request->getHeader('X-Icinga-WindowId', null);
} }
if ($this->requiresLogin() === false) { if ($this->requiresConfig() === false) {
$this->view->tabs = new Tabs(); if ($this->requiresLogin() === false) {
$this->init(); $this->view->tabs = new Tabs();
} else { $this->init();
$url = $this->getRequestUrl(); } else {
if ($url === 'default/index/index') { $url = $this->getRequestUrl();
// TODO: We need our own router :p if ($url === 'default/index/index') {
$url = 'dashboard'; // TODO: We need our own router :p
$url = 'dashboard';
}
$this->redirectToLogin($url);
} }
$this->redirectToLogin($url); } else {
$this->redirectNow(Url::fromPath('install'));
} }
} }
@ -224,11 +230,39 @@ class ActionController extends Zend_Controller_Action
} }
} }
/**
* Check whether the controller requires configuration. That is when no configuration
* is available and when it is possible to setup the configuration
*
* @return bool
*
* @see requiresConfiguration
*/
protected function requiresConfig()
{
if (!$this->requiresConfiguration) {
return false;
}
if (file_exists(Config::$configDir . '/setup.token')) {
try {
$config = Config::app()->toArray();
} catch (NotReadableError $e) {
return true;
}
return empty($config);
} else {
return false;
}
}
/** /**
* Check whether the controller requires a login. That is when the controller requires authentication and the * Check whether the controller requires a login. That is when the controller requires authentication and the
* user is currently not authenticated * user is currently not authenticated
* *
* @return bool * @return bool
*
* @see requiresAuthentication * @see requiresAuthentication
*/ */
protected function requiresLogin() protected function requiresLogin()