Move System::httpExit to BaseModule->httpExit
- This will ensure headers set in BaseModule->run will be carried in httpExit scenarios - Deprecate httpExit() method in Core\System
This commit is contained in:
parent
94e3dde2e3
commit
da1416c07f
|
@ -496,7 +496,9 @@ class Page implements ArrayAccess
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($_GET["mode"] == "raw") {
|
if ($_GET["mode"] == "raw") {
|
||||||
System::httpExit(substr($target->saveHTML(), 6, -8), Response::TYPE_HTML);
|
$response->withBody(Utils::streamFor($target->saveHTML()));
|
||||||
|
System::echoResponse($response);
|
||||||
|
System::exit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ use Friendica\Capabilities\ICanCreateResponses;
|
||||||
use Friendica\Core\Hook;
|
use Friendica\Core\Hook;
|
||||||
use Friendica\Core\L10n;
|
use Friendica\Core\L10n;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
|
use Friendica\Core\System;
|
||||||
use Friendica\Model\User;
|
use Friendica\Model\User;
|
||||||
use Friendica\Module\Response;
|
use Friendica\Module\Response;
|
||||||
use Friendica\Module\Special\HTTPException as ModuleHTTPException;
|
use Friendica\Module\Special\HTTPException as ModuleHTTPException;
|
||||||
|
@ -106,8 +107,7 @@ abstract class BaseModule implements ICanHandleRequests
|
||||||
*/
|
*/
|
||||||
protected function rawContent(array $request = [])
|
protected function rawContent(array $request = [])
|
||||||
{
|
{
|
||||||
// echo '';
|
// $this->httpExit(...);
|
||||||
// exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -234,7 +234,8 @@ abstract class BaseModule implements ICanHandleRequests
|
||||||
|
|
||||||
$timestamp = microtime(true);
|
$timestamp = microtime(true);
|
||||||
// "rawContent" is especially meant for technical endpoints.
|
// "rawContent" is especially meant for technical endpoints.
|
||||||
// This endpoint doesn't need any theme initialization or other comparable stuff.
|
// This endpoint doesn't need any theme initialization or
|
||||||
|
// templating and is expected to exit on its own if it is set.
|
||||||
$this->rawContent($request);
|
$this->rawContent($request);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -456,4 +457,23 @@ abstract class BaseModule implements ICanHandleRequests
|
||||||
|
|
||||||
return $tabs;
|
return $tabs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function adds the content and a content-type HTTP header to the output.
|
||||||
|
* After finishing the process is getting killed.
|
||||||
|
*
|
||||||
|
* @param string $content
|
||||||
|
* @param string $type
|
||||||
|
* @param string|null $content_type
|
||||||
|
* @return void
|
||||||
|
* @throws HTTPException\InternalServerErrorException
|
||||||
|
*/
|
||||||
|
public function httpExit(string $content, string $type = Response::TYPE_HTML, ?string $content_type = null)
|
||||||
|
{
|
||||||
|
$this->response->setType($type, $content_type);
|
||||||
|
$this->response->addContent($content);
|
||||||
|
System::echoResponse($this->response->generate());
|
||||||
|
|
||||||
|
System::exit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ interface ICanCreateResponses
|
||||||
*
|
*
|
||||||
* @throws InternalServerErrorException
|
* @throws InternalServerErrorException
|
||||||
*/
|
*/
|
||||||
public function setType(string $type, ?string $content_type = null): void;
|
public function setType(string $type = ICanCreateResponses::TYPE_HTML, ?string $content_type = null): void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the status and the reason for the response
|
* Sets the status and the reason for the response
|
||||||
|
|
|
@ -28,6 +28,7 @@ use Friendica\DI;
|
||||||
use Friendica\Model\User;
|
use Friendica\Model\User;
|
||||||
use Friendica\Module\Response;
|
use Friendica\Module\Response;
|
||||||
use Friendica\Network\HTTPException\FoundException;
|
use Friendica\Network\HTTPException\FoundException;
|
||||||
|
use Friendica\Network\HTTPException\InternalServerErrorException;
|
||||||
use Friendica\Network\HTTPException\MovedPermanentlyException;
|
use Friendica\Network\HTTPException\MovedPermanentlyException;
|
||||||
use Friendica\Network\HTTPException\TemporaryRedirectException;
|
use Friendica\Network\HTTPException\TemporaryRedirectException;
|
||||||
use Friendica\Util\BasePath;
|
use Friendica\Util\BasePath;
|
||||||
|
@ -361,8 +362,11 @@ class System
|
||||||
* @param string $type
|
* @param string $type
|
||||||
* @param string|null $content_type
|
* @param string|null $content_type
|
||||||
* @return void
|
* @return void
|
||||||
|
* @throws InternalServerErrorException
|
||||||
|
* @deprecated since 2023.09 Use BaseModule->httpExit() instead
|
||||||
*/
|
*/
|
||||||
public static function httpExit(string $content, string $type = Response::TYPE_HTML, ?string $content_type = null) {
|
public static function httpExit(string $content, string $type = Response::TYPE_HTML, ?string $content_type = null)
|
||||||
|
{
|
||||||
DI::apiResponse()->setType($type, $content_type);
|
DI::apiResponse()->setType($type, $content_type);
|
||||||
DI::apiResponse()->addContent($content);
|
DI::apiResponse()->addContent($content);
|
||||||
self::echoResponse(DI::apiResponse()->generate());
|
self::echoResponse(DI::apiResponse()->generate());
|
||||||
|
|
|
@ -183,7 +183,7 @@ class API extends BaseModule
|
||||||
|
|
||||||
if (strcmp($finish, $start) < 0 && !$noFinish) {
|
if (strcmp($finish, $start) < 0 && !$noFinish) {
|
||||||
if ($isPreview) {
|
if ($isPreview) {
|
||||||
System::httpExit($this->t('Event can not end before it has started.'));
|
$this->httpExit($this->t('Event can not end before it has started.'));
|
||||||
} else {
|
} else {
|
||||||
$this->sysMessages->addNotice($this->t('Event can not end before it has started.'));
|
$this->sysMessages->addNotice($this->t('Event can not end before it has started.'));
|
||||||
$this->baseUrl->redirect($redirectOnError);
|
$this->baseUrl->redirect($redirectOnError);
|
||||||
|
@ -192,7 +192,7 @@ class API extends BaseModule
|
||||||
|
|
||||||
if (empty($summary) || ($start === DBA::NULL_DATETIME)) {
|
if (empty($summary) || ($start === DBA::NULL_DATETIME)) {
|
||||||
if ($isPreview) {
|
if ($isPreview) {
|
||||||
System::httpExit($this->t('Event title and start time are required.'));
|
$this->httpExit($this->t('Event title and start time are required.'));
|
||||||
} else {
|
} else {
|
||||||
$this->sysMessages->addNotice($this->t('Event title and start time are required.'));
|
$this->sysMessages->addNotice($this->t('Event title and start time are required.'));
|
||||||
$this->baseUrl->redirect($redirectOnError);
|
$this->baseUrl->redirect($redirectOnError);
|
||||||
|
@ -251,7 +251,7 @@ class API extends BaseModule
|
||||||
];
|
];
|
||||||
|
|
||||||
if (intval($request['preview'])) {
|
if (intval($request['preview'])) {
|
||||||
System::httpExit(Event::getHTML($datarray));
|
$this->httpExit(Event::getHTML($datarray));
|
||||||
}
|
}
|
||||||
|
|
||||||
$eventId = Event::store($datarray);
|
$eventId = Event::store($datarray);
|
||||||
|
|
|
@ -81,6 +81,6 @@ class Show extends BaseModule
|
||||||
'$event' => $tplEvent,
|
'$event' => $tplEvent,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
System::httpExit($o);
|
$this->httpExit($o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,6 +115,6 @@ class Hovercard extends BaseModule
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
System::httpExit($o);
|
$this->httpExit($o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,6 @@ class Poll extends BaseModule
|
||||||
}
|
}
|
||||||
|
|
||||||
$last_update = $request['last_update'] ?? '';
|
$last_update = $request['last_update'] ?? '';
|
||||||
System::httpExit(OStatus::feed($owner['nickname'], $last_update, 10) ?? '', Response::TYPE_ATOM);
|
$this->httpExit(OStatus::feed($owner['nickname'], $last_update, 10) ?? '', Response::TYPE_ATOM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,6 @@ class Fetch extends BaseModule
|
||||||
$xml = Diaspora::buildPostXml($status["type"], $status["message"]);
|
$xml = Diaspora::buildPostXml($status["type"], $status["message"]);
|
||||||
|
|
||||||
// Send the envelope
|
// Send the envelope
|
||||||
System::httpExit(Diaspora::buildMagicEnvelope($xml, $user), Response::TYPE_XML, 'application/magic-envelope+xml');
|
$this->httpExit(Diaspora::buildMagicEnvelope($xml, $user), Response::TYPE_XML, 'application/magic-envelope+xml');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,6 @@ class Feed extends BaseModule
|
||||||
|
|
||||||
$feed = ProtocolFeed::atom($owner, $last_update, 10, $type);
|
$feed = ProtocolFeed::atom($owner, $last_update, 10, $type);
|
||||||
|
|
||||||
System::httpExit($feed, Response::TYPE_ATOM);
|
$this->httpExit($feed, Response::TYPE_ATOM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,6 +86,6 @@ class Feed extends BaseModule
|
||||||
throw new HTTPException\InternalServerErrorException($this->t('The feed for this item is unavailable.', ['uri-id' => $uriId]));
|
throw new HTTPException\InternalServerErrorException($this->t('The feed for this item is unavailable.', ['uri-id' => $uriId]));
|
||||||
}
|
}
|
||||||
|
|
||||||
System::httpExit($xml, Response::TYPE_ATOM);
|
$this->httpExit($xml, Response::TYPE_ATOM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@ class Browser extends BaseModule
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (empty($request['mode'])) {
|
if (empty($request['mode'])) {
|
||||||
System::httpExit($output);
|
$this->httpExit($output);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $output;
|
return $output;
|
||||||
|
|
|
@ -91,7 +91,7 @@ class Browser extends BaseModule
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (empty($request['mode'])) {
|
if (empty($request['mode'])) {
|
||||||
System::httpExit($output);
|
$this->httpExit($output);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $output;
|
return $output;
|
||||||
|
|
|
@ -303,7 +303,7 @@ class Ping extends BaseModule
|
||||||
|
|
||||||
if (isset($_GET['callback'])) {
|
if (isset($_GET['callback'])) {
|
||||||
// JSONP support
|
// JSONP support
|
||||||
System::httpExit($_GET['callback'] . '(' . json_encode(['result' => $data]) . ')', Response::TYPE_BLANK, 'application/javascript');
|
$this->httpExit($_GET['callback'] . '(' . json_encode(['result' => $data]) . ')', Response::TYPE_BLANK, 'application/javascript');
|
||||||
} else {
|
} else {
|
||||||
System::jsonExit(['result' => $data]);
|
System::jsonExit(['result' => $data]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,6 +155,6 @@ class PubSub extends \Friendica\BaseModule
|
||||||
$this->logger->notice('Success for contact.', ['mode' => $hub_mode, 'contact' => $contact_id]);
|
$this->logger->notice('Success for contact.', ['mode' => $hub_mode, 'contact' => $contact_id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
System::httpExit($hub_challenge);
|
$this->httpExit($hub_challenge);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,6 @@ class OpenSearch extends BaseModule
|
||||||
'template' => "$baseUrl/opensearch",
|
'template' => "$baseUrl/opensearch",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
System::httpExit($xml->saveXML(), Response::TYPE_XML, 'application/opensearchdescription+xml');
|
$this->httpExit($xml->saveXML(), Response::TYPE_XML, 'application/opensearchdescription+xml');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,7 @@ class ParseUrl extends BaseModule
|
||||||
if ($format == 'json') {
|
if ($format == 'json') {
|
||||||
System::jsonExit($arr['text']);
|
System::jsonExit($arr['text']);
|
||||||
} else {
|
} else {
|
||||||
System::httpExit($arr['text']);
|
$this->httpExit($arr['text']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ class ParseUrl extends BaseModule
|
||||||
|
|
||||||
System::jsonExit($ret);
|
System::jsonExit($ret);
|
||||||
} else {
|
} else {
|
||||||
System::httpExit(BBCode::embedURL($url, empty($_GET['noAttachment']), $title, $description, $_GET['tags'] ?? ''));
|
$this->httpExit(BBCode::embedURL($url, empty($_GET['noAttachment']), $title, $description, $_GET['tags'] ?? ''));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,9 +166,9 @@ class PermissionTooltip extends \Friendica\BaseModule
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($l)) {
|
if (!empty($l)) {
|
||||||
System::httpExit($o . implode(', ', $l));
|
$this->httpExit($o . implode(', ', $l));
|
||||||
} else {
|
} else {
|
||||||
System::httpExit($o . $receivers);;
|
$this->httpExit($o . $receivers);;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,6 @@ class Share extends \Friendica\BaseModule
|
||||||
$content = '[share]' . $item['uri'] . '[/share]';
|
$content = '[share]' . $item['uri'] . '[/share]';
|
||||||
}
|
}
|
||||||
|
|
||||||
System::httpExit($content);
|
$this->httpExit($content);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ class PublicRSAKey extends BaseModule
|
||||||
throw new BadRequestException();
|
throw new BadRequestException();
|
||||||
}
|
}
|
||||||
|
|
||||||
System::httpExit(
|
$this->httpExit(
|
||||||
Salmon::salmonKey($user['spubkey']),
|
Salmon::salmonKey($user['spubkey']),
|
||||||
Response::TYPE_BLANK,
|
Response::TYPE_BLANK,
|
||||||
'application/magic-public-key'
|
'application/magic-public-key'
|
||||||
|
|
|
@ -67,6 +67,6 @@ class ReallySimpleDiscovery extends BaseModule
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
System::httpExit($content, Response::TYPE_XML);
|
$this->httpExit($content, Response::TYPE_XML);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ class Response implements ICanCreateResponses
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public function setType(string $type, ?string $content_type = null): void
|
public function setType(string $type = Response::TYPE_HTML, ?string $content_type = null): void
|
||||||
{
|
{
|
||||||
if (!in_array($type, static::ALLOWED_TYPES)) {
|
if (!in_array($type, static::ALLOWED_TYPES)) {
|
||||||
throw new InternalServerErrorException('wrong type');
|
throw new InternalServerErrorException('wrong type');
|
||||||
|
|
|
@ -90,6 +90,6 @@ class HostMeta extends BaseModule
|
||||||
],
|
],
|
||||||
], $xml, false, ['hm' => 'http://host-meta.net/xrd/1.0', 'mk' => 'http://salmon-protocol.org/ns/magic-key']);
|
], $xml, false, ['hm' => 'http://host-meta.net/xrd/1.0', 'mk' => 'http://salmon-protocol.org/ns/magic-key']);
|
||||||
|
|
||||||
System::httpExit($xml->saveXML(), Response::TYPE_XML, 'application/xrd+xml');
|
$this->httpExit($xml->saveXML(), Response::TYPE_XML, 'application/xrd+xml');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -330,6 +330,6 @@ class Xrd extends BaseModule
|
||||||
]);
|
]);
|
||||||
|
|
||||||
header('Access-Control-Allow-Origin: *');
|
header('Access-Control-Allow-Origin: *');
|
||||||
System::httpExit($xmlString, Response::TYPE_XML, 'application/xrd+xml');
|
$this->httpExit($xmlString, Response::TYPE_XML, 'application/xrd+xml');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user