diff --git a/include/api.php b/include/api.php
index 9ed7d74218..b291b6e002 100644
--- a/include/api.php
+++ b/include/api.php
@@ -391,6 +391,7 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $
return prepare_photo_data($type, false, $resource_id, $uid);
} else {
throw new InternalServerErrorException("image upload failed");
+ DI::page()->exit(DI::apiResponse());
}
}
diff --git a/src/App.php b/src/App.php
index f3f7429db0..d4e3021f82 100644
--- a/src/App.php
+++ b/src/App.php
@@ -702,7 +702,11 @@ class App
// 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);
+ if ($response->getType() === $response::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);
}
diff --git a/src/App/Page.php b/src/App/Page.php
index 7996dca94f..7019d45985 100644
--- a/src/App/Page.php
+++ b/src/App/Page.php
@@ -371,6 +371,24 @@ class Page implements ArrayAccess
$this->footerScripts[] = trim($url, '/');
}
+ /**
+ * Directly exit with the current response (include setting all headers)
+ *
+ * @param IRespondToRequests $response
+ */
+ public function exit(IRespondToRequests $response)
+ {
+ foreach ($response->getHeaders() as $key => $header) {
+ if (empty($key)) {
+ header($header);
+ } else {
+ header("$key: $header");
+ }
+ }
+
+ echo $response->getContent();
+ }
+
/**
* Executes the creation of the current page and prints it to the screen
*
@@ -434,13 +452,11 @@ class Page implements ArrayAccess
$this->page['nav'] = Nav::build($app);
}
- foreach ($response->getHeaders() as $key => $values) {
- if (is_array($values)) {
- foreach ($values as $value) {
- header($key, $value);
- }
+ foreach ($response->getHeaders() as $key => $header) {
+ if (empty($key)) {
+ header($header);
} else {
- header($key, $values);
+ header("$key: $header");
}
}
diff --git a/src/BaseModule.php b/src/BaseModule.php
index c68af875d7..423e11c7a5 100644
--- a/src/BaseModule.php
+++ b/src/BaseModule.php
@@ -23,7 +23,7 @@ namespace Friendica;
use Friendica\App\Router;
use Friendica\Capabilities\ICanHandleRequests;
-use Friendica\Capabilities\ICanReadAndWriteToResponds;
+use Friendica\Capabilities\ICanCreateResponses;
use Friendica\Capabilities\IRespondToRequests;
use Friendica\Core\Hook;
use Friendica\Core\L10n;
@@ -60,7 +60,7 @@ abstract class BaseModule implements ICanHandleRequests
protected $profiler;
/** @var array */
protected $server;
- /** @var ICanReadAndWriteToResponds */
+ /** @var ICanCreateResponses */
protected $response;
public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
@@ -168,12 +168,6 @@ abstract class BaseModule implements ICanHandleRequests
{
}
- /** Gets the name of the current class */
- public function getClassName(): string
- {
- return static::class;
- }
-
/**
* {@inheritDoc}
*/
@@ -211,27 +205,23 @@ abstract class BaseModule implements ICanHandleRequests
Core\Hook::callAll($this->args->getModuleName() . '_mod_init', $placeholder);
$this->profiler->set(microtime(true) - $timestamp, 'init');
- $this->response->setType(IRespondToRequests::TYPE_CONTENT);
- switch ($this->server['REQUEST_METHOD']) {
+ switch ($this->server['REQUEST_METHOD'] ?? Router::GET) {
case Router::DELETE:
- $this->response->setType(IRespondToRequests::TYPE_DELETE);
$this->delete();
break;
case Router::PATCH:
- $this->response->setType(IRespondToRequests::TYPE_PATCH);
$this->patch();
break;
case Router::POST:
Core\Hook::callAll($this->args->getModuleName() . '_mod_post', $post);
- $this->response->setType(IRespondToRequests::TYPE_POST);
$this->post($request, $post);
break;
case Router::PUT:
- $this->response->setType(IRespondToRequests::TYPE_PUT);
$this->put();
break;
default:
+ $timestamp = microtime(true);
// "rawContent" is especially meant for technical endpoints.
// This endpoint doesn't need any theme initialization or other comparable stuff.
$this->rawContent($request);
@@ -243,6 +233,8 @@ abstract class BaseModule implements ICanHandleRequests
$this->response->addContent($this->content($_REQUEST));
} catch (HTTPException $e) {
$this->response->addContent((new ModuleHTTPException())->content($e));
+ } finally {
+ $this->profiler->set(microtime(true) - $timestamp, 'content');
}
break;
}
diff --git a/src/Capabilities/ICanCreateResponses.php b/src/Capabilities/ICanCreateResponses.php
new file mode 100644
index 0000000000..282458136b
--- /dev/null
+++ b/src/Capabilities/ICanCreateResponses.php
@@ -0,0 +1,33 @@
+l10n = $l10n;
$this->args = $args;
$this->logger = $logger;
- $this->baseurl = $baseurl;
- $this->twitterUser = $twitteruser;
- }
-
- /**
- * Sets header directly
- * mainly used to override it for tests
- *
- * @param string $header
- */
- protected function setHeader(string $header)
- {
- header($header);
- }
-
- /**
- * Prints output directly to the caller
- * mainly used to override it for tests
- *
- * @param string $output
- */
- protected function printOutput(string $output)
- {
- echo $output;
- exit;
+ $this->baseUrl = $baseUrl;
+ $this->twitterUser = $twitterUser;
}
/**
@@ -125,12 +102,12 @@ class ApiResponse
$arr['$user'] = $user_info;
$arr['$rss'] = [
'alternate' => $user_info['url'],
- 'self' => $this->baseurl . '/' . $this->args->getQueryString(),
- 'base' => $this->baseurl,
+ 'self' => $this->baseUrl . '/' . $this->args->getQueryString(),
+ 'base' => $this->baseUrl,
'updated' => DateTimeFormat::utc(null, DateTimeFormat::API),
'atom_updated' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
'language' => $user_info['lang'],
- 'logo' => $this->baseurl . '/images/friendica-32.png',
+ 'logo' => $this->baseUrl . '/images/friendica-32.png',
];
return $arr;
@@ -242,7 +219,7 @@ class ApiResponse
break;
}
- $this->printOutput($return);
+ $this->addContent($return);
}
/**
diff --git a/src/Module/Api/Friendica/Activity.php b/src/Module/Api/Friendica/Activity.php
index c65d32d0e7..aaab6417fb 100644
--- a/src/Module/Api/Friendica/Activity.php
+++ b/src/Module/Api/Friendica/Activity.php
@@ -57,9 +57,9 @@ class Activity extends BaseApi
} else {
$ok = 'ok';
}
- DI::apiResponse()->exit('ok', ['ok' => $ok], $this->parameters['extension'] ?? null);
+ $this->response->exit('ok', ['ok' => $ok], $this->parameters['extension'] ?? null);
} else {
- DI::apiResponse()->error(500, 'Error adding activity', '', $this->parameters['extension'] ?? null);
+ $this->response->error(500, 'Error adding activity', '', $this->parameters['extension'] ?? null);
}
}
}
diff --git a/src/Module/Api/Friendica/DirectMessages/Setseen.php b/src/Module/Api/Friendica/DirectMessages/Setseen.php
index 6e1f3675fc..d64b4ee15d 100644
--- a/src/Module/Api/Friendica/DirectMessages/Setseen.php
+++ b/src/Module/Api/Friendica/DirectMessages/Setseen.php
@@ -42,13 +42,15 @@ class Setseen extends BaseApi
// return error if id is zero
if (empty($request['id'])) {
$answer = ['result' => 'error', 'message' => 'message id not specified'];
- DI::apiResponse()->exit('direct_messages_setseen', ['$result' => $answer], $this->parameters['extension'] ?? null);
+ $this->response->exit('direct_messages_setseen', ['$result' => $answer], $this->parameters['extension'] ?? null);
+ return;
}
// error message if specified id is not in database
if (!DBA::exists('mail', ['id' => $request['id'], 'uid' => $uid])) {
$answer = ['result' => 'error', 'message' => 'message id not in database'];
- DI::apiResponse()->exit('direct_messages_setseen', ['$result' => $answer], $this->parameters['extension'] ?? null);
+ $this->response->exit('direct_messages_setseen', ['$result' => $answer], $this->parameters['extension'] ?? null);
+ return;
}
// update seen indicator
@@ -58,6 +60,6 @@ class Setseen extends BaseApi
$answer = ['result' => 'error', 'message' => 'unknown error'];
}
- DI::apiResponse()->exit('direct_messages_setseen', ['$result' => $answer], $this->parameters['extension'] ?? null);
+ $this->response->exit('direct_messages_setseen', ['$result' => $answer], $this->parameters['extension'] ?? null);
}
}
diff --git a/src/Module/Api/Friendica/Events/Index.php b/src/Module/Api/Friendica/Events/Index.php
index 177e26f52b..86f79578d1 100644
--- a/src/Module/Api/Friendica/Events/Index.php
+++ b/src/Module/Api/Friendica/Events/Index.php
@@ -70,6 +70,6 @@ class Index extends BaseApi
];
}
- DI::apiResponse()->exit('events', ['events' => $items], $this->parameters['extension'] ?? null);
+ $this->response->exit('events', ['events' => $items], $this->parameters['extension'] ?? null);
}
}
diff --git a/src/Module/Api/Friendica/Group/Delete.php b/src/Module/Api/Friendica/Group/Delete.php
index 9583c003d7..56b3445c0d 100644
--- a/src/Module/Api/Friendica/Group/Delete.php
+++ b/src/Module/Api/Friendica/Group/Delete.php
@@ -70,7 +70,7 @@ class Delete extends BaseApi
if ($ret) {
// return success
$success = ['success' => $ret, 'gid' => $request['gid'], 'name' => $request['name'], 'status' => 'deleted', 'wrong users' => []];
- DI::apiResponse()->exit('group_delete', ['$result' => $success], $parameters['extension'] ?? null);
+ $this->response->exit('group_delete', ['$result' => $success], $parameters['extension'] ?? null);
} else {
throw new BadRequestException('other API error');
}
diff --git a/src/Module/Api/Friendica/Notification.php b/src/Module/Api/Friendica/Notification.php
index 76bce7de27..597f3d6811 100644
--- a/src/Module/Api/Friendica/Notification.php
+++ b/src/Module/Api/Friendica/Notification.php
@@ -56,6 +56,6 @@ class Notification extends BaseApi
$result = false;
}
- DI::apiResponse()->exit('notes', ['note' => $result], $this->parameters['extension'] ?? null);
+ $this->response->exit('notes', ['note' => $result], $this->parameters['extension'] ?? null);
}
}
diff --git a/src/Module/Api/Friendica/Photo/Delete.php b/src/Module/Api/Friendica/Photo/Delete.php
index 7da819a7a2..2edf398aab 100644
--- a/src/Module/Api/Friendica/Photo/Delete.php
+++ b/src/Module/Api/Friendica/Photo/Delete.php
@@ -64,7 +64,7 @@ class Delete extends BaseApi
Item::deleteForUser($condition, $uid);
$result = ['result' => 'deleted', 'message' => 'photo with id `' . $request['photo_id'] . '` has been deleted from server.'];
- DI::apiResponse()->exit('photo_delete', ['$result' => $result], $this->parameters['extension'] ?? null);
+ $this->response->exit('photo_delete', ['$result' => $result], $this->parameters['extension'] ?? null);
} else {
throw new InternalServerErrorException("unknown error on deleting photo from database table");
}
diff --git a/src/Module/Api/Friendica/Photoalbum/Delete.php b/src/Module/Api/Friendica/Photoalbum/Delete.php
index a8bb5d45e9..c7592a5eaf 100644
--- a/src/Module/Api/Friendica/Photoalbum/Delete.php
+++ b/src/Module/Api/Friendica/Photoalbum/Delete.php
@@ -67,7 +67,7 @@ class Delete extends BaseApi
// return success of deletion or error message
if ($result) {
$answer = ['result' => 'deleted', 'message' => 'album `' . $request['album'] . '` with all containing photos has been deleted.'];
- DI::apiResponse()->exit('photoalbum_delete', ['$result' => $answer], $this->parameters['extension'] ?? null);
+ $this->response->exit('photoalbum_delete', ['$result' => $answer], $this->parameters['extension'] ?? null);
} else {
throw new InternalServerErrorException("unknown error - deleting from database failed");
}
diff --git a/src/Module/Api/Friendica/Photoalbum/Update.php b/src/Module/Api/Friendica/Photoalbum/Update.php
index d4d6017909..87513c5ad4 100644
--- a/src/Module/Api/Friendica/Photoalbum/Update.php
+++ b/src/Module/Api/Friendica/Photoalbum/Update.php
@@ -59,7 +59,7 @@ class Update extends BaseApi
// return success of updating or error message
if ($result) {
$answer = ['result' => 'updated', 'message' => 'album `' . $request['album'] . '` with all containing photos has been renamed to `' . $request['album_new'] . '`.'];
- DI::apiResponse()->exit('photoalbum_update', ['$result' => $answer], $this->parameters['extension'] ?? null);
+ $this->response->exit('photoalbum_update', ['$result' => $answer], $this->parameters['extension'] ?? null);
} else {
throw new InternalServerErrorException("unknown error - updating in database failed");
}
diff --git a/src/Module/Api/Friendica/Profile/Show.php b/src/Module/Api/Friendica/Profile/Show.php
index 27a19f48e5..6e77f9731e 100644
--- a/src/Module/Api/Friendica/Profile/Show.php
+++ b/src/Module/Api/Friendica/Profile/Show.php
@@ -61,7 +61,7 @@ class Show extends BaseApi
'profiles' => $profiles
];
- DI::apiResponse()->exit('friendica_profiles', ['$result' => $result], $this->parameters['extension'] ?? null);
+ $this->response->exit('friendica_profiles', ['$result' => $result], $this->parameters['extension'] ?? null);
}
/**
diff --git a/src/Module/Api/GNUSocial/GNUSocial/Config.php b/src/Module/Api/GNUSocial/GNUSocial/Config.php
index a3556fcdd9..094fd5a100 100644
--- a/src/Module/Api/GNUSocial/GNUSocial/Config.php
+++ b/src/Module/Api/GNUSocial/GNUSocial/Config.php
@@ -61,6 +61,6 @@ class Config extends BaseApi
],
];
- DI::apiResponse()->exit('config', ['config' => $config], $this->parameters['extension'] ?? null);
+ $this->response->exit('config', ['config' => $config], $this->parameters['extension'] ?? null);
}
}
diff --git a/src/Module/Api/GNUSocial/GNUSocial/Version.php b/src/Module/Api/GNUSocial/GNUSocial/Version.php
index 67f23628c1..9b2afe128e 100644
--- a/src/Module/Api/GNUSocial/GNUSocial/Version.php
+++ b/src/Module/Api/GNUSocial/GNUSocial/Version.php
@@ -31,6 +31,6 @@ class Version extends BaseApi
{
protected function rawContent(array $request = [])
{
- DI::apiResponse()->exit('version', ['version' => '0.9.7'], $this->parameters['extension'] ?? null);
+ $this->response->exit('version', ['version' => '0.9.7'], $this->parameters['extension'] ?? null);
}
}
diff --git a/src/Module/Api/GNUSocial/Help/Test.php b/src/Module/Api/GNUSocial/Help/Test.php
index e2f05183e6..0a2ef6f831 100644
--- a/src/Module/Api/GNUSocial/Help/Test.php
+++ b/src/Module/Api/GNUSocial/Help/Test.php
@@ -37,6 +37,6 @@ class Test extends BaseApi
$ok = 'ok';
}
- DI::apiResponse()->exit('ok', ['ok' => $ok], $this->parameters['extension'] ?? null);
+ $this->response->exit('ok', ['ok' => $ok], $this->parameters['extension'] ?? null);
}
}
diff --git a/src/Module/Api/Mastodon/Accounts/UpdateCredentials.php b/src/Module/Api/Mastodon/Accounts/UpdateCredentials.php
index 1a390d4a1f..8d9fb48695 100644
--- a/src/Module/Api/Mastodon/Accounts/UpdateCredentials.php
+++ b/src/Module/Api/Mastodon/Accounts/UpdateCredentials.php
@@ -23,7 +23,6 @@ namespace Friendica\Module\Api\Mastodon\Accounts;
use Friendica\App\Router;
use Friendica\Core\Logger;
-use Friendica\DI;
use Friendica\Module\BaseApi;
use Friendica\Util\HTTPInputData;
@@ -41,6 +40,6 @@ class UpdateCredentials extends BaseApi
Logger::info('Patch data', ['data' => $data]);
- DI::apiResponse()->unsupported(Router::PATCH);
+ $this->response->unsupported(Router::PATCH);
}
}
diff --git a/src/Module/Api/Mastodon/Filters.php b/src/Module/Api/Mastodon/Filters.php
index 38fc27ebc0..3c902bc17b 100644
--- a/src/Module/Api/Mastodon/Filters.php
+++ b/src/Module/Api/Mastodon/Filters.php
@@ -35,7 +35,7 @@ class Filters extends BaseApi
{
self::checkAllowedScope(self::SCOPE_WRITE);
- DI::apiResponse()->unsupported(Router::POST);
+ $this->response->unsupported(Router::POST);
}
/**
diff --git a/src/Module/Api/Mastodon/Lists/Accounts.php b/src/Module/Api/Mastodon/Lists/Accounts.php
index 66d6f068ec..be87dbf9d1 100644
--- a/src/Module/Api/Mastodon/Lists/Accounts.php
+++ b/src/Module/Api/Mastodon/Lists/Accounts.php
@@ -25,7 +25,6 @@ use Friendica\App\Router;
use Friendica\Core\System;
use Friendica\Database\DBA;
use Friendica\DI;
-use Friendica\Module\Api\ApiResponse;
use Friendica\Module\BaseApi;
/**
@@ -37,12 +36,12 @@ class Accounts extends BaseApi
{
protected function delete()
{
- DI::apiResponse()->unsupported(Router::DELETE);
+ $this->response->unsupported(Router::DELETE);
}
protected function post(array $request = [], array $post = [])
{
- DI::apiResponse()->unsupported(Router::POST);
+ $this->response->unsupported(Router::POST);
}
/**
diff --git a/src/Module/Api/Mastodon/Markers.php b/src/Module/Api/Mastodon/Markers.php
index 5cd38925e4..9f208e9262 100644
--- a/src/Module/Api/Mastodon/Markers.php
+++ b/src/Module/Api/Mastodon/Markers.php
@@ -35,7 +35,7 @@ class Markers extends BaseApi
{
self::checkAllowedScope(self::SCOPE_WRITE);
- DI::apiResponse()->unsupported(Router::POST);
+ $this->response->unsupported(Router::POST);
}
/**
diff --git a/src/Module/Api/Mastodon/ScheduledStatuses.php b/src/Module/Api/Mastodon/ScheduledStatuses.php
index 605aaeb6d6..e79d1e153f 100644
--- a/src/Module/Api/Mastodon/ScheduledStatuses.php
+++ b/src/Module/Api/Mastodon/ScheduledStatuses.php
@@ -26,7 +26,6 @@ use Friendica\Core\System;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Post;
-use Friendica\Module\Api\ApiResponse;
use Friendica\Module\BaseApi;
/**
@@ -39,7 +38,7 @@ class ScheduledStatuses extends BaseApi
self::checkAllowedScope(self::SCOPE_WRITE);
$uid = self::getCurrentUserID();
- DI::apiResponse()->unsupported(Router::PUT);
+ $this->response->unsupported(Router::PUT);
}
protected function delete()
diff --git a/src/Module/Api/Mastodon/Unimplemented.php b/src/Module/Api/Mastodon/Unimplemented.php
index 9874b504a7..22111781bb 100644
--- a/src/Module/Api/Mastodon/Unimplemented.php
+++ b/src/Module/Api/Mastodon/Unimplemented.php
@@ -22,7 +22,6 @@
namespace Friendica\Module\Api\Mastodon;
use Friendica\App\Router;
-use Friendica\DI;
use Friendica\Module\BaseApi;
/**
@@ -35,7 +34,7 @@ class Unimplemented extends BaseApi
*/
protected function delete()
{
- DI::apiResponse()->unsupported(Router::DELETE);
+ $this->response->unsupported(Router::DELETE);
}
/**
@@ -43,7 +42,7 @@ class Unimplemented extends BaseApi
*/
protected function patch()
{
- DI::apiResponse()->unsupported(Router::PATCH);
+ $this->response->unsupported(Router::PATCH);
}
/**
@@ -51,7 +50,7 @@ class Unimplemented extends BaseApi
*/
protected function post(array $request = [], array $post = [])
{
- DI::apiResponse()->unsupported(Router::POST);
+ $this->response->unsupported(Router::POST);
}
/**
@@ -59,7 +58,7 @@ class Unimplemented extends BaseApi
*/
public function put()
{
- DI::apiResponse()->unsupported(Router::PUT);
+ $this->response->unsupported(Router::PUT);
}
/**
@@ -67,6 +66,6 @@ class Unimplemented extends BaseApi
*/
protected function rawContent(array $request = [])
{
- DI::apiResponse()->unsupported(Router::GET);
+ $this->response->unsupported(Router::GET);
}
}
diff --git a/src/Module/Api/Twitter/Account/RateLimitStatus.php b/src/Module/Api/Twitter/Account/RateLimitStatus.php
index 82cf2c3e66..5f1d37e7b5 100644
--- a/src/Module/Api/Twitter/Account/RateLimitStatus.php
+++ b/src/Module/Api/Twitter/Account/RateLimitStatus.php
@@ -22,7 +22,6 @@
namespace Friendica\Module\Api\Twitter\Account;
use Friendica\Module\BaseApi;
-use Friendica\DI;
use Friendica\Util\DateTimeFormat;
/**
@@ -52,6 +51,6 @@ class RateLimitStatus extends BaseApi
];
}
- DI::apiResponse()->exit('hash', ['hash' => $hash], $this->parameters['extension'] ?? null);
+ $this->response->exit('hash', ['hash' => $hash], $this->parameters['extension'] ?? null);
}
}
diff --git a/src/Module/Api/Twitter/ContactEndpoint.php b/src/Module/Api/Twitter/ContactEndpoint.php
index 2b2936820d..541f7fd86d 100644
--- a/src/Module/Api/Twitter/ContactEndpoint.php
+++ b/src/Module/Api/Twitter/ContactEndpoint.php
@@ -27,9 +27,9 @@ use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Profile;
use Friendica\Model\User;
+use Friendica\Module\Api\ApiResponse;
use Friendica\Module\BaseApi;
use Friendica\Model\Contact;
-use Friendica\Module\Response;
use Friendica\Network\HTTPException;
use Friendica\Util\Profiler;
use Friendica\Util\Strings;
@@ -40,9 +40,9 @@ abstract class ContactEndpoint extends BaseApi
const DEFAULT_COUNT = 20;
const MAX_COUNT = 200;
- public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
+ public function __construct(App $app, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, ApiResponse $response, array $server, array $parameters = [])
{
- parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
+ parent::__construct($app, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
self::checkAllowedScope(self::SCOPE_READ);
}
diff --git a/src/Module/Api/Twitter/SavedSearches.php b/src/Module/Api/Twitter/SavedSearches.php
index 3fd30e34ea..31824a8d4c 100644
--- a/src/Module/Api/Twitter/SavedSearches.php
+++ b/src/Module/Api/Twitter/SavedSearches.php
@@ -22,7 +22,6 @@
namespace Friendica\Module\Api\Twitter;
use Friendica\Database\DBA;
-use Friendica\DI;
use Friendica\Module\BaseApi;
/**
@@ -45,6 +44,6 @@ class SavedSearches extends BaseApi
DBA::close($terms);
- DI::apiResponse()->exit('terms', ['terms' => $result], $this->parameters['extension'] ?? null);
+ $this->response->exit('terms', ['terms' => $result], $this->parameters['extension'] ?? null);
}
}
diff --git a/src/Module/BaseApi.php b/src/Module/BaseApi.php
index 03a28951e3..009809376e 100644
--- a/src/Module/BaseApi.php
+++ b/src/Module/BaseApi.php
@@ -21,18 +21,23 @@
namespace Friendica\Module;
+use Friendica\App;
use Friendica\BaseModule;
+use Friendica\Core\L10n;
use Friendica\Core\Logger;
use Friendica\Core\System;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Post;
use Friendica\Model\User;
+use Friendica\Module\Api\ApiResponse;
use Friendica\Network\HTTPException;
use Friendica\Security\BasicAuth;
use Friendica\Security\OAuth;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\HTTPInputData;
+use Friendica\Util\Profiler;
+use Psr\Log\LoggerInterface;
class BaseApi extends BaseModule
{
@@ -53,12 +58,23 @@ class BaseApi extends BaseModule
*/
protected static $request = [];
+ /** @var App */
+ protected $app;
+
+ /** @var ApiResponse */
+ protected $response;
+
+ public function __construct(App $app, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, ApiResponse $response, array $server, array $parameters = [])
+ {
+ parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
+ }
+
protected function delete()
{
self::checkAllowedScope(self::SCOPE_WRITE);
- if (!DI::app()->isLoggedIn()) {
- throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
+ if (!$this->app->isLoggedIn()) {
+ throw new HTTPException\ForbiddenException($this->t('Permission denied.'));
}
}
@@ -66,8 +82,8 @@ class BaseApi extends BaseModule
{
self::checkAllowedScope(self::SCOPE_WRITE);
- if (!DI::app()->isLoggedIn()) {
- throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
+ if (!$this->app->isLoggedIn()) {
+ throw new HTTPException\ForbiddenException($this->t('Permission denied.'));
}
}
@@ -75,8 +91,8 @@ class BaseApi extends BaseModule
{
self::checkAllowedScope(self::SCOPE_WRITE);
- if (!DI::app()->isLoggedIn()) {
- throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
+ if (!$this->app->isLoggedIn()) {
+ throw new HTTPException\ForbiddenException($this->t('Permission denied.'));
}
}
@@ -84,8 +100,8 @@ class BaseApi extends BaseModule
{
self::checkAllowedScope(self::SCOPE_WRITE);
- if (!DI::app()->isLoggedIn()) {
- throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
+ if (!$this->app->isLoggedIn()) {
+ throw new HTTPException\ForbiddenException($this->t('Permission denied.'));
}
}
diff --git a/src/Module/HTTPException/PageNotFound.php b/src/Module/HTTPException/PageNotFound.php
index 4971ed3cd0..0ec357656f 100644
--- a/src/Module/HTTPException/PageNotFound.php
+++ b/src/Module/HTTPException/PageNotFound.php
@@ -22,6 +22,7 @@
namespace Friendica\Module\HTTPException;
use Friendica\BaseModule;
+use Friendica\Capabilities\IRespondToRequests;
use Friendica\DI;
use Friendica\Network\HTTPException;
@@ -32,7 +33,7 @@ class PageNotFound extends BaseModule
throw new HTTPException\NotFoundException(DI::l10n()->t('Page not found.'));
}
- public function run(array $post = [], array $request = []): string
+ public function run(array $post = [], array $request = []): IRespondToRequests
{
/* The URL provided does not resolve to a valid module.
*
diff --git a/src/Module/NodeInfo110.php b/src/Module/NodeInfo110.php
index 9e5a4cac97..6681dcc020 100644
--- a/src/Module/NodeInfo110.php
+++ b/src/Module/NodeInfo110.php
@@ -21,11 +21,15 @@
namespace Friendica\Module;
+use Friendica\App;
use Friendica\BaseModule;
+use Friendica\Capabilities\IRespondToRequests;
use Friendica\Core\Addon;
-use Friendica\Core\System;
-use Friendica\DI;
+use Friendica\Core\Config\Capability\IManageConfigValues;
+use Friendica\Core\L10n;
use Friendica\Model\Nodeinfo;
+use Friendica\Util\Profiler;
+use Psr\Log\LoggerInterface;
/**
* Version 1.0 of Nodeinfo, a standardized way of exposing metadata about a server running one of the distributed social networks.
@@ -33,10 +37,18 @@ use Friendica\Model\Nodeinfo;
*/
class NodeInfo110 extends BaseModule
{
+ /** @var IManageConfigValues */
+ protected $config;
+
+ public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, IManageConfigValues $config, array $server, array $parameters = [])
+ {
+ parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
+
+ $this->config = $config;
+ }
+
protected function rawContent(array $request = [])
{
- $config = DI::config();
-
$nodeinfo = [
'version' => '1.0',
'software' => [
@@ -53,19 +65,19 @@ class NodeInfo110 extends BaseModule
],
'services' => [],
'usage' => [],
- 'openRegistrations' => intval($config->get('config', 'register_policy')) !== Register::CLOSED,
+ 'openRegistrations' => intval($this->config->get('config', 'register_policy')) !== Register::CLOSED,
'metadata' => [
- 'nodeName' => $config->get('config', 'sitename'),
+ 'nodeName' => $this->config->get('config', 'sitename'),
],
];
- if (!empty($config->get('system', 'diaspora_enabled'))) {
- $nodeinfo['protocols']['inbound'][] = 'diaspora';
+ if (!empty($this->config->get('system', 'diaspora_enabled'))) {
+ $nodeinfo['protocols']['inbound'][] = 'diaspora';
$nodeinfo['protocols']['outbound'][] = 'diaspora';
}
- if (empty($config->get('system', 'ostatus_disabled'))) {
- $nodeinfo['protocols']['inbound'][] = 'gnusocial';
+ if (empty($this->config->get('system', 'ostatus_disabled'))) {
+ $nodeinfo['protocols']['inbound'][] = 'gnusocial';
$nodeinfo['protocols']['outbound'][] = 'gnusocial';
}
@@ -73,10 +85,10 @@ class NodeInfo110 extends BaseModule
$nodeinfo['services'] = Nodeinfo::getServices();
- $nodeinfo['metadata']['protocols'] = $nodeinfo['protocols'];
+ $nodeinfo['metadata']['protocols'] = $nodeinfo['protocols'];
$nodeinfo['metadata']['protocols']['outbound'][] = 'atom1.0';
- $nodeinfo['metadata']['protocols']['inbound'][] = 'atom1.0';
- $nodeinfo['metadata']['protocols']['inbound'][] = 'rss2.0';
+ $nodeinfo['metadata']['protocols']['inbound'][] = 'atom1.0';
+ $nodeinfo['metadata']['protocols']['inbound'][] = 'rss2.0';
$nodeinfo['metadata']['services'] = $nodeinfo['services'];
@@ -84,8 +96,9 @@ class NodeInfo110 extends BaseModule
$nodeinfo['metadata']['services']['inbound'][] = 'twitter';
}
- $nodeinfo['metadata']['explicitContent'] = $config->get('system', 'explicit_content', false) == true;
+ $nodeinfo['metadata']['explicitContent'] = $this->config->get('system', 'explicit_content', false) == true;
- System::jsonExit($nodeinfo, 'application/json; charset=utf-8', JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
+ $this->response->setType(IRespondToRequests::TYPE_JSON);
+ $this->response->addContent(json_encode($nodeinfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
}
}
diff --git a/src/Module/NodeInfo120.php b/src/Module/NodeInfo120.php
index b0d5b18c8c..ea25653779 100644
--- a/src/Module/NodeInfo120.php
+++ b/src/Module/NodeInfo120.php
@@ -21,11 +21,15 @@
namespace Friendica\Module;
+use Friendica\App;
use Friendica\BaseModule;
+use Friendica\Capabilities\IRespondToRequests;
use Friendica\Core\Addon;
-use Friendica\Core\System;
-use Friendica\DI;
+use Friendica\Core\Config\Capability\IManageConfigValues;
+use Friendica\Core\L10n;
use Friendica\Model\Nodeinfo;
+use Friendica\Util\Profiler;
+use Psr\Log\LoggerInterface;
/**
* Version 2.0 of Nodeinfo, a standardized way of exposing metadata about a server running one of the distributed social networks.
@@ -33,30 +37,38 @@ use Friendica\Model\Nodeinfo;
*/
class NodeInfo120 extends BaseModule
{
+ /** @var IManageConfigValues */
+ protected $config;
+
+ public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, IManageConfigValues $config, array $server, array $parameters = [])
+ {
+ parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
+
+ $this->config = $config;
+ }
+
protected function rawContent(array $request = [])
{
- $config = DI::config();
-
$nodeinfo = [
- 'version' => '2.0',
- 'software' => [
+ 'version' => '2.0',
+ 'software' => [
'name' => 'friendica',
'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION,
],
'protocols' => ['dfrn', 'activitypub'],
'services' => [],
'usage' => [],
- 'openRegistrations' => intval($config->get('config', 'register_policy')) !== Register::CLOSED,
+ 'openRegistrations' => intval($this->config->get('config', 'register_policy')) !== Register::CLOSED,
'metadata' => [
- 'nodeName' => $config->get('config', 'sitename'),
+ 'nodeName' => $this->config->get('config', 'sitename'),
],
];
- if (!empty($config->get('system', 'diaspora_enabled'))) {
+ if (!empty($this->config->get('system', 'diaspora_enabled'))) {
$nodeinfo['protocols'][] = 'diaspora';
}
- if (empty($config->get('system', 'ostatus_disabled'))) {
+ if (empty($this->config->get('system', 'ostatus_disabled'))) {
$nodeinfo['protocols'][] = 'ostatus';
}
@@ -72,12 +84,13 @@ class NodeInfo120 extends BaseModule
$nodeinfo['services']['inbound'][] = 'rss2.0';
$nodeinfo['services']['outbound'][] = 'atom1.0';
- if (function_exists('imap_open') && !$config->get('system', 'imap_disabled')) {
+ if (function_exists('imap_open') && !$this->config->get('system', 'imap_disabled')) {
$nodeinfo['services']['inbound'][] = 'imap';
}
- $nodeinfo['metadata']['explicitContent'] = $config->get('system', 'explicit_content', false) == true;
+ $nodeinfo['metadata']['explicitContent'] = $this->config->get('system', 'explicit_content', false) == true;
- System::jsonExit($nodeinfo, 'application/json; charset=utf-8', JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
+ $this->response->setType(IRespondToRequests::TYPE_JSON, 'application/json; charset=utf-8');
+ $this->response->addContent(json_encode($nodeinfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
}
}
diff --git a/src/Module/NodeInfo210.php b/src/Module/NodeInfo210.php
index 3584e19d73..a354046254 100644
--- a/src/Module/NodeInfo210.php
+++ b/src/Module/NodeInfo210.php
@@ -21,11 +21,15 @@
namespace Friendica\Module;
+use Friendica\App;
use Friendica\BaseModule;
use Friendica\Core\Addon;
+use Friendica\Core\Config\Capability\IManageConfigValues;
+use Friendica\Core\L10n;
use Friendica\Core\System;
-use Friendica\DI;
use Friendica\Model\Nodeinfo;
+use Friendica\Util\Profiler;
+use Psr\Log\LoggerInterface;
/**
* Version 1.0 of Nodeinfo 2, a sStandardized way of exposing metadata about a server running one of the distributed social networks.
@@ -33,30 +37,38 @@ use Friendica\Model\Nodeinfo;
*/
class NodeInfo210 extends BaseModule
{
+ /** @var IManageConfigValues */
+ protected $config;
+
+ public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, IManageConfigValues $config, array $server, array $parameters = [])
+ {
+ parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
+
+ $this->config = $config;
+ }
+
protected function rawContent(array $request = [])
{
- $config = DI::config();
-
$nodeinfo = [
- 'version' => '1.0',
- 'server' => [
- 'baseUrl' => DI::baseUrl()->get(),
- 'name' => $config->get('config', 'sitename'),
+ 'version' => '1.0',
+ 'server' => [
+ 'baseUrl' => $this->baseUrl->get(),
+ 'name' => $this->config->get('config', 'sitename'),
'software' => 'friendica',
'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION,
],
- 'organization' => Nodeinfo::getOrganization($config),
+ 'organization' => Nodeinfo::getOrganization($this->config),
'protocols' => ['dfrn', 'activitypub'],
'services' => [],
- 'openRegistrations' => intval($config->get('config', 'register_policy')) !== Register::CLOSED,
+ 'openRegistrations' => intval($this->config->get('config', 'register_policy')) !== Register::CLOSED,
'usage' => [],
];
- if (!empty($config->get('system', 'diaspora_enabled'))) {
+ if (!empty($this->config->get('system', 'diaspora_enabled'))) {
$nodeinfo['protocols'][] = 'diaspora';
}
- if (empty($config->get('system', 'ostatus_disabled'))) {
+ if (empty($this->config->get('system', 'ostatus_disabled'))) {
$nodeinfo['protocols'][] = 'ostatus';
}
@@ -72,7 +84,7 @@ class NodeInfo210 extends BaseModule
$nodeinfo['services']['inbound'][] = 'rss2.0';
$nodeinfo['services']['outbound'][] = 'atom1.0';
- if (function_exists('imap_open') && !$config->get('system', 'imap_disabled')) {
+ if (function_exists('imap_open') && !$this->config->get('system', 'imap_disabled')) {
$nodeinfo['services']['inbound'][] = 'imap';
}
diff --git a/src/Module/Response.php b/src/Module/Response.php
index 87fbbf07cc..4cf9f9667e 100644
--- a/src/Module/Response.php
+++ b/src/Module/Response.php
@@ -2,14 +2,14 @@
namespace Friendica\Module;
-use Friendica\Capabilities\ICanReadAndWriteToResponds;
+use Friendica\Capabilities\ICanCreateResponses;
use Friendica\Capabilities\IRespondToRequests;
use Friendica\Network\HTTPException\InternalServerErrorException;
-class Response implements ICanReadAndWriteToResponds
+class Response implements ICanCreateResponses
{
/**
- * @var string[][]
+ * @var string[]
*/
protected $headers = [];
/**
@@ -19,20 +19,30 @@ class Response implements ICanReadAndWriteToResponds
/**
* @var string
*/
- protected $type = IRespondToRequests::TYPE_CONTENT;
+ protected $type = IRespondToRequests::TYPE_HTML;
/**
* {@inheritDoc}
*/
- public function addHeader(string $key, string $value)
+ public function setHeader(?string $header = null, ?string $key = null): void
{
- $this->headers[$key][] = $value;
+ if (!isset($header) && !empty($key)) {
+ unset($this->headers[$key]);
+ }
+
+ if (isset($header)) {
+ if (empty($key)) {
+ $this->headers[] = $header;
+ } else {
+ $this->headers[$key] = $header;
+ }
+ }
}
/**
* {@inheritDoc}
*/
- public function addContent(string $content)
+ public function addContent($content): void
{
$this->content .= $content;
}
@@ -48,7 +58,7 @@ class Response implements ICanReadAndWriteToResponds
/**
* {@inheritDoc}
*/
- public function getContent(): string
+ public function getContent()
{
return $this->content;
}
@@ -56,19 +66,31 @@ class Response implements ICanReadAndWriteToResponds
/**
* {@inheritDoc}
*/
- public function setType(string $type)
+ public function setType(string $type, ?string $content_type = null): void
{
if (!in_array($type, IRespondToRequests::ALLOWED_TYPES)) {
throw new InternalServerErrorException('wrong type');
}
+ switch ($type) {
+ case static::TYPE_JSON:
+ $content_type = $content_type ?? 'application/json';
+ break;
+ case static::TYPE_XML:
+ $content_type = $content_type ?? 'text/xml';
+ break;
+ }
+
+
+ $this->setHeader($content_type, 'Content-type');
+
$this->type = $type;
}
/**
* {@inheritDoc}
*/
- public function getTyp(): string
+ public function getType(): string
{
return $this->type;
}
diff --git a/tests/Util/ApiResponseDouble.php b/tests/Util/ApiResponseDouble.php
index cc1402c7a6..a702c17fda 100644
--- a/tests/Util/ApiResponseDouble.php
+++ b/tests/Util/ApiResponseDouble.php
@@ -28,7 +28,7 @@ class ApiResponseDouble extends ApiResponse
/**
* The header list
*
- * @var string[]
+ * @var string[][]
*/
protected static $header = [];
@@ -61,9 +61,22 @@ class ApiResponseDouble extends ApiResponse
self::$header = [];
}
- protected function setHeader(string $header)
+ /**
+ * {@inheritDoc}
+ */
+ public function setHeader(?string $header = null, ?string $key = null): void
{
- static::$header[] = $header;
+ if (!isset($header) && !empty($key)) {
+ unset(static::$header[$key]);
+ }
+
+ if (isset($header)) {
+ if (empty($key)) {
+ static::$header[] = $header;
+ } else {
+ static::$header[$key] = $header;
+ }
+ }
}
protected function printOutput(string $output)
diff --git a/tests/src/Module/Api/ApiResponseTest.php b/tests/src/Module/Api/ApiResponseTest.php
index 524c9ebd17..aba8c808a5 100644
--- a/tests/src/Module/Api/ApiResponseTest.php
+++ b/tests/src/Module/Api/ApiResponseTest.php
@@ -6,19 +6,12 @@ use Friendica\App\Arguments;
use Friendica\App\BaseURL;
use Friendica\Core\L10n;
use Friendica\Factory\Api\Twitter\User;
+use Friendica\Module\Api\ApiResponse;
use Friendica\Test\MockedTest;
-use Friendica\Test\Util\ApiResponseDouble;
use Psr\Log\NullLogger;
class ApiResponseTest extends MockedTest
{
- protected function tearDown(): void
- {
- ApiResponseDouble::reset();
-
- parent::tearDown();
- }
-
public function testErrorWithJson()
{
$l10n = \Mockery::mock(L10n::class);
@@ -27,10 +20,10 @@ class ApiResponseTest extends MockedTest
$baseUrl = \Mockery::mock(BaseURL::class);
$twitterUser = \Mockery::mock(User::class);
- $response = new ApiResponseDouble($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
+ $response = new ApiResponse($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
$response->error(200, 'OK', 'error_message', 'json');
- self::assertEquals('{"error":"error_message","code":"200 OK","request":""}', ApiResponseDouble::getOutput());
+ self::assertEquals('{"error":"error_message","code":"200 OK","request":""}', $response->getContent());
}
public function testErrorWithXml()
@@ -41,7 +34,7 @@ class ApiResponseTest extends MockedTest
$baseUrl = \Mockery::mock(BaseURL::class);
$twitterUser = \Mockery::mock(User::class);
- $response = new ApiResponseDouble($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
+ $response = new ApiResponse($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
$response->error(200, 'OK', 'error_message', 'xml');
self::assertEquals('' . "\n" .
@@ -52,7 +45,7 @@ class ApiResponseTest extends MockedTest
' 200 OK
' . "\n" .
' ' . "\n" .
'' . "\n",
- ApiResponseDouble::getOutput());
+ $response->getContent());
}
public function testErrorWithRss()
@@ -63,7 +56,7 @@ class ApiResponseTest extends MockedTest
$baseUrl = \Mockery::mock(BaseURL::class);
$twitterUser = \Mockery::mock(User::class);
- $response = new ApiResponseDouble($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
+ $response = new ApiResponse($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
$response->error(200, 'OK', 'error_message', 'rss');
self::assertEquals(
@@ -75,7 +68,7 @@ class ApiResponseTest extends MockedTest
' 200 OK
' . "\n" .
' ' . "\n" .
'' . "\n",
- ApiResponseDouble::getOutput());
+ $response->getContent());
}
public function testErrorWithAtom()
@@ -86,7 +79,7 @@ class ApiResponseTest extends MockedTest
$baseUrl = \Mockery::mock(BaseURL::class);
$twitterUser = \Mockery::mock(User::class);
- $response = new ApiResponseDouble($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
+ $response = new ApiResponse($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
$response->error(200, 'OK', 'error_message', 'atom');
self::assertEquals(
@@ -98,7 +91,7 @@ class ApiResponseTest extends MockedTest
' 200 OK
' . "\n" .
' ' . "\n" .
'' . "\n",
- ApiResponseDouble::getOutput());
+ $response->getContent());
}
public function testUnsupported()
@@ -112,9 +105,9 @@ class ApiResponseTest extends MockedTest
$baseUrl = \Mockery::mock(BaseURL::class);
$twitterUser = \Mockery::mock(User::class);
- $response = new ApiResponseDouble($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
+ $response = new ApiResponse($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
$response->unsupported();
- self::assertEquals('{"error":"API endpoint %s %s is not implemented","error_description":"The API endpoint is currently not implemented but might be in the future."}', ApiResponseDouble::getOutput());
+ self::assertEquals('{"error":"API endpoint %s %s is not implemented","error_description":"The API endpoint is currently not implemented but might be in the future."}', $response->getContent());
}
}
diff --git a/tests/src/Module/Api/ApiTest.php b/tests/src/Module/Api/ApiTest.php
index e168c26555..c530ace2ee 100644
--- a/tests/src/Module/Api/ApiTest.php
+++ b/tests/src/Module/Api/ApiTest.php
@@ -25,10 +25,8 @@ use Friendica\Core\Addon;
use Friendica\Core\Hook;
use Friendica\Database\Database;
use Friendica\DI;
-use Friendica\Module\Api\ApiResponse;
use Friendica\Security\Authentication;
use Friendica\Test\FixtureTest;
-use Friendica\Test\Util\ApiResponseDouble;
use Friendica\Test\Util\AuthenticationDouble;
abstract class ApiTest extends FixtureTest
@@ -53,20 +51,12 @@ abstract class ApiTest extends FixtureTest
parent::setUp(); // TODO: Change the autogenerated stub
$this->dice = $this->dice
- ->addRule(Authentication::class, ['instanceOf' => AuthenticationDouble::class, 'shared' => true])
- ->addRule(ApiResponse::class, ['instanceOf' => ApiResponseDouble::class, 'shared' => true]);
+ ->addRule(Authentication::class, ['instanceOf' => AuthenticationDouble::class, 'shared' => true]);
DI::init($this->dice);
$this->installAuthTest();
}
- protected function tearDown(): void
- {
- ApiResponseDouble::reset();
-
- parent::tearDown();
- }
-
/**
* installs auththest.
*
diff --git a/tests/src/Module/Api/Friendica/NotificationTest.php b/tests/src/Module/Api/Friendica/NotificationTest.php
index 125e7d63d0..b78715864e 100644
--- a/tests/src/Module/Api/Friendica/NotificationTest.php
+++ b/tests/src/Module/Api/Friendica/NotificationTest.php
@@ -23,9 +23,7 @@ namespace Friendica\Test\src\Module\Api\Friendica;
use Friendica\DI;
use Friendica\Module\Api\Friendica\Notification;
-use Friendica\Network\HTTPException\BadRequestException;
use Friendica\Test\src\Module\Api\ApiTest;
-use Friendica\Test\Util\ApiResponseDouble;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Temporal;
@@ -67,19 +65,17 @@ class NotificationTest extends ApiTest
XML;
- $notification = new Notification(DI::l10n(), ['extension' => 'xml']);
- $notification->rawContent();
+ $notification = new Notification(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], ['extension' => 'xml']);
+ $response = $notification->run();
- self::assertXmlStringEqualsXmlString($assertXml, ApiResponseDouble::getOutput());
+ self::assertXmlStringEqualsXmlString($assertXml, $response->getContent());
}
public function testWithJsonResult()
{
- $notification = new Notification(DI::l10n(),['parameter' => 'json']);
- $notification->rawContent();
+ $notification = new Notification(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], ['extension' => 'json']);
+ $response = $notification->run();
- $result = json_encode(ApiResponseDouble::getOutput());
-
- self::assertJson($result);
+ self::assertJson($response->getContent());
}
}
diff --git a/tests/src/Module/Api/Friendica/Photo/DeleteTest.php b/tests/src/Module/Api/Friendica/Photo/DeleteTest.php
index 0958110115..42e3f77c04 100644
--- a/tests/src/Module/Api/Friendica/Photo/DeleteTest.php
+++ b/tests/src/Module/Api/Friendica/Photo/DeleteTest.php
@@ -31,7 +31,7 @@ class DeleteTest extends ApiTest
public function testEmpty()
{
$this->expectException(BadRequestException::class);
- (new Delete(DI::l10n()))->rawContent();
+ (new Delete(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), []))->run();
}
public function testWithoutAuthenticatedUser()
@@ -42,7 +42,7 @@ class DeleteTest extends ApiTest
public function testWrong()
{
$this->expectException(BadRequestException::class);
- (new Delete(DI::l10n(), ['photo_id' => 1]))->rawContent();
+ (new Delete(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), []))->run(['photo_id' => 1]);
}
public function testWithCorrectPhotoId()
diff --git a/tests/src/Module/Api/Friendica/Photoalbum/DeleteTest.php b/tests/src/Module/Api/Friendica/Photoalbum/DeleteTest.php
index aabd7e581c..118257c55b 100644
--- a/tests/src/Module/Api/Friendica/Photoalbum/DeleteTest.php
+++ b/tests/src/Module/Api/Friendica/Photoalbum/DeleteTest.php
@@ -31,13 +31,14 @@ class DeleteTest extends ApiTest
public function testEmpty()
{
$this->expectException(BadRequestException::class);
- (new Delete(DI::l10n()))->rawContent();
+ (new Delete(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), []))->run();
+
}
public function testWrong()
{
$this->expectException(BadRequestException::class);
- (new Delete(DI::l10n(), ['album' => 'album_name']))->rawContent();
+ (new Delete(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), []))->run(['album' => 'album_name']);
}
public function testValid()
diff --git a/tests/src/Module/Api/Friendica/Photoalbum/UpdateTest.php b/tests/src/Module/Api/Friendica/Photoalbum/UpdateTest.php
index 51414302fa..464845745f 100644
--- a/tests/src/Module/Api/Friendica/Photoalbum/UpdateTest.php
+++ b/tests/src/Module/Api/Friendica/Photoalbum/UpdateTest.php
@@ -31,19 +31,19 @@ class UpdateTest extends ApiTest
public function testEmpty()
{
$this->expectException(BadRequestException::class);
- (new Update(DI::l10n()))->rawContent();
+ (new Update(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), []))->run();
}
public function testTooFewArgs()
{
$this->expectException(BadRequestException::class);
- (new Update(DI::l10n(), ['album' => 'album_name']))->rawContent();
+ (new Update(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), []))->run(['album' => 'album_name']);
}
public function testWrongUpdate()
{
$this->expectException(BadRequestException::class);
- (new Update(DI::l10n(), ['album' => 'album_name', 'album_new' => 'album_name']))->rawContent();
+ (new Update(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), []))->run(['album' => 'album_name', 'album_new' => 'album_name']);
}
public function testWithoutAuthenticatedUser()
diff --git a/tests/src/Module/Api/GnuSocial/GnuSocial/VersionTest.php b/tests/src/Module/Api/GnuSocial/GnuSocial/VersionTest.php
index 448f6ce145..88bce964ca 100644
--- a/tests/src/Module/Api/GnuSocial/GnuSocial/VersionTest.php
+++ b/tests/src/Module/Api/GnuSocial/GnuSocial/VersionTest.php
@@ -5,17 +5,14 @@ namespace Friendica\Test\src\Module\Api\GnuSocial\GnuSocial;
use Friendica\DI;
use Friendica\Module\Api\GNUSocial\GNUSocial\Version;
use Friendica\Test\src\Module\Api\ApiTest;
-use Friendica\Test\Util\ApiResponseDouble;
class VersionTest extends ApiTest
{
public function test()
{
- $version = new Version(DI::l10n(), ['extension' => 'json']);
- $version->rawContent();
+ $version = new Version(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], ['extension' => 'json']);
+ $response = $version->run();
- $result = json_decode(ApiResponseDouble::getOutput());
-
- self::assertEquals('0.9.7', $result);
+ self::assertEquals('"0.9.7"', $response->getContent());
}
}
diff --git a/tests/src/Module/Api/GnuSocial/Help/TestTest.php b/tests/src/Module/Api/GnuSocial/Help/TestTest.php
index 40d8e9750e..82ceefec9b 100644
--- a/tests/src/Module/Api/GnuSocial/Help/TestTest.php
+++ b/tests/src/Module/Api/GnuSocial/Help/TestTest.php
@@ -5,23 +5,22 @@ namespace Friendica\Test\src\Module\Api\GnuSocial\Help;
use Friendica\DI;
use Friendica\Module\Api\GNUSocial\Help\Test;
use Friendica\Test\src\Module\Api\ApiTest;
-use Friendica\Test\Util\ApiResponseDouble;
class TestTest extends ApiTest
{
public function testJson()
{
- $test = new Test(DI::l10n(), ['extension' => 'json']);
- $test->rawContent();
+ $test = new Test(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], ['extension' => 'json']);
+ $response = $test->run();
- self::assertEquals('"ok"', ApiResponseDouble::getOutput());
+ self::assertEquals('"ok"', $response->getContent());
}
public function testXml()
{
- $test = new Test(DI::l10n(), ['extension' => 'xml']);
- $test->rawContent();
+ $test = new Test(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], ['extension' => 'xml']);
+ $response = $test->run();
- self::assertxml(ApiResponseDouble::getOutput(), 'ok');
+ self::assertxml($response->getContent(), 'ok');
}
}
diff --git a/tests/src/Module/Api/Twitter/Account/RateLimitStatusTest.php b/tests/src/Module/Api/Twitter/Account/RateLimitStatusTest.php
index 93d76933ba..66821cea16 100644
--- a/tests/src/Module/Api/Twitter/Account/RateLimitStatusTest.php
+++ b/tests/src/Module/Api/Twitter/Account/RateLimitStatusTest.php
@@ -5,16 +5,15 @@ namespace Friendica\Test\src\Module\Api\Twitter\Account;
use Friendica\DI;
use Friendica\Module\Api\Twitter\Account\RateLimitStatus;
use Friendica\Test\src\Module\Api\ApiTest;
-use Friendica\Test\Util\ApiResponseDouble;
class RateLimitStatusTest extends ApiTest
{
public function testWithJson()
{
- $rateLimitStatus = new RateLimitStatus(DI::l10n(), ['extension' => 'json']);
- $rateLimitStatus->rawContent();
+ $rateLimitStatus = new RateLimitStatus(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], ['extension' => 'json']);
+ $response = $rateLimitStatus->run();
- $result = json_decode(ApiResponseDouble::getOutput());
+ $result = json_decode($response->getContent());
self::assertEquals(150, $result->remaining_hits);
self::assertEquals(150, $result->hourly_limit);
@@ -23,9 +22,9 @@ class RateLimitStatusTest extends ApiTest
public function testWithXml()
{
- $rateLimitStatus = new RateLimitStatus(DI::l10n(),['extension' => 'xml']);
- $rateLimitStatus->rawContent();
+ $rateLimitStatus = new RateLimitStatus(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], ['extension' => 'xml']);
+ $response = $rateLimitStatus->run();
- self::assertXml(ApiResponseDouble::getOutput(), 'hash');
+ self::assertXml($response->getContent(), 'hash');
}
}
diff --git a/tests/src/Module/Api/Twitter/SavedSearchesTest.php b/tests/src/Module/Api/Twitter/SavedSearchesTest.php
index 8e066d4bad..497a063106 100644
--- a/tests/src/Module/Api/Twitter/SavedSearchesTest.php
+++ b/tests/src/Module/Api/Twitter/SavedSearchesTest.php
@@ -5,16 +5,15 @@ namespace Friendica\Test\src\Module\Api\Twitter;
use Friendica\DI;
use Friendica\Module\Api\Twitter\SavedSearches;
use Friendica\Test\src\Module\Api\ApiTest;
-use Friendica\Test\Util\ApiResponseDouble;
class SavedSearchesTest extends ApiTest
{
public function test()
{
- $savedSearch = new SavedSearches(DI::l10n(), ['extension' => 'json']);
- $savedSearch->rawContent();
+ $savedSearch = new SavedSearches(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], ['extension' => 'json']);
+ $response = $savedSearch->run();
- $result = json_decode(ApiResponseDouble::getOutput());
+ $result = json_decode($response->getContent());
self::assertEquals(1, $result[0]->id);
self::assertEquals(1, $result[0]->id_str);