X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FApp.php;h=9cbac155b583df11b35b923669ef7c9f0f284db0;hb=7488a793a89fc9f98fabb4ce9afb1f2843c41355;hp=f3f7429db0651014ebe52aa4f6942024b81c7ddc;hpb=561aba18e3a230c0912ad9483c6df43cc40e09d6;p=friendica.git diff --git a/src/App.php b/src/App.php index f3f7429db0..9cbac155b5 100644 --- a/src/App.php +++ b/src/App.php @@ -24,6 +24,7 @@ namespace Friendica; use Exception; use Friendica\App\Arguments; use Friendica\App\BaseURL; +use Friendica\Capabilities\ICanCreateResponses; use Friendica\Core\Config\Factory\Config; use Friendica\Module\Maintenance; use Friendica\Security\Authentication; @@ -39,6 +40,7 @@ use Friendica\Model\Profile; use Friendica\Module\Special\HTTPException as ModuleHTTPException; use Friendica\Network\HTTPException; use Friendica\Util\DateTimeFormat; +use Friendica\Util\HTTPInputData; use Friendica\Util\HTTPSignature; use Friendica\Util\Profiler; use Friendica\Util\Strings; @@ -560,13 +562,15 @@ class App * * @param App\Router $router * @param IManagePersonalConfigValues $pconfig - * @param Authentication $auth The Authentication backend of the node - * @param App\Page $page The Friendica page printing container + * @param Authentication $auth The Authentication backend of the node + * @param App\Page $page The Friendica page printing container + * @param HTTPInputData $httpInput A library for processing PHP input streams + * @param float $start_time The start time of the overall script execution * * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ - public function runFrontend(App\Router $router, IManagePersonalConfigValues $pconfig, Authentication $auth, App\Page $page, float $start_time) + public function runFrontend(App\Router $router, IManagePersonalConfigValues $pconfig, Authentication $auth, App\Page $page, HTTPInputData $httpInput, float $start_time) { $this->profiler->set($start_time, 'start'); $this->profiler->set(microtime(true), 'classinit'); @@ -596,29 +600,27 @@ class App } // ZRL - if (!empty($_GET['zrl']) && $this->mode->isNormal() && !$this->mode->isBackend()) { - if (!local_user()) { - // Only continue when the given profile link seems valid - // Valid profile links contain a path with "/profile/" and no query parameters - if ((parse_url($_GET['zrl'], PHP_URL_QUERY) == "") && - strstr(parse_url($_GET['zrl'], PHP_URL_PATH), "/profile/")) { - if (Core\Session::get('visitor_home') != $_GET["zrl"]) { - Core\Session::set('my_url', $_GET['zrl']); - Core\Session::set('authenticated', 0); - - $remote_contact = Contact::getByURL($_GET['zrl'], false, ['subscribe']); - if (!empty($remote_contact['subscribe'])) { - $_SESSION['remote_comment'] = $remote_contact['subscribe']; - } + if (!empty($_GET['zrl']) && $this->mode->isNormal() && !$this->mode->isBackend() && !local_user()) { + // Only continue when the given profile link seems valid + // Valid profile links contain a path with "/profile/" and no query parameters + if ((parse_url($_GET['zrl'], PHP_URL_QUERY) == "") && + strstr(parse_url($_GET['zrl'], PHP_URL_PATH), "/profile/")) { + if (Core\Session::get('visitor_home') != $_GET["zrl"]) { + Core\Session::set('my_url', $_GET['zrl']); + Core\Session::set('authenticated', 0); + + $remote_contact = Contact::getByURL($_GET['zrl'], false, ['subscribe']); + if (!empty($remote_contact['subscribe'])) { + $_SESSION['remote_comment'] = $remote_contact['subscribe']; } - - Model\Profile::zrlInit($this); - } else { - // Someone came with an invalid parameter, maybe as a DDoS attempt - // We simply stop processing here - $this->logger->debug('Invalid ZRL parameter.', ['zrl' => $_GET['zrl']]); - throw new HTTPException\ForbiddenException(); } + + Model\Profile::zrlInit($this); + } else { + // Someone came with an invalid parameter, maybe as a DDoS attempt + // We simply stop processing here + $this->logger->debug('Invalid ZRL parameter.', ['zrl' => $_GET['zrl']]); + throw new HTTPException\ForbiddenException(); } } @@ -700,9 +702,19 @@ class App $module = $router->getModule(); } + // Processes data from GET requests + $httpinput = $httpInput->process(); + $input = array_merge($httpinput['variables'], $httpinput['files'], $request ?? $_REQUEST); + // Let the module run it's internal process (init, get, post, ...) - $response = $module->run($_POST, $_REQUEST); - $page->run($this, $this->baseURL, $this->args, $this->mode, $response, $this->l10n, $this->profiler, $this->config, $pconfig); + $timestamp = microtime(true); + $response = $module->run($input); + $this->profiler->set(microtime(true) - $timestamp, 'content'); + if ($response->getHeaderLine(ICanCreateResponses::X_HEADER) === ICanCreateResponses::TYPE_HTML) { + $page->run($this, $this->baseURL, $this->args, $this->mode, $response, $this->l10n, $this->profiler, $this->config, $pconfig); + } else { + $page->exit($response); + } } catch (HTTPException $e) { (new ModuleHTTPException())->rawContent($e); }