Fixed error logging and refactored ErrorController to get invoked

correctly when using API key authentication

* Along with the bugfixes, backported improved ErrorController from upstream branch,
  including style improvements.
This commit is contained in:
Albert Santoni 2015-03-20 17:20:34 -04:00
parent ddd75cb8e3
commit 32aa962138
10 changed files with 166 additions and 48 deletions

View file

@ -1,26 +1,40 @@
<?php
class ErrorController extends Zend_Controller_Action {
class ErrorController extends Zend_Controller_Action
{
public function errorAction()
public function init()
{
//The default layout includes the Dashboard header, which may contain private information.
//We cannot show that.
$this->view->layout()->disableLayout();
$this->setupCSS();
}
public function errorAction() {
$errors = $this->_getParam('error_handler');
switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
if ($errors) {
// log error message and stack trace
Logging::error($errors->exception->getMessage());
Logging::error($errors->exception->getTraceAsString());
// 404 error -- controller or action not found
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = _('Page not found');
break;
default:
// application error
$this->getResponse()->setHttpResponseCode(500);
$this->view->message = _('Application error');
break;
switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE :
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER :
$this->error404Action();
break;
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION :
$this->error400Action();
break;
default :
$this->error500Action();
break;
}
} else {
$exceptions = $this->_getAllParams();
Logging::error($exceptions);
$this->error500Action();
return;
}
// Log exception, if logger available
@ -33,11 +47,17 @@ class ErrorController extends Zend_Controller_Action
$this->view->exception = $errors->exception;
}
$this->view->request = $errors->request;
$this->view->request = $errors->request;
}
public function getLog()
private function setupCSS()
{
$CC_CONFIG = Config::getConfig();
$staticBaseDir = Application_Common_OsPath::formatDirectoryWithDirectorySeparators($CC_CONFIG['staticBaseDir']);
$this->view->headLink()->appendStylesheet($staticBaseDir . 'css/styles.css?' . $CC_CONFIG['airtime_version']);
}
public function getLog() {
$bootstrap = $this->getInvokeArg('bootstrap');
if (!$bootstrap->hasPluginResource('Log')) {
return false;
@ -47,9 +67,43 @@ class ErrorController extends Zend_Controller_Action
return $log;
}
public function deniedAction()
{
// action body
/**
* 404 error - route or controller
*/
public function error404Action() {
$this->_helper->viewRenderer('error-404');
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = _('Page not found.');
}
/**
* 400 error - no such action
*/
public function error400Action() {
$this->_helper->viewRenderer('error-400');
$this->getResponse()->setHttpResponseCode(400);
$this->view->message = _('The requested action is not supported.');
}
/**
* 403 error - permission denied
*/
public function error403Action() {
$this->_helper->viewRenderer('error-403');
$this->getResponse()->setHttpResponseCode(403);
$this->view->message = _('You do not have permission to access this resource.');
}
/**
* 500 error - internal server error
*/
public function error500Action() {
$this->_helper->viewRenderer('error-500');
$this->getResponse()->setHttpResponseCode(500);
$this->view->message = _('An internal application error has occurred.');
}
}