diff options
author | Jörn Friedrich Dreyer <jfd@butonic.de> | 2013-06-10 13:45:19 +0200 |
---|---|---|
committer | Jörn Friedrich Dreyer <jfd@butonic.de> | 2013-06-10 13:45:19 +0200 |
commit | 8dc6bdd96b9088b87fe8d11346338343135c77e7 (patch) | |
tree | 2f969c8b9a0572d7e4648c9ad8ff2524bdaf27af | |
parent | c0bdbd9d81eb22ded95cd7ea9b26a0c36cfa1be0 (diff) | |
download | nextcloud-server-8dc6bdd96b9088b87fe8d11346338343135c77e7.tar.gz nextcloud-server-8dc6bdd96b9088b87fe8d11346338343135c77e7.zip |
clean up usage of DatabaseSetupException and catch Exceptions in entrypoints
-rw-r--r-- | cron.php | 120 | ||||
-rwxr-xr-x | index.php | 13 | ||||
-rw-r--r-- | lib/response.php | 4 | ||||
-rw-r--r-- | lib/setup.php | 24 | ||||
-rw-r--r-- | public.php | 42 | ||||
-rw-r--r-- | remote.php | 77 | ||||
-rw-r--r-- | status.php | 23 |
7 files changed, 171 insertions, 132 deletions
@@ -44,75 +44,81 @@ function handleUnexpectedShutdown() { } } -require_once 'lib/base.php'; +try { -session_write_close(); + require_once 'lib/base.php'; -// Don't do anything if ownCloud has not been installed -if (!OC_Config::getValue('installed', false)) { - exit(0); -} - -// Handle unexpected errors -register_shutdown_function('handleUnexpectedShutdown'); + session_write_close(); -// Delete temp folder -OC_Helper::cleanTmpNoClean(); - -// Exit if background jobs are disabled! -$appmode = OC_BackgroundJob::getExecutionType(); -if ($appmode == 'none') { - TemporaryCronClass::$sent = true; - if (OC::$CLI) { - echo 'Background Jobs are disabled!' . PHP_EOL; - } else { - OC_JSON::error(array('data' => array('message' => 'Background jobs disabled!'))); + // Don't do anything if ownCloud has not been installed + if (!OC_Config::getValue('installed', false)) { + exit(0); } - exit(1); -} -if (OC::$CLI) { - // Create lock file first - TemporaryCronClass::$lockfile = OC_Config::getValue("datadirectory", OC::$SERVERROOT . '/data') . '/cron.lock'; + // Handle unexpected errors + register_shutdown_function('handleUnexpectedShutdown'); - // We call ownCloud from the CLI (aka cron) - if ($appmode != 'cron') { - // Use cron in feature! - OC_BackgroundJob::setExecutionType('cron'); - } + // Delete temp folder + OC_Helper::cleanTmpNoClean(); - // check if backgroundjobs is still running - if (file_exists(TemporaryCronClass::$lockfile)) { - TemporaryCronClass::$keeplock = true; + // Exit if background jobs are disabled! + $appmode = OC_BackgroundJob::getExecutionType(); + if ($appmode == 'none') { TemporaryCronClass::$sent = true; - echo "Another instance of cron.php is still running!"; + if (OC::$CLI) { + echo 'Background Jobs are disabled!' . PHP_EOL; + } else { + OC_JSON::error(array('data' => array('message' => 'Background jobs disabled!'))); + } exit(1); } - // Create a lock file - touch(TemporaryCronClass::$lockfile); + if (OC::$CLI) { + // Create lock file first + TemporaryCronClass::$lockfile = OC_Config::getValue("datadirectory", OC::$SERVERROOT . '/data') . '/cron.lock'; - // Work - $jobList = new \OC\BackgroundJob\JobList(); - $jobs = $jobList->getAll(); - foreach ($jobs as $job) { - $job->execute($jobList); - } -} else { - // We call cron.php from some website - if ($appmode == 'cron') { - // Cron is cron :-P - OC_JSON::error(array('data' => array('message' => 'Backgroundjobs are using system cron!'))); - } else { - // Work and success :-) + // We call ownCloud from the CLI (aka cron) + if ($appmode != 'cron') { + // Use cron in feature! + OC_BackgroundJob::setExecutionType('cron'); + } + + // check if backgroundjobs is still running + if (file_exists(TemporaryCronClass::$lockfile)) { + TemporaryCronClass::$keeplock = true; + TemporaryCronClass::$sent = true; + echo "Another instance of cron.php is still running!"; + exit(1); + } + + // Create a lock file + touch(TemporaryCronClass::$lockfile); + + // Work $jobList = new \OC\BackgroundJob\JobList(); - $job = $jobList->getNext(); - $job->execute($jobList); - $jobList->setLastJob($job); - OC_JSON::success(); + $jobs = $jobList->getAll(); + foreach ($jobs as $job) { + $job->execute($jobList); + } + } else { + // We call cron.php from some website + if ($appmode == 'cron') { + // Cron is cron :-P + OC_JSON::error(array('data' => array('message' => 'Backgroundjobs are using system cron!'))); + } else { + // Work and success :-) + $jobList = new \OC\BackgroundJob\JobList(); + $job = $jobList->getNext(); + $job->execute($jobList); + $jobList->setLastJob($job); + OC_JSON::success(); + } } -} -// done! -TemporaryCronClass::$sent = true; -exit(); + // done! + TemporaryCronClass::$sent = true; + exit(); + +} catch (Exception $ex) { + \OCP\Util::writeLog('cron', $ex->getMessage(), \OCP\Util::FATAL); +}
\ No newline at end of file diff --git a/index.php b/index.php index bf0b287a64b..a064aa5c76f 100755 --- a/index.php +++ b/index.php @@ -23,6 +23,15 @@ $RUNTIME_NOAPPS = true; //no apps, yet -require_once 'lib/base.php'; +try { + + require_once 'lib/base.php'; -OC::handleRequest(); + OC::handleRequest(); + +} catch (Exception $ex) { + //show the user a detailed error page + OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR); + \OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL); + OC_Template::printExceptionErrorPage($ex); +}
\ No newline at end of file diff --git a/lib/response.php b/lib/response.php index 49d79fda709..674176d078b 100644 --- a/lib/response.php +++ b/lib/response.php @@ -11,6 +11,7 @@ class OC_Response { const STATUS_NOT_MODIFIED = 304; const STATUS_TEMPORARY_REDIRECT = 307; const STATUS_NOT_FOUND = 404; + const STATUS_INTERNAL_SERVER_ERROR = 500; /** * @brief Enable response caching by sending correct HTTP headers @@ -70,6 +71,9 @@ class OC_Response { case self::STATUS_NOT_FOUND; $status = $status . ' Not Found'; break; + case self::STATUS_INTERNAL_SERVER_ERROR; + $status = $status . ' Internal Server Error'; + break; } header($protocol.' '.$status); } diff --git a/lib/setup.php b/lib/setup.php index a63cc664dbc..71a2d13937e 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -106,12 +106,6 @@ class OC_Setup { 'hint' => $e->getHint() ); return($error); - } catch (Exception $e) { - $error[] = array( - 'error' => $e->getMessage(), - 'hint' => '' - ); - return($error); } } elseif($dbtype == 'pgsql') { @@ -127,7 +121,7 @@ class OC_Setup { try { self::setupPostgreSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username); - } catch (Exception $e) { + } catch (DatabaseSetupException $e) { $error[] = array( 'error' => $l->t('PostgreSQL username and/or password not valid'), 'hint' => $l->t('You need to enter either an existing account or the administrator.') @@ -150,7 +144,7 @@ class OC_Setup { try { self::setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace, $username); - } catch (Exception $e) { + } catch (DatabaseSetupException $e) { $error[] = array( 'error' => $l->t('Oracle connection could not be established'), 'hint' => $e->getMessage().' Check environment: ORACLE_HOME='.getenv('ORACLE_HOME') @@ -177,7 +171,7 @@ class OC_Setup { try { self::setupMSSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix); - } catch (Exception $e) { + } catch (DatabaseSetupException $e) { $error[] = array( 'error' => 'MS SQL username and/or password not valid', 'hint' => 'You need to enter either an existing account or the administrator.' @@ -326,7 +320,7 @@ class OC_Setup { $connection_string = "host='$e_host' dbname=postgres user='$e_user' password='$e_password'"; $connection = @pg_connect($connection_string); if(!$connection) { - throw new Exception($l->t('PostgreSQL username and/or password not valid')); + throw new DatabaseSetupException($l->t('PostgreSQL username and/or password not valid')); } $e_user = pg_escape_string($dbuser); //check for roles creation rights in postgresql @@ -371,7 +365,7 @@ class OC_Setup { $connection_string = "host='$e_host' dbname='$e_dbname' user='$e_user' password='$e_password'"; $connection = @pg_connect($connection_string); if(!$connection) { - throw new Exception($l->t('PostgreSQL username and/or password not valid')); + throw new DatabaseSetupException($l->t('PostgreSQL username and/or password not valid')); } $query = "select count(*) FROM pg_class WHERE relname='{$dbtableprefix}users' limit 1"; $result = pg_query($connection, $query); @@ -461,9 +455,9 @@ class OC_Setup { if(!$connection) { $e = oci_error(); if (is_array ($e) && isset ($e['message'])) { - throw new Exception($e['message']); + throw new DatabaseSetupException($e['message']); } - throw new Exception($l->t('Oracle username and/or password not valid')); + throw new DatabaseSetupException($l->t('Oracle username and/or password not valid')); } //check for roles creation rights in oracle @@ -530,7 +524,7 @@ class OC_Setup { } $connection = @oci_connect($dbuser, $dbpass, $easy_connect_string); if(!$connection) { - throw new Exception($l->t('Oracle username and/or password not valid')); + throw new DatabaseSetupException($l->t('Oracle username and/or password not valid')); } $query = "SELECT count(*) FROM user_tables WHERE table_name = :un"; $stmt = oci_parse($connection, $query); @@ -641,7 +635,7 @@ class OC_Setup { } else { $entry = ''; } - throw new Exception($l->t('MS SQL username and/or password not valid: %s', array($entry))); + throw new DatabaseSetupException($l->t('MS SQL username and/or password not valid: %s', array($entry))); } OC_Config::setValue('dbuser', $dbuser); diff --git a/public.php b/public.php index 3d7fd378af4..0154b59cce3 100644 --- a/public.php +++ b/public.php @@ -1,21 +1,31 @@ <?php $RUNTIME_NOAPPS = true; -require_once 'lib/base.php'; -OC::checkMaintenanceMode(); -if (!isset($_GET['service'])) { - header('HTTP/1.0 404 Not Found'); - exit; -} -$file = OCP\CONFIG::getAppValue('core', 'public_' . strip_tags($_GET['service'])); -if(is_null($file)) { - header('HTTP/1.0 404 Not Found'); - exit; -} -$parts=explode('/', $file, 2); -$app=$parts[0]; +try { -OC_Util::checkAppEnabled($app); -OC_App::loadApp($app); + require_once 'lib/base.php'; + OC::checkMaintenanceMode(); + if (!isset($_GET['service'])) { + header('HTTP/1.0 404 Not Found'); + exit; + } + $file = OCP\CONFIG::getAppValue('core', 'public_' . strip_tags($_GET['service'])); + if(is_null($file)) { + header('HTTP/1.0 404 Not Found'); + exit; + } -require_once OC_App::getAppPath($app) .'/'. $parts[1]; + $parts=explode('/', $file, 2); + $app=$parts[0]; + + OC_Util::checkAppEnabled($app); + OC_App::loadApp($app); + + require_once OC_App::getAppPath($app) .'/'. $parts[1]; + +} catch (Exception $ex) { + //show the user a detailed error page + OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR); + \OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL); + OC_Template::printExceptionErrorPage($ex); +}
\ No newline at end of file diff --git a/remote.php b/remote.php index 7738de04f60..ec0f2ecef72 100644 --- a/remote.php +++ b/remote.php @@ -1,40 +1,49 @@ <?php $RUNTIME_NOAPPS = true; -require_once 'lib/base.php'; -$path_info = OC_Request::getPathInfo(); -if ($path_info === false || $path_info === '') { - OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND); - exit; -} -if (!$pos = strpos($path_info, '/', 1)) { - $pos = strlen($path_info); -} -$service=substr($path_info, 1, $pos-1); -$file = OC_AppConfig::getValue('core', 'remote_' . $service); +try { -if(is_null($file)) { - OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND); - exit; -} + require_once 'lib/base.php'; + $path_info = OC_Request::getPathInfo(); + if ($path_info === false || $path_info === '') { + OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND); + exit; + } + if (!$pos = strpos($path_info, '/', 1)) { + $pos = strlen($path_info); + } + $service=substr($path_info, 1, $pos-1); -$file=ltrim($file, '/'); + $file = OC_AppConfig::getValue('core', 'remote_' . $service); -$parts=explode('/', $file, 2); -$app=$parts[0]; -switch ($app) { - case 'core': - $file = OC::$SERVERROOT .'/'. $file; - break; - default: - OC_Util::checkAppEnabled($app); - OC_App::loadApp($app); - if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - $file = OC_App::getAppPath($app) .'/'. $parts[1]; - }else{ - $file = '/' . OC_App::getAppPath($app) .'/'. $parts[1]; - } - break; -} -$baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/'; -require_once $file; + if(is_null($file)) { + OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND); + exit; + } + + $file=ltrim($file, '/'); + + $parts=explode('/', $file, 2); + $app=$parts[0]; + switch ($app) { + case 'core': + $file = OC::$SERVERROOT .'/'. $file; + break; + default: + OC_Util::checkAppEnabled($app); + OC_App::loadApp($app); + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $file = OC_App::getAppPath($app) .'/'. $parts[1]; + }else{ + $file = '/' . OC_App::getAppPath($app) .'/'. $parts[1]; + } + break; + } + $baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/'; + require_once $file; + +} catch (Exception $ex) { + OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR); + \OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL); + OC_Template::printExceptionErrorPage($ex); +}
\ No newline at end of file diff --git a/status.php b/status.php index 9d6ac87c671..bac01c11b28 100644 --- a/status.php +++ b/status.php @@ -23,13 +23,20 @@ $RUNTIME_NOAPPS = true; //no apps, yet -require_once 'lib/base.php'; +try { -if(OC_Config::getValue('installed')==1) $installed='true'; else $installed='false'; -$values=array( - 'installed'=>$installed, - 'version'=>implode('.', OC_Util::getVersion()), - 'versionstring'=>OC_Util::getVersionString(), - 'edition'=>OC_Util::getEditionString()); + require_once 'lib/base.php'; -echo(json_encode($values)); + if(OC_Config::getValue('installed')==1) $installed='true'; else $installed='false'; + $values=array( + 'installed'=>$installed, + 'version'=>implode('.', OC_Util::getVersion()), + 'versionstring'=>OC_Util::getVersionString(), + 'edition'=>OC_Util::getEditionString()); + + echo(json_encode($values)); + +} catch (Exception $ex) { + OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR); + \OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL); +}
\ No newline at end of file |