*
*/
+use Friendica\Network\HTTPException\ForbiddenException;
+
if (php_sapi_name() !== 'cli') {
- header($_SERVER["SERVER_PROTOCOL"] . ' 403 Forbidden');
- exit();
+ throw new ForbiddenException();
}
use Dice\Dice;
*
*/
+use Friendica\Network\HTTPException\ForbiddenException;
+
if (php_sapi_name() !== 'cli') {
- header($_SERVER["SERVER_PROTOCOL"] . ' 403 Forbidden');
- exit();
+ throw new ForbiddenException();
}
use Dice\Dice;
* This script was taken from http://php.net/manual/en/function.pcntl-fork.php
*/
+use Friendica\Network\HTTPException\ForbiddenException;
+
if (php_sapi_name() !== 'cli') {
- header($_SERVER["SERVER_PROTOCOL"] . ' 403 Forbidden');
- exit();
+ throw new ForbiddenException();
}
use Dice\Dice;
*
*/
+use Friendica\Network\HTTPException\ForbiddenException;
+
if (php_sapi_name() !== 'cli') {
- header($_SERVER["SERVER_PROTOCOL"] . ' 403 Forbidden');
- exit();
+ throw new ForbiddenException();
}
if (($_SERVER["argc"] > 1) && isset($_SERVER["argv"][1])) {
* Usage: php bin/wait-for-connection {HOST} {PORT} [{TIMEOUT}]
*/
+use Friendica\Network\HTTPException\ForbiddenException;
+
if (php_sapi_name() !== 'cli') {
- header($_SERVER["SERVER_PROTOCOL"] . ' 403 Forbidden');
- exit();
+ throw new ForbiddenException();
}
$timeout = 60;
* Starts the background processing
*/
+use Friendica\Network\HTTPException\ForbiddenException;
+
if (php_sapi_name() !== 'cli') {
- header($_SERVER["SERVER_PROTOCOL"] . ' 403 Forbidden');
- exit();
+ throw new ForbiddenException();
}
use Dice\Dice;
if (!DBA::isResult($record)) {
Logger::debug(API_LOG_PREFIX . 'failed', ['module' => 'api', 'action' => 'login', 'parameters' => $_SERVER]);
header('WWW-Authenticate: Basic realm="Friendica"');
- //header('HTTP/1.0 401 Unauthorized');
- //die('This api requires login');
throw new UnauthorizedException("This API requires login");
}
use Friendica\Module\HTTPException\MethodNotAllowed;
use Friendica\Module\HTTPException\PageNotFound;
use Friendica\Network\HTTPException\MethodNotAllowedException;
+use Friendica\Network\HTTPException\NoContentException;
use Friendica\Network\HTTPException\NotFoundException;
use Friendica\Util\Profiler;
use Psr\Log\LoggerInterface;
// @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS
// @todo Check allowed methods per requested path
if ($server['REQUEST_METHOD'] === Router::OPTIONS) {
- header('HTTP/1.1 204 No Content');
header('Allow: ' . implode(',', Router::ALLOWED_METHODS));
- exit();
+ throw new NoContentException();
}
$placeholder = '';
namespace Friendica\Core\Cache;
-use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPException\ServiceUnavailableException;
/**
* Trait for Memcache to add a custom version of the
*
* @return array All keys of the memcache instance
*
- * @throws InternalServerErrorException
+ * @throws ServiceUnavailableException
*/
protected function getMemcacheKeys()
{
*
* @return string The returned buffer result
*
- * @throws InternalServerErrorException In case the memcache server isn't available (anymore)
+ * @throws ServiceUnavailableException In case the memcache server isn't available (anymore)
*/
protected function sendMemcacheCommand(string $command)
{
$s = @fsockopen($this->server, $this->port);
if (!$s) {
- throw new InternalServerErrorException("Cant connect to:" . $this->server . ':' . $this->port);
+ throw new ServiceUnavailableException("Cant connect to:" . $this->server . ':' . $this->port);
}
fwrite($s, $command . "\r\n");
use Exception;
use Friendica\DI;
-use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPException\ServiceUnavailableException;
use Friendica\Render\TemplateEngine;
/**
* @param string $template
* @param array $vars
* @return string
- * @throws InternalServerErrorException
+ * @throws ServiceUnavailableException
*/
public static function replaceMacros(string $template, array $vars = [])
{
$message = is_site_admin() ?
$e->getMessage() :
DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.');
- throw new InternalServerErrorException($message);
+ throw new ServiceUnavailableException($message);
}
DI::profiler()->stopRecording();
* @param string $subDir Subdirectory (Optional)
*
* @return string template.
- * @throws InternalServerErrorException
+ * @throws ServiceUnavailableException
*/
public static function getMarkupTemplate($file, $subDir = '')
{
$message = is_site_admin() ?
$e->getMessage() :
DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.');
- throw new InternalServerErrorException($message);
+ throw new ServiceUnavailableException($message);
}
DI::profiler()->stopRecording();
* Register template engine class
*
* @param string $class
- * @throws InternalServerErrorException
+ * @throws ServiceUnavailableException
*/
public static function registerTemplateEngine($class)
{
$message = is_site_admin() ?
$admin_message :
DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.');
- throw new InternalServerErrorException($message);
+ throw new ServiceUnavailableException($message);
}
}
* or default
*
* @return TemplateEngine Template Engine instance
- * @throws InternalServerErrorException
+ * @throws ServiceUnavailableException
*/
public static function getTemplateEngine()
{
$message = is_site_admin() ?
$admin_message :
DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.');
- throw new InternalServerErrorException($message);
+ throw new ServiceUnavailableException($message);
}
/**
namespace Friendica\Core;
use Friendica\DI;
-use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPException\BadRequestException;
+use Friendica\Network\HTTPException\FoundException;
+use Friendica\Network\HTTPException\MovedPermanentlyException;
+use Friendica\Network\HTTPException\TemporaryRedirectException;
use Friendica\Util\XML;
/**
*/
public static function httpExit($val, $message = '', $content = '')
{
- Logger::log('http_status_exit ' . $val);
+ if ($val >= 400) {
+ Logger::debug('Exit with error', ['code' => $val, 'message' => $message, 'callstack' => System::callstack(20), 'method' => $_SERVER['REQUEST_METHOD'], 'agent' => $_SERVER['HTTP_USER_AGENT'] ?? '']);
+ }
header($_SERVER["SERVER_PROTOCOL"] . ' ' . $val . ' ' . $message);
echo $content;
public static function jsonError($httpCode, $data, $content_type = 'application/json')
{
+ if ($httpCode >= 400) {
+ Logger::debug('Exit with error', ['code' => $httpCode, 'content_type' => $content_type, 'callstack' => System::callstack(20), 'method' => $_SERVER['REQUEST_METHOD'], 'agent' => $_SERVER['HTTP_USER_AGENT'] ?? '']);
+ }
header($_SERVER["SERVER_PROTOCOL"] . ' ' . $httpCode);
self::jsonExit($data, $content_type);
}
* @param string $url The new Location to redirect
* @param int $code The redirection code, which is used (Default is 302)
*
- * @throws InternalServerErrorException If the URL is not fully qualified
+ * @throws BadRequestException If the URL is not fully qualified
*/
public static function externalRedirect($url, $code = 302)
{
if (empty(parse_url($url, PHP_URL_SCHEME))) {
- throw new InternalServerErrorException("'$url' is not a fully qualified URL, please use App->internalRedirect() instead");
+ throw new BadRequestException("'$url' is not a fully qualified URL, please use App->internalRedirect() instead");
}
+ header("Location: $url");
+
switch ($code) {
case 302:
- // this is the default code for a REDIRECT
- // We don't need a extra header here
- break;
+ throw new FoundException();
case 301:
- header('HTTP/1.1 301 Moved Permanently');
- break;
+ throw new MovedPermanentlyException();
case 307:
- header('HTTP/1.1 307 Temporary Redirect');
- break;
+ throw new TemporaryRedirectException();
}
- header("Location: $url");
exit();
}
use Friendica\Core\Config\Cache;
use Friendica\Core\System;
-use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPException\ServiceUnavailableException;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Profiler;
use mysqli;
$called_from_e = ($called_from['function'] == 'e');
if (!isset($this->connection)) {
- throw new InternalServerErrorException('The Connection is empty, although connected is set true.');
+ throw new ServiceUnavailableException('The Connection is empty, although connected is set true.');
}
switch ($this->driver) {
use Friendica\BaseFactory;
use Friendica\Database\Database;
-use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPException\UnprocessableEntityException;
use Psr\Log\LoggerInterface;
class Application extends BaseFactory
*
* @return \Friendica\Object\Api\Mastodon\Application
*
- * @throws InternalServerErrorException
+ * @throws UnprocessableEntityException
*/
public function createFromApplicationId(int $id): \Friendica\Object\Api\Mastodon\Application
{
$application = $this->dba->selectFirst('application', ['client_id', 'client_secret', 'id', 'name', 'redirect_uri', 'website'], ['id' => $id]);
if (!$this->dba->isResult($application)) {
- throw new InternalServerErrorException(sprintf("ID '%s' not found", $id));
+ throw new UnprocessableEntityException(sprintf("ID '%s' not found", $id));
}
return new \Friendica\Object\Api\Mastodon\Application(
use Friendica\Factory\ConfigFactory;
use Friendica\Model\Register;
use Friendica\Module\BaseAdmin;
-use Friendica\Network\HTTPException\InternalServerErrorException;
-use Friendica\Util\ConfigFileLoader;
+use Friendica\Network\HTTPException\ServiceUnavailableException;
use Friendica\Util\DateTimeFormat;
class Summary extends BaseAdmin
$stream = $fileSystem->createStream($file);
if (!isset($stream)) {
- throw new InternalServerErrorException('Stream is null.');
+ throw new ServiceUnavailableException('Stream is null.');
}
} catch (\Throwable $exception) {
$stream = $fileSystem->createStream($file);
if (!isset($stream)) {
- throw new InternalServerErrorException('Stream is null.');
+ throw new ServiceUnavailableException('Stream is null.');
}
}
} catch (\Throwable $exception) {
if (Diaspora::dispatch($importer, $msg)) {
throw new HTTPException\OKException();
} else {
- throw new HTTPException\InternalServerErrorException();
+ // We couldn't process the content.
+ // To avoid the remote system trying again we send the message that we accepted the content.
+ throw new HTTPException\AcceptedException();
}
}
use Friendica\DI;
use Friendica\Model\User;
use Friendica\Network\HTTPException;
+use Friendica\Network\HTTPException\ImATeapotException;
use Friendica\Protocol\ActivityPub;
/**
use Friendica\Model\Storage\SystemResource;
use Friendica\Model\User;
use Friendica\Network\HTTPException;
+use Friendica\Network\HTTPException\NotModifiedException;
use Friendica\Object\Image;
use Friendica\Util\Images;
use Friendica\Util\Network;
$totalstamp = microtime(true);
if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
- header("HTTP/1.1 304 Not Modified");
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
if (!empty($_SERVER["HTTP_IF_NONE_MATCH"])) {
header("Etag: " . $_SERVER["HTTP_IF_NONE_MATCH"]);
header_remove("Expires");
header_remove("Cache-Control");
}
- exit;
+ throw new NotModifiedException();
}
Profile::addVisitorCookieForHTTPSigner();
use Friendica\Core\Logger;
use Friendica\Core\System;
use Friendica\DI;
+use Friendica\Network\HTTPException\NotModifiedException;
use Friendica\Object\Image;
use Friendica\Util\HTTPSignature;
use Friendica\Util\Images;
}
if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
- header("HTTP/1.1 304 Not Modified");
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
if (!empty($_SERVER["HTTP_IF_NONE_MATCH"])) {
header("Etag: " . $_SERVER["HTTP_IF_NONE_MATCH"]);
header_remove("Expires");
header_remove("Cache-Control");
}
- exit;
+ throw new NotModifiedException();
}
if (empty($request['url'])) {
namespace Friendica\Module\Special;
+use Friendica\Core\Logger;
use Friendica\Core\Renderer;
use Friendica\Core\System;
use Friendica\DI;
*/
private static function getVars(\Friendica\Network\HTTPException $e)
{
- $message = $e->getMessage();
-
- $titles = [
- 200 => 'OK',
- 400 => DI::l10n()->t('Bad Request'),
- 401 => DI::l10n()->t('Unauthorized'),
- 403 => DI::l10n()->t('Forbidden'),
- 404 => DI::l10n()->t('Not Found'),
- 500 => DI::l10n()->t('Internal Server Error'),
- 503 => DI::l10n()->t('Service Unavailable'),
- ];
- $title = ($titles[$e->getCode()] ?? '') ?: 'Error ' . $e->getCode();
-
- if (empty($message)) {
- // Explanations are taken from https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
- $explanation = [
- 400 => DI::l10n()->t('The server cannot or will not process the request due to an apparent client error.'),
- 401 => DI::l10n()->t('Authentication is required and has failed or has not yet been provided.'),
- 403 => DI::l10n()->t('The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account.'),
- 404 => DI::l10n()->t('The requested resource could not be found but may be available in the future.'),
- 500 => DI::l10n()->t('An unexpected condition was encountered and no more specific message is suitable.'),
- 503 => DI::l10n()->t('The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later.'),
- ];
-
- $message = $explanation[$e->getCode()] ?? '';
- }
-
+ // Explanations are mostly taken from https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
$vars = [
- '$title' => $title,
- '$message' => $message,
+ '$title' => $e->httpdesc ?: 'Error ' . $e->getCode(),
+ '$message' => $e->getMessage() ?: $e->explanation,
'$back' => DI::l10n()->t('Go back'),
'$stack_trace' => DI::l10n()->t('Stack trace:'),
];
{
header($_SERVER["SERVER_PROTOCOL"] . ' ' . $e->getCode() . ' ' . $e->httpdesc);
+ if ($e->getCode() >= 400) {
+ Logger::debug('Exit with error', ['code' => $e->getCode(), 'description' => $e->httpdesc, 'query' => DI::args()->getQueryString(), 'callstack' => System::callstack(20), 'method' => $_SERVER['REQUEST_METHOD'], 'agent' => $_SERVER['HTTP_USER_AGENT'] ?? '']);
+ }
+
$tpl = Renderer::getMarkupTemplate('exception.tpl');
return Renderer::replaceMacros($tpl, self::getVars($e));
namespace Friendica\Network;
use Friendica\Core\Logger;
-use Friendica\Core\System;
-use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPException\UnprocessableEntityException;
use Friendica\Util\Network;
/**
* @param string $url optional URL
*
* @return IHTTPResult a CURL with error response
- * @throws InternalServerErrorException
+ * @throws UnprocessableEntityException
*/
public static function createErrorCurl($url = '')
{
* @param int $errorNumber the error number or 0 (zero) if no error
* @param string $error the error message or '' (the empty string) if no
*
- * @throws InternalServerErrorException when HTTP code of the CURL response is missing
+ * @throws UnprocessableEntityException when HTTP code of the CURL response is missing
*/
public function __construct($url, $result, $info, $errorNumber = 0, $error = '')
{
if (!array_key_exists('http_code', $info)) {
- throw new InternalServerErrorException('CURL response doesn\'t contains a response HTTP code');
+ throw new UnprocessableEntityException('CURL response doesn\'t contains a response HTTP code');
}
$this->returnCode = $info['http_code'];
*/
abstract class HTTPException extends Exception
{
- public $httpdesc = '';
+ public $httpdesc = '';
+ public $explanation = '';
public function __construct($message = '', Exception $previous = null)
{
parent::__construct($message, $this->code, $previous);
-
- if (empty($this->httpdesc)) {
- $classname = str_replace('Exception', '', str_replace('Friendica\Network\HTTPException\\', '', get_class($this)));
- $this->httpdesc = preg_replace("|([a-z])([A-Z])|",'$1 $2', $classname);
- }
}
}
class AcceptedException extends HTTPException
{
protected $code = 202;
+ var $httpdesc = 'Accepted';
}
class BadGatewayException extends HTTPException
{
- protected $code = 502;
+ protected $code = 502;
+ var $httpdesc = 'Bad Gateway';
+ var $explanation = 'The server was acting as a gateway or proxy and received an invalid response from the upstream server.';
}
class BadRequestException extends HTTPException
{
- protected $code = 400;
+ protected $code = 400;
+ var $httpdesc = 'Bad Request';
+ var $explanation = 'The server cannot or will not process the request due to an apparent client error.';
}
class ConflictException extends HTTPException
{
- protected $code = 409;
+ protected $code = 409;
+ var $httpdesc = 'Conflict ';
+ var $explanation = 'Indicates that the request could not be processed because of conflict in the current state of the resource, such as an edit conflict between multiple simultaneous updates.';
}
class ExpectationFailedException extends HTTPException
{
- protected $code = 417;
+ protected $code = 417;
+ var $httpdesc = 'Expectation Failed';
+ var $explanation = 'The server cannot meet the requirements of the Expect request-header field.';
}
class ForbiddenException extends HTTPException
{
- protected $code = 403;
+ protected $code = 403;
+ var $httpdesc = 'Forbidden';
+ var $explanation = 'The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account.';
}
--- /dev/null
+<?php
+/**
+ * @copyright Copyright (C) 2010-2021, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Network\HTTPException;
+
+use Friendica\Network\HTTPException;
+
+class FoundException extends HTTPException
+{
+ protected $code = 302;
+ var $httpdesc = 'Found (Moved Temporarily)';
+}
class GatewayTimeoutException extends HTTPException
{
- protected $code = 504;
+ protected $code = 504;
+ var $httpdesc = 'Gateway Timeout';
+ var $explanation = 'The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.';
}
class GoneException extends HTTPException
{
- protected $code = 410;
+ protected $code = 410;
+ var $httpdesc = 'Gone';
+ var $explanation = 'Indicates that the resource requested is no longer available and will not be available again.';
}
class ImATeapotException extends HTTPException
{
- protected $code = 418;
- var $httpdesc = "I'm A Teapot";
+ protected $code = 418;
+ var $httpdesc = "I'm A Teapot";
+ var $explanation = 'This is a teapot that is requested to brew coffee.';
}
class InternalServerErrorException extends HTTPException
{
- protected $code = 500;
+ protected $code = 500;
+ var $httpdesc = 'Internal Server Error';
+ var $explanation = 'An unexpected condition was encountered and no more specific message is suitable.';
}
class LenghtRequiredException extends HTTPException
{
- protected $code = 411;
+ protected $code = 411;
+ var $httpdesc = 'Length Required';
+ var $explanation = 'The request did not specify the length of its content, which is required by the requested resource.';
}
class MethodNotAllowedException extends HTTPException
{
- protected $code = 405;
+ protected $code = 405;
+ var $httpdesc = 'Method Not Allowed';
+ var $explanation = 'A request method is not supported for the requested resource; for example, a GET request on a form that requires data to be presented via POST, or a PUT request on a read-only resource.';
}
--- /dev/null
+<?php
+/**
+ * @copyright Copyright (C) 2010-2021, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Network\HTTPException;
+
+use Friendica\Network\HTTPException;
+
+class MovedPermanentlyException extends HTTPException
+{
+ protected $code = 301;
+ var $httpdesc = 'Moved Permanently';
+}
class NoContentException extends HTTPException
{
protected $code = 204;
+ var $httpdesc = 'No Content';
}
class NonAcceptableException extends HTTPException
{
- protected $code = 406;
+ protected $code = 406;
+ var $httpdesc = 'Not Acceptable';
+ var $explanation = 'The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request.';
}
class NotFoundException extends HTTPException
{
- protected $code = 404;
+ protected $code = 404;
+ var $httpdesc = 'Not Found';
+ var $explanation = 'The requested resource could not be found but may be available in the future.';
}
class NotImplementedException extends HTTPException
{
- protected $code = 501;
+ protected $code = 501;
+ var $httpdesc = 'Not Implemented';
+ var $explanation = 'The server either does not recognize the request method, or it lacks the ability to fulfil the request. Usually this implies future availability (e.g., a new feature of a web-service API).';
}
--- /dev/null
+<?php
+/**
+ * @copyright Copyright (C) 2010-2021, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Network\HTTPException;
+
+use Friendica\Network\HTTPException;
+
+class NotModifiedException extends HTTPException
+{
+ protected $code = 304;
+ var $httpdesc = 'Not Modified';
+}
class OKException extends HTTPException
{
protected $code = 200;
+ var $httpdesc = 'OK';
}
class PreconditionFailedException extends HTTPException
{
- protected $code = 412;
+ protected $code = 412;
+ var $httpdesc = 'Precondition Failed';
+ var $explanation = 'The server does not meet one of the preconditions that the requester put on the request header fields.';
}
class ServiceUnavailableException extends HTTPException
{
- protected $code = 503;
+ protected $code = 503;
+ var $httpdesc = 'Service Unavailable';
+ var $explanation = 'The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later.';
}
--- /dev/null
+<?php
+/**
+ * @copyright Copyright (C) 2010-2021, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Network\HTTPException;
+
+use Friendica\Network\HTTPException;
+
+class TemporaryRedirectException extends HTTPException
+{
+ protected $code = 307;
+ var $httpdesc = 'Temporary Redirect';
+}
class TooManyRequestsException extends HTTPException
{
- protected $code = 429;
+ protected $code = 429;
+ var $httpdesc = 'Too Many Requests';
+ var $explanation = 'The user has sent too many requests in a given amount of time.';
}
class UnauthorizedException extends HTTPException
{
- protected $code = 401;
+ protected $code = 401;
+ var $httpdesc = 'Unauthorized';
+ var $explanation = 'Authentication is required and has failed or has not yet been provided.';
}
class UnprocessableEntityException extends HTTPException
{
- protected $code = 422;
+ protected $code = 422;
+ var $httpdesc = 'Unprocessable Entity';
+ var $explanation = 'The request was well-formed but was unable to be followed due to semantic errors.';
}
class UnsupportedMediaTypeException extends HTTPException
{
- protected $code = 415;
+ protected $code = 415;
+ var $httpdesc = 'Unsupported Media Type';
+ var $explanation = 'The request entity has a media type which the server or resource does not support. For example, the client uploads an image as image/svg+xml, but the server requires that images use a different format.';
}
use Friendica\Core\Hook;
use Friendica\DI;
-use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPException\ServiceUnavailableException;
use Friendica\Util\Strings;
/**
$message = is_site_admin() ?
$admin_message :
DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.');
- throw new InternalServerErrorException($message);
+ throw new ServiceUnavailableException($message);
}
}
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
use Friendica\Model\User;
-use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPException\UnprocessableEntityException;
use Friendica\Object\Email;
use Friendica\Object\EMail\IEmail;
use Psr\Log\LoggerInterface;
*
* @return IEmail A new generated email
*
- * @throws InternalServerErrorException
+ * @throws UnprocessableEntityException
* @throws Exception
*/
public function build(bool $raw = false)
}
if (empty($this->recipientAddress)) {
- throw new InternalServerErrorException('Recipient address is missing.');
+ throw new UnprocessableEntityException('Recipient address is missing.');
}
if (empty($this->senderAddress) || empty($this->senderName)) {
- throw new InternalServerErrorException('Sender address or name is missing.');
+ throw new UnprocessableEntityException('Sender address or name is missing.');
}
$this->senderNoReply = $this->senderNoReply ?? $this->senderAddress;
public static function getSigner($content, $http_headers)
{
if (empty($http_headers['HTTP_SIGNATURE'])) {
- Logger::info('No HTTP_SIGNATURE header');
+ Logger::debug('No HTTP_SIGNATURE header');
return false;
}
use Friendica\Core\Logger;
use Friendica\DI;
use Friendica\Model\Contact;
+use Friendica\Network\HTTPException\NotModifiedException;
class Network
{
header('Last-Modified: ' . $last_modified);
if ($flag_not_modified) {
- header("HTTP/1.1 304 Not Modified");
- exit;
+ throw new NotModifiedException();
}
}
private static function notifySelfRemoval($self_user_id, $priority, $created)
{
$owner = User::getOwnerDataById($self_user_id);
- if (!$owner) {
+ if (empty($self_user_id) || empty($owner)) {
return false;
}
*/
use Friendica\DI;
+use Friendica\Network\HTTPException\NotModifiedException;
use Friendica\Util\Strings;
require_once 'view/theme/frio/theme.php';
stripslashes($_SERVER['HTTP_IF_NONE_MATCH']));
if (($cached_modified == $modified) && ($cached_etag == $etag)) {
- header('HTTP/1.1 304 Not Modified');
- exit();
+ throw new NotModifiedException();
}
}
use Friendica\Core\Logger;
use Friendica\DI;
+use Friendica\Network\HTTPException\NotModifiedException;
$uid = $_REQUEST['puid'] ?? 0;
stripslashes($_SERVER['HTTP_IF_NONE_MATCH']));
if (($cached_modified == $modified) && ($cached_etag == $etag)) {
- header('HTTP/1.1 304 Not Modified');
- exit();
+ throw new NotModifiedException();
}
}
echo $stylecss;