| 
									
										
										
										
											2008-05-07 12:48:07 -04:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2008-12-20 19:23:32 -05:00
										 |  |  | /** | 
					
						
							| 
									
										
										
										
											2009-08-25 18:14:12 -04:00
										 |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * Copyright (C) 2008, 2009, StatusNet, Inc. | 
					
						
							| 
									
										
										
										
											2008-05-20 15:14:12 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2008-05-14 15:26:48 -04:00
										 |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2008-05-20 15:14:12 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2008-05-14 15:26:48 -04:00
										 |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							| 
									
										
										
										
											2008-05-20 15:14:12 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2008-05-14 15:26:48 -04:00
										 |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							| 
									
										
										
										
											2009-09-15 22:30:52 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2009-09-13 20:15:21 +12:00
										 |  |  |  * @category StatusNet | 
					
						
							|  |  |  |  * @package  StatusNet | 
					
						
							| 
									
										
										
										
											2009-09-19 12:28:08 +12:00
										 |  |  |  * @author   Brenda Wallace <shiny@cpan.org> | 
					
						
							| 
									
										
										
										
											2010-06-08 16:27:10 +12:00
										 |  |  |  * @author   Brion Vibber <brion@pobox.com> | 
					
						
							| 
									
										
										
										
											2009-09-19 12:28:08 +12:00
										 |  |  |  * @author   Christopher Vollick <psycotica0@gmail.com> | 
					
						
							| 
									
										
										
										
											2009-09-17 20:15:15 +12:00
										 |  |  |  * @author   CiaranG <ciaran@ciarang.com> | 
					
						
							| 
									
										
										
										
											2009-09-19 12:28:08 +12:00
										 |  |  |  * @author   Craig Andrews <candrews@integralblue.com> | 
					
						
							| 
									
										
										
										
											2009-09-17 20:15:15 +12:00
										 |  |  |  * @author   Evan Prodromou <evan@controlezvous.ca> | 
					
						
							| 
									
										
										
										
											2009-09-19 12:28:08 +12:00
										 |  |  |  * @author   Gina Haeussge <osd@foosel.net> | 
					
						
							| 
									
										
										
										
											2010-06-08 16:27:10 +12:00
										 |  |  |  * @author   James Walker <walkah@walkah.net> | 
					
						
							| 
									
										
										
										
											2009-09-17 20:15:15 +12:00
										 |  |  |  * @author   Jeffery To <jeffery.to@gmail.com> | 
					
						
							|  |  |  |  * @author   Mike Cochrane <mikec@mikenz.geek.nz> | 
					
						
							|  |  |  |  * @author   Robin Millette <millette@controlyourself.ca> | 
					
						
							| 
									
										
										
										
											2009-09-19 12:28:08 +12:00
										 |  |  |  * @author   Sarven Capadisli <csarven@controlyourself.ca> | 
					
						
							| 
									
										
										
										
											2009-09-17 20:15:15 +12:00
										 |  |  |  * @author   Tom Adams <tom@holizz.com> | 
					
						
							| 
									
										
										
										
											2010-06-08 16:27:10 +12:00
										 |  |  |  * @author   Zach Copley <zach@status.net> | 
					
						
							| 
									
										
										
										
											2010-05-27 18:26:47 -04:00
										 |  |  |  * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org | 
					
						
							| 
									
										
										
										
											2010-01-11 18:31:49 -08:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2009-09-19 12:28:08 +12:00
										 |  |  |  * @license  GNU Affero General Public License http://www.gnu.org/licenses/ | 
					
						
							| 
									
										
										
										
											2008-05-14 15:26:48 -04:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2008-05-07 12:48:07 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-31 13:59:38 -05:00
										 |  |  | $_startTime = microtime(true); | 
					
						
							| 
									
										
										
										
											2011-01-31 13:12:56 -08:00
										 |  |  | $_perfCounters = array(); | 
					
						
							| 
									
										
										
										
											2011-01-31 13:59:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-28 20:31:46 +01:00
										 |  |  | // We provide all our dependencies through our own autoload.
 | 
					
						
							|  |  |  | // This will probably be configurable for distributing with
 | 
					
						
							|  |  |  | // system packages (like with Debian apt etc. where included
 | 
					
						
							|  |  |  | // libraries are maintained through repositories)
 | 
					
						
							|  |  |  | set_include_path('.');  // mainly fixes an issue where /usr/share/{pear,php*}/DB/DataObject.php is _old_ on various systems...
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-07 12:48:07 -04:00
										 |  |  | define('INSTALLDIR', dirname(__FILE__)); | 
					
						
							| 
									
										
										
										
											2013-09-18 00:35:49 +02:00
										 |  |  | define('GNUSOCIAL', true); | 
					
						
							|  |  |  | define('STATUSNET', true);  // compatibility
 | 
					
						
							| 
									
										
										
										
											2008-05-07 12:48:07 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  | $user = null; | 
					
						
							|  |  |  | $action = null; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-11 14:45:06 -05:00
										 |  |  | function getPath($req) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-10-03 09:15:53 -04:00
										 |  |  |     $p = null; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-20 16:44:56 -05:00
										 |  |  |     if ((common_config('site', 'fancy') || !array_key_exists('PATH_INFO', $_SERVER)) | 
					
						
							| 
									
										
										
										
											2009-09-13 20:31:19 +12:00
										 |  |  |         && array_key_exists('p', $req) | 
					
						
							| 
									
										
										
										
											2009-09-13 20:32:58 +12:00
										 |  |  |     ) { | 
					
						
							| 
									
										
										
										
											2011-10-03 09:15:53 -04:00
										 |  |  |         $p = $req['p']; | 
					
						
							| 
									
										
										
										
											2009-02-20 16:44:56 -05:00
										 |  |  |     } else if (array_key_exists('PATH_INFO', $_SERVER)) { | 
					
						
							| 
									
										
										
										
											2009-09-19 15:06:16 -04:00
										 |  |  |         $path = $_SERVER['PATH_INFO']; | 
					
						
							|  |  |  |         $script = $_SERVER['SCRIPT_NAME']; | 
					
						
							|  |  |  |         if (substr($path, 0, mb_strlen($script)) == $script) { | 
					
						
							| 
									
										
										
										
											2011-10-03 09:26:42 -04:00
										 |  |  |             $p = substr($path, mb_strlen($script) + 1); | 
					
						
							| 
									
										
										
										
											2009-09-19 15:06:16 -04:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2011-10-03 09:15:53 -04:00
										 |  |  |             $p = $path; | 
					
						
							| 
									
										
										
										
											2009-09-19 15:06:16 -04:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2011-10-03 09:15:53 -04:00
										 |  |  |         $p = null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Trim all initial '/'
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-03 09:26:42 -04:00
										 |  |  |     $p = ltrim($p, '/'); | 
					
						
							| 
									
										
										
										
											2011-10-03 09:15:53 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return $p; | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-02-09 11:46:26 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-03 17:40:53 +13:00
										 |  |  | /** | 
					
						
							|  |  |  |  * logs and then displays error messages | 
					
						
							| 
									
										
										
										
											2009-10-03 17:48:38 +13:00
										 |  |  |  * | 
					
						
							|  |  |  |  * @return void | 
					
						
							| 
									
										
										
										
											2009-10-03 17:40:53 +13:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-02-11 14:45:06 -05:00
										 |  |  | function handleError($error) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |     try { | 
					
						
							| 
									
										
										
										
											2009-02-11 14:45:06 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |         if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) { | 
					
						
							|  |  |  |             return; | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-03-16 16:23:19 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-26 14:53:12 +01:00
										 |  |  |         $logmsg = "Exception thrown: " . _ve($error->getMessage()); | 
					
						
							| 
									
										
										
										
											2016-03-27 16:36:45 +02:00
										 |  |  |         if ($error instanceof PEAR_Exception && common_config('log', 'debugtrace')) { | 
					
						
							| 
									
										
										
										
											2016-02-26 14:53:12 +01:00
										 |  |  |             $logmsg .= " PEAR: ". $error->toText(); | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |         } | 
					
						
							|  |  |  |         // DB queries often end up with a lot of newlines; merge to a single line
 | 
					
						
							|  |  |  |         // for easier grepability...
 | 
					
						
							|  |  |  |         $logmsg = str_replace("\n", " ", $logmsg); | 
					
						
							|  |  |  |         common_log(LOG_ERR, $logmsg); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // @fixme backtrace output should be consistent with exception handling
 | 
					
						
							| 
									
										
										
										
											2016-03-27 16:36:45 +02:00
										 |  |  |         if (common_config('log', 'debugtrace')) { | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |             $bt = $error->getTrace(); | 
					
						
							|  |  |  |             foreach ($bt as $n => $line) { | 
					
						
							|  |  |  |                 common_log(LOG_ERR, formatBacktraceLine($n, $line)); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if ($error instanceof DB_DataObject_Error | 
					
						
							|  |  |  |             || $error instanceof DB_Error | 
					
						
							|  |  |  |             || ($error instanceof PEAR_Exception && $error->getCode() == -24) | 
					
						
							|  |  |  |         ) { | 
					
						
							| 
									
										
										
										
											2010-03-01 21:53:10 -05:00
										 |  |  |             //If we run into a DB error, assume we can't connect to the DB at all
 | 
					
						
							|  |  |  |             //so set the current user to null, so we don't try to access the DB
 | 
					
						
							|  |  |  |             //while rendering the error page.
 | 
					
						
							|  |  |  |             global $_cur; | 
					
						
							|  |  |  |             $_cur = null; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |             $msg = sprintf( | 
					
						
							| 
									
										
										
										
											2011-04-04 00:41:21 +02:00
										 |  |  |                 // TRANS: Database error message.
 | 
					
						
							| 
									
										
										
										
											2011-04-04 01:01:42 +02:00
										 |  |  |                 _('The database for %1$s is not responding correctly, '. | 
					
						
							|  |  |  |                   'so the site will not work properly. '. | 
					
						
							|  |  |  |                   'The site admins probably know about the problem, '. | 
					
						
							|  |  |  |                   'but you can contact them at %2$s to make sure. '. | 
					
						
							|  |  |  |                   'Otherwise, wait a few minutes and try again.' | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |                 ), | 
					
						
							|  |  |  |                 common_config('site', 'name'), | 
					
						
							|  |  |  |                 common_config('site', 'email') | 
					
						
							|  |  |  |             ); | 
					
						
							| 
									
										
										
										
											2011-07-26 15:56:04 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-14 02:47:28 +01:00
										 |  |  |             $erraction = new DBErrorAction($msg, 500); | 
					
						
							|  |  |  |         } elseif ($error instanceof ClientException) { | 
					
						
							|  |  |  |             $erraction = new ClientErrorAction($error->getMessage(), $error->getCode()); | 
					
						
							|  |  |  |         } elseif ($error instanceof ServerException) { | 
					
						
							|  |  |  |             $erraction = new ServerErrorAction($error->getMessage(), $error->getCode(), $error); | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2016-01-14 02:47:28 +01:00
										 |  |  |             // If it wasn't specified more closely which kind of exception it was
 | 
					
						
							|  |  |  |             $erraction = new ServerErrorAction($error->getMessage(), 500, $error); | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-01-14 02:47:28 +01:00
										 |  |  |         $erraction->showPage(); | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     } catch (Exception $e) { | 
					
						
							| 
									
										
										
										
											2011-04-04 00:41:21 +02:00
										 |  |  |         // TRANS: Error message.
 | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |         echo _('An error occurred.'); | 
					
						
							| 
									
										
										
										
											2016-01-14 02:47:28 +01:00
										 |  |  |         exit(-1); | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-02-11 14:45:06 -05:00
										 |  |  |     exit(-1); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2008-08-05 23:45:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  | set_exception_handler('handleError'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-10 13:10:48 +02:00
										 |  |  | // quick check for fancy URL auto-detection support in installer.
 | 
					
						
							|  |  |  | if (preg_replace("/\?.+$/", "", $_SERVER['REQUEST_URI']) === preg_replace("/^\/$/", "", (dirname($_SERVER['REQUEST_URI']))) . '/check-fancy') { | 
					
						
							|  |  |  |     die("Fancy URL support detection succeeded. We suggest you enable this to get fancy (pretty) URLs."); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-01 21:40:42 -05:00
										 |  |  | require_once INSTALLDIR . '/lib/common.php'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-17 09:07:44 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Format a backtrace line for debug output roughly like debug_print_backtrace() does. | 
					
						
							|  |  |  |  * Exceptions already have this built in, but PEAR error objects just give us the array. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @param int $n line number | 
					
						
							|  |  |  |  * @param array $line per-frame array item from debug_backtrace() | 
					
						
							|  |  |  |  * @return string | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function formatBacktraceLine($n, $line) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     $out = "#$n "; | 
					
						
							|  |  |  |     if (isset($line['class'])) $out .= $line['class']; | 
					
						
							|  |  |  |     if (isset($line['type'])) $out .= $line['type']; | 
					
						
							|  |  |  |     if (isset($line['function'])) $out .= $line['function']; | 
					
						
							|  |  |  |     $out .= '('; | 
					
						
							|  |  |  |     if (isset($line['args'])) { | 
					
						
							|  |  |  |         $args = array(); | 
					
						
							|  |  |  |         foreach ($line['args'] as $arg) { | 
					
						
							|  |  |  |             // debug_print_backtrace seems to use var_export
 | 
					
						
							|  |  |  |             // but this gets *very* verbose!
 | 
					
						
							|  |  |  |             $args[] = gettype($arg); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $out .= implode(',', $args); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     $out .= ')'; | 
					
						
							|  |  |  |     $out .= ' called at ['; | 
					
						
							|  |  |  |     if (isset($line['file'])) $out .= $line['file']; | 
					
						
							|  |  |  |     if (isset($line['line'])) $out .= ':' . $line['line']; | 
					
						
							|  |  |  |     $out .= ']'; | 
					
						
							|  |  |  |     return $out; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-28 16:52:05 -05:00
										 |  |  | function setupRW() | 
					
						
							| 
									
										
										
										
											2009-06-27 06:20:24 -07:00
										 |  |  | { | 
					
						
							|  |  |  |     global $config; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 16:26:46 -08:00
										 |  |  |     static $alwaysRW = array('session', 'remember_me'); | 
					
						
							| 
									
										
										
										
											2009-06-27 06:20:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-06 17:18:38 -07:00
										 |  |  |     $rwdb = $config['db']['database']; | 
					
						
							| 
									
										
										
										
											2010-01-28 14:27:35 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-06 17:18:38 -07:00
										 |  |  |     if (Event::handle('StartReadWriteTables', array(&$alwaysRW, &$rwdb))) { | 
					
						
							| 
									
										
										
										
											2010-01-28 14:27:35 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-06 17:18:38 -07:00
										 |  |  |         // We ensure that these tables always are used
 | 
					
						
							|  |  |  |         // on the master DB
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $config['db']['database_rw'] = $rwdb; | 
					
						
							|  |  |  |         $config['db']['ini_rw'] = INSTALLDIR.'/classes/statusnet.ini'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         foreach ($alwaysRW as $table) { | 
					
						
							|  |  |  |             $config['db']['table_'.$table] = 'rw'; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Event::handle('EndReadWriteTables', array($alwaysRW, $rwdb)); | 
					
						
							| 
									
										
										
										
											2010-01-28 14:27:35 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-05-06 17:18:38 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return; | 
					
						
							| 
									
										
										
										
											2010-01-28 16:52:05 -05:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-01-28 14:27:35 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-04 11:13:47 -04:00
										 |  |  | function isLoginAction($action) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-09-30 17:13:03 +02:00
										 |  |  |     static $loginActions =  array('login', 'recoverpassword', 'api', 'doc', 'register', 'publicxrds', 'otp', 'opensearch', 'rsd'); | 
					
						
							| 
									
										
										
										
											2009-08-04 11:13:47 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $login = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (Event::handle('LoginAction', array($action, &$login))) { | 
					
						
							|  |  |  |         $login = in_array($action, $loginActions); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return $login; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-11 14:45:06 -05:00
										 |  |  | function main() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-06-27 07:43:58 -07:00
										 |  |  |     global $user, $action; | 
					
						
							| 
									
										
										
										
											2008-08-05 23:45:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-04 06:24:33 -08:00
										 |  |  |     if (!_have_config()) { | 
					
						
							| 
									
										
										
										
											2009-09-13 20:31:19 +12:00
										 |  |  |         $msg = sprintf( | 
					
						
							| 
									
										
										
										
											2011-04-04 00:41:21 +02:00
										 |  |  |             // TRANS: Error message displayed when there is no StatusNet configuration file.
 | 
					
						
							| 
									
										
										
										
											2011-04-04 01:01:42 +02:00
										 |  |  |             _("No configuration file found. Try running ". | 
					
						
							|  |  |  |               "the installation program first." | 
					
						
							| 
									
										
										
										
											2009-09-13 20:31:19 +12:00
										 |  |  |             ) | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2009-03-04 06:24:33 -08:00
										 |  |  |         $sac = new ServerErrorAction($msg); | 
					
						
							|  |  |  |         $sac->showPage(); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-28 16:52:05 -05:00
										 |  |  |     // Make sure RW database is setup
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     setupRW(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |     // XXX: we need a little more structure in this script
 | 
					
						
							| 
									
										
										
										
											2008-08-05 23:45:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-28 16:52:05 -05:00
										 |  |  |     // get and cache current user (may hit RW!)
 | 
					
						
							| 
									
										
										
										
											2008-08-05 23:45:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |     $user = common_current_user(); | 
					
						
							| 
									
										
										
										
											2008-05-19 10:12:19 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |     // initialize language env
 | 
					
						
							| 
									
										
										
										
											2008-05-19 10:12:19 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |     common_init_language(); | 
					
						
							| 
									
										
										
										
											2008-12-03 13:34:32 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |     $path = getPath($_REQUEST); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-11 00:45:11 -05:00
										 |  |  |     $r = Router::get(); | 
					
						
							| 
									
										
										
										
											2008-12-03 13:24:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |     $args = $r->map($path); | 
					
						
							| 
									
										
										
										
											2008-05-07 12:48:07 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-20 20:22:34 -04:00
										 |  |  |     // If the request is HTTP and it should be HTTPS...
 | 
					
						
							| 
									
										
										
										
											2016-02-10 01:05:02 +01:00
										 |  |  |     if (GNUsocial::useHTTPS() && !GNUsocial::isHTTPS()) { | 
					
						
							| 
									
										
										
										
											2010-10-20 20:22:34 -04:00
										 |  |  |         common_redirect(common_local_url($args['action'], $args)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |     $args = array_merge($args, $_REQUEST); | 
					
						
							| 
									
										
										
										
											2009-05-15 15:07:23 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Event::handle('ArgsInitialize', array(&$args)); | 
					
						
							| 
									
										
										
										
											2009-02-09 11:46:26 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-29 23:30:04 +02:00
										 |  |  |     $action = basename($args['action']); | 
					
						
							| 
									
										
										
										
											2008-12-20 19:23:32 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |     if (!$action || !preg_match('/^[a-zA-Z0-9_-]*$/', $action)) { | 
					
						
							|  |  |  |         common_redirect(common_local_url('public')); | 
					
						
							| 
									
										
										
										
											2008-12-20 19:23:32 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-02-09 07:15:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |     // If the site is private, and they're not on one of the "public"
 | 
					
						
							|  |  |  |     // parts of the site, redirect to login
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-15 22:30:52 -04:00
										 |  |  |     if (!$user && common_config('site', 'private') | 
					
						
							|  |  |  |         && !isLoginAction($action) | 
					
						
							| 
									
										
										
										
											2009-09-13 20:31:19 +12:00
										 |  |  |         && !preg_match('/rss$/', $action) | 
					
						
							| 
									
										
										
										
											2010-01-31 10:12:26 -05:00
										 |  |  |         && $action != 'robotstxt' | 
					
						
							|  |  |  |         && !preg_match('/^Api/', $action)) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-17 14:38:14 +08:00
										 |  |  |         // set returnto
 | 
					
						
							|  |  |  |         $rargs =& common_copy_args($args); | 
					
						
							|  |  |  |         unset($rargs['action']); | 
					
						
							|  |  |  |         if (common_config('site', 'fancy')) { | 
					
						
							|  |  |  |             unset($rargs['p']); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (array_key_exists('submit', $rargs)) { | 
					
						
							|  |  |  |             unset($rargs['submit']); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         foreach (array_keys($_COOKIE) as $cookie) { | 
					
						
							|  |  |  |             unset($rargs[$cookie]); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         common_set_returnto(common_local_url($action, $rargs)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  |         common_redirect(common_local_url('login')); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $action_class = ucfirst($action).'Action'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!class_exists($action_class)) { | 
					
						
							| 
									
										
										
										
											2011-04-04 00:41:21 +02:00
										 |  |  |         // TRANS: Error message displayed when trying to perform an undefined action.
 | 
					
						
							| 
									
										
										
										
											2016-01-14 02:47:28 +01:00
										 |  |  |         throw new ClientException(_('Unknown action'), 404); | 
					
						
							| 
									
										
										
										
											2008-12-20 19:23:32 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-01-14 02:47:28 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     call_user_func("$action_class::run", $args); | 
					
						
							| 
									
										
										
										
											2009-02-09 07:15:52 -05:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-02-09 08:44:30 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 22:32:38 -05:00
										 |  |  | main(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-09 08:44:30 -05:00
										 |  |  | // XXX: cleanup exit() calls or add an exit handler so
 | 
					
						
							|  |  |  | // this always gets called
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Event::handle('CleanupPlugin'); |