]> git.mxchange.org Git - friendica.git/commitdiff
Move System::httpError to BaseModule->httpError
authorHypolite Petovan <hypolite@mrpetovan.com>
Thu, 21 Sep 2023 16:45:24 +0000 (12:45 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sun, 24 Sep 2023 11:08:15 +0000 (07:08 -0400)
- This will ensure headers set in BaseModule->run will be carried in httpError scenarios
- Deprecate httpError() method in Core\System

src/BaseModule.php
src/Core/System.php
src/Module/Filer/RemoveTag.php
src/Module/Post/Share.php
src/Module/Special/HTTPException.php

index d97cd60a9477c9fefb701cb70b6880ce879bdb82..5ebeec3c8099d6064d22d5d9476a923817ec4e02 100644 (file)
@@ -476,4 +476,23 @@ abstract class BaseModule implements ICanHandleRequests
 
                System::exit();
        }
+
+       /**
+        * Send HTTP status header and exit.
+        *
+        * @param integer $httpCode HTTP status result value
+        * @param string  $message  Error message. Optional.
+        * @param mixed  $content   Response body. Optional.
+        * @throws \Exception
+        */
+       public function httpError(int $httpCode, string $message = '', $content = '')
+       {
+               if ($httpCode >= 400) {
+                       $this->logger->debug('Exit with error', ['code' => $httpCode, 'message' => $message, 'callstack' => System::callstack(20), 'method' => $this->args->getMethod(), 'agent' => $this->server['HTTP_USER_AGENT'] ?? '']);
+               }
+
+               $this->response->setStatus($httpCode, $message);
+
+               $this->httpExit($content);
+       }
 }
index e1e84b775b4871ae27804ef4d8d6634c1083a227..48a4ce614168ad0eadf3c1a0ad493ce12b12a157 100644 (file)
@@ -341,6 +341,7 @@ class System
         * @param string  $message Error message. Optional.
         * @param string  $content Response body. Optional.
         * @throws \Exception
+        * @deprecated since 2023.09 Use BaseModule->httpError instead
         */
        public static function httpError($httpCode, $message = '', $content = '')
        {
@@ -348,10 +349,8 @@ class System
                        Logger::debug('Exit with error', ['code' => $httpCode, 'message' => $message, 'callstack' => System::callstack(20), 'method' => DI::args()->getMethod(), 'agent' => $_SERVER['HTTP_USER_AGENT'] ?? '']);
                }
                DI::apiResponse()->setStatus($httpCode, $message);
-               DI::apiResponse()->addContent($content);
-               self::echoResponse(DI::apiResponse()->generate());
 
-               self::exit();
+               self::httpExit($content);
        }
 
        /**
index 874fa904661b87f54c4f0a02567e1da0a63417ce..23486fcf098dd30c66d13f69437bdc9479945050 100644 (file)
@@ -54,7 +54,7 @@ class RemoveTag extends BaseModule
 
        protected function post(array $request = [])
        {
-               System::httpError($this->removeTag($request));
+               $this->httpError($this->removeTag($request));
        }
 
        protected function content(array $request = []): string
index 210a3fa6bc9b55ca208bffe923b9f3478b5455db..0219eb99538feab10414a4b375df89e82f403602 100644 (file)
@@ -57,12 +57,12 @@ class Share extends \Friendica\BaseModule
        {
                $post_id = $this->parameters['post_id'];
                if (!$post_id || !$this->session->getLocalUserId()) {
-                       System::httpError(403);
+                       $this->httpError(403);
                }
 
                $item = Post::selectFirst(['private', 'body', 'uri', 'plink', 'network'], ['id' => $post_id]);
                if (!$item || $item['private'] == Item::PRIVATE) {
-                       System::httpError(404);
+                       $this->httpError(404);
                }
 
                $shared = $this->contentItem->getSharedPost($item, ['uri']);
index 2cac142fca80e731f39ee2a499ba41d3b8acee5b..f9468e20bc56eade9b87175ef8fc09baa85ab770 100644 (file)
 
 namespace Friendica\Module\Special;
 
-use Friendica\App\Arguments;
-use Friendica\App\Request;
+use Friendica\App;
 use Friendica\Core\L10n;
 use Friendica\Core\Renderer;
 use Friendica\Core\Session\Model\UserSession;
 use Friendica\Core\System;
+use Friendica\Module\Response;
 use Psr\Log\LoggerInterface;
 
 /**
@@ -40,7 +40,7 @@ class HTTPException
        protected $l10n;
        /** @var LoggerInterface */
        protected $logger;
-       /** @var Arguments */
+       /** @var App\Arguments */
        protected $args;
        /** @var bool */
        protected $isSiteAdmin;
@@ -49,7 +49,7 @@ class HTTPException
        /** @var string */
        protected $requestId;
 
-       public function __construct(L10n $l10n, LoggerInterface $logger, Arguments $args, UserSession $session, Request $request, array $server = [])
+       public function __construct(L10n $l10n, LoggerInterface $logger, App\Arguments $args, UserSession $session, App\Request $request, array $server = [])
        {
                $this->logger      = $logger;
                $this->l10n        = $l10n;
@@ -113,7 +113,13 @@ class HTTPException
                        }
                }
 
-               System::httpError($e->getCode(), $e->getDescription(), $content);
+               // We can't use a constructor parameter for this response object because we
+               // are in an Exception context where we don't want an existing Response.
+               $response = new Response();
+               $response->setStatus($e->getCode(), $e->getDescription());
+               $response->addContent($content);
+               System::echoResponse($response->generate());
+               System::exit();
        }
 
        /**