diff --git a/index.php b/index.php index 387b642e2c..075ee96768 100644 --- a/index.php +++ b/index.php @@ -47,7 +47,11 @@ if (!$user && common_config('site', 'private') && $actionfile = INSTALLDIR."/actions/$action.php"; -if (file_exists($actionfile)) { +if (!file_exists($actionfile)) { + $cac = new ClientErrorAction(); + $cac->handle(array('code' => 404, + 'message' => _('Unknown action'))); +} else { include_once $actionfile; @@ -66,9 +70,22 @@ if (file_exists($actionfile)) { } $config['db']['database'] = $mirror; } - if (call_user_func(array($action_obj, 'prepare'), $_REQUEST)) { - call_user_func(array($action_obj, 'handle'), $_REQUEST); + + try { + if ($action_obj->prepare($_REQUEST)) { + $action_obj->handle($_REQUEST); + } + } catch (ClientException cex) { + $cac = new ClientErrorAction(); + $cac->handle(array('code' => $cex->code, + 'message' => $cex->message)); + } catch (ServerException sex) { // snort snort guffaw + $sac = new ServerErrorAction(); + $sac->handle(array('code' => $sex->code, + 'message' => $sex->message)); + } catch (Exception ex) { + $sac = new ServerErrorAction(); + $sac->handle(array('code' => 500, + 'message' => $ex->message)); } -} else { - common_user_error(_('Unknown action')); -} \ No newline at end of file +} diff --git a/lib/action.php b/lib/action.php index c4172ada11..9fbabb4fcb 100644 --- a/lib/action.php +++ b/lib/action.php @@ -789,11 +789,12 @@ class Action extends HTMLOutputter // lawsuit * * @return nothing */ + function serverError($msg, $code=500) { $action = $this->trimmed('action'); common_debug("Server error '$code' on '$action': $msg", __FILE__); - common_server_error($msg, $code); + throw new ServerException($msg, $code); } /** @@ -804,11 +805,12 @@ class Action extends HTMLOutputter // lawsuit * * @return nothing */ + function clientError($msg, $code=400) { $action = $this->trimmed('action'); common_debug("User error '$code' on '$action': $msg", __FILE__); - common_user_error($msg, $code); + throw new ClientException($msg, $code); } /**