X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=index.php;h=dac5a8071a17be2227e0e9b49b3205df25bcaa6c;hb=60bf87bb34c4c0216fbbe42458d194e1e76c0aaa;hp=cddd1103412092ecb4aae9f226fe963acc9eb65b;hpb=eb4c69ef27ebeba69339098139369b3d48b8a946;p=quix0rs-gnu-social.git diff --git a/index.php b/index.php index cddd110341..dac5a8071a 100644 --- a/index.php +++ b/index.php @@ -1,18 +1,18 @@ . */ @@ -20,15 +20,68 @@ define('INSTALLDIR', dirname(__FILE__)); define('LACONICA', true); -require_once(INSTALLDIR . "/lib/common.php"); +require_once INSTALLDIR . '/lib/common.php'; + +// get and cache current user + +$user = common_current_user(); + +// initialize language env + +common_init_language(); $action = $_REQUEST['action']; + +if (!$action || !preg_match('/^[a-zA-Z0-9_-]*$/', $action)) { + common_redirect(common_local_url('public')); +} + +// If the site is private, and they're not on one of the "public" +// parts of the site, redirect to login + +if (!$user && common_config('site', 'private') && + !in_array($action, array('login', 'openidlogin', 'finishopenidlogin', + 'recoverpassword', 'api', 'doc', 'register'))) { + common_redirect(common_local_url('login')); +} + $actionfile = INSTALLDIR."/actions/$action.php"; -if (file_exists($actionfile)) { - require_once($actionfile); - $action_class = ucfirst($action) . "Action"; - call_user_func(array($action_class, 'handle'), $_REQUEST); +if (!file_exists($actionfile)) { + $cac = new ClientErrorAction(_('Unknown action'), 404); + $cac->showPage(); } else { - common_user_error(_t('Unknown action')); -} \ No newline at end of file + + include_once $actionfile; + + $action_class = ucfirst($action).'Action'; + + $action_obj = new $action_class(); + + if ($config['db']['mirror'] && $action_obj->isReadOnly()) { + if (is_array($config['db']['mirror'])) { + // "load balancing", ha ha + $k = array_rand($config['db']['mirror']); + + $mirror = $config['db']['mirror'][$k]; + } else { + $mirror = $config['db']['mirror']; + } + $config['db']['database'] = $mirror; + } + + try { + if ($action_obj->prepare($_REQUEST)) { + $action_obj->handle($_REQUEST); + } + } catch (ClientException $cex) { + $cac = new ClientErrorAction($cex->getMessage(), $cex->getCode()); + $cac->showPage(); + } catch (ServerException $sex) { // snort snort guffaw + $sac = new ServerErrorAction($sex->getMessage(), $sex->getCode()); + $sac->showPage(); + } catch (Exception $ex) { + $sac = new ServerErrorAction($ex->getMessage()); + $sac->showPage(); + } +}