]> source.dussan.org Git - nextcloud-server.git/commitdiff
clean up usage of DatabaseSetupException and catch Exceptions in entrypoints
authorJörn Friedrich Dreyer <jfd@butonic.de>
Mon, 10 Jun 2013 11:45:19 +0000 (13:45 +0200)
committerJörn Friedrich Dreyer <jfd@butonic.de>
Mon, 10 Jun 2013 11:45:19 +0000 (13:45 +0200)
cron.php
index.php
lib/response.php
lib/setup.php
public.php
remote.php
status.php

index 95cedf8bf4c8852bf2f22c01b6474f9cb6267cb8..fbea7f26aed2080e552e817a7df84850a9051f33 100644 (file)
--- a/cron.php
+++ b/cron.php
@@ -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
index bf0b287a64b60064248386a7c9e822bfc68d6b6d..a064aa5c76f21a9ddc29c581f01372eec5f4939d 100755 (executable)
--- a/index.php
+++ b/index.php
 
 $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
index 49d79fda7099dad395847c3cd68de94a67d9518e..674176d078b2ffa34b78808560b77c13990b7a86 100644 (file)
@@ -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);
        }
index a63cc664dbcabebb7ed0ec3fb18e4e3956228700..71a2d13937e70e1af668a30f1f2ec8cbd7d9026f 100644 (file)
@@ -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);
index 3d7fd378af402e0f739bd86eabf8a656ec43eec9..0154b59cce30e7af1600d534d2f3b9d704942337 100644 (file)
@@ -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
index 7738de04f6000ee7c25d93dab2152efc4a72d83e..ec0f2ecef7254b097fd6051ddb071eec93da154b 100644 (file)
@@ -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
index 9d6ac87c671a3069f5acaa72abf003c04273c07d..bac01c11b288bc9dd58161d8e808b8c9380db490 100644 (file)
 
 $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