]> git.mxchange.org Git - friendica.git/commitdiff
Fix exception module not setting the HTTP response code
authorHypolite Petovan <hypolite@mrpetovan.com>
Mon, 10 Jul 2023 02:44:40 +0000 (22:44 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Mon, 10 Jul 2023 02:45:46 +0000 (22:45 -0400)
- Page->run now returns an updated response for use with Page->exit
- Remove now duplicated header setting in Page->run
- Remove now obsolete (and ineffective) HTTP return code setting from Module\Special\HTTPException->content
- Add HTTP response code and reason setting in BaseModule->run

src/App.php
src/App/Page.php
src/BaseModule.php
src/Module/Special/HTTPException.php

index a48e21571d85f86a8dd0c0bf9bb675fb56053716..db3e644c2fc4391a6716c3cfb184b8b6fe29d694 100644 (file)
@@ -706,11 +706,13 @@ class App
                        $timestamp = microtime(true);
                        $response = $module->run($httpException, $input);
                        $this->profiler->set(microtime(true) - $timestamp, 'content');
+
+                       // Wrapping HTML responses in the theme template
                        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, $nav, $this->session->getLocalUserId());
-                       } else {
-                               $page->exit($response);
+                               $response = $page->run($this, $this->baseURL, $this->args, $this->mode, $response, $this->l10n, $this->profiler, $this->config, $pconfig, $nav, $this->session->getLocalUserId());
                        }
+
+                       $page->exit($response);
                } catch (HTTPException $e) {
                        $httpException->rawContent($e);
                }
index 6252d9a88aea17af5656df43f9f75294eb3c8146..96bb59425efd151f405bd025d41dfb98a1058f70 100644 (file)
@@ -39,6 +39,7 @@ use Friendica\Network\HTTPException;
 use Friendica\Util\Network;
 use Friendica\Util\Profiler;
 use Friendica\Util\Strings;
+use GuzzleHttp\Psr7\Utils;
 use Psr\Http\Message\ResponseInterface;
 
 /**
@@ -499,20 +500,6 @@ class Page implements ArrayAccess
                        $this->page['nav']      = $nav->getHtml();
                }
 
-               foreach ($response->getHeaders() as $key => $header) {
-                       if (is_array($header)) {
-                               $header_str = implode(',', $header);
-                       } else {
-                               $header_str = $header;
-                       }
-
-                       if (empty($key)) {
-                               header($header_str);
-                       } else {
-                               header("$key: $header_str");
-                       }
-               }
-
                // Build the page - now that we have all the components
                if (isset($_GET["mode"]) && (($_GET["mode"] == "raw") || ($_GET["mode"] == "minimal"))) {
                        $doc = new DOMDocument();
@@ -583,6 +570,10 @@ class Page implements ArrayAccess
                // Used as is in view/php/default.php
                $lang = $l10n->getCurrentLang();
 
+               ob_start();
                require_once $template;
+               $body = ob_get_clean();
+
+               return $response->withBody(Utils::streamFor($body));
        }
 }
index b43e984772f6cfd7b6ecfa220f8dc6ea52c999a6..619095dfb6fbaf019c669c309cc07c6fece29ec9 100644 (file)
@@ -251,6 +251,7 @@ abstract class BaseModule implements ICanHandleRequests
                                throw $e;
                        }
 
+                       $this->response->setStatus($e->getCode(), $e->getMessage());
                        $this->response->addContent($httpException->content($e));
                } finally {
                        $this->profiler->set(microtime(true) - $timestamp, 'content');
index 8a8cc30ebb99dcd7ae98acaf8e97699164240aa8..2cac142fca80e731f39ee2a499ba41d3b8acee5b 100644 (file)
@@ -126,8 +126,6 @@ class HTTPException
         */
        public function content(\Friendica\Network\HTTPException $e): string
        {
-               header($this->server['SERVER_PROTOCOL'] ?? 'HTTP/1.0' . ' ' . $e->getCode() . ' ' . $e->getDescription());
-
                if ($e->getCode() >= 400) {
                        $this->logger->debug('Exit with error',
                                [