]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Api/ApiResponse.php
Fix test
[friendica.git] / src / Module / Api / ApiResponse.php
index 61886412a0f641c9ccff68a0a208c1b3f139cdd0..a6a94ad81c559e209635013e2da2039b35eb1e73 100644 (file)
@@ -5,17 +5,17 @@ namespace Friendica\Module\Api;
 use Friendica\App\Arguments;
 use Friendica\App\BaseURL;
 use Friendica\Core\L10n;
+use Friendica\Module\Response;
 use Friendica\Util\Arrays;
 use Friendica\Util\DateTimeFormat;
-use Friendica\Util\HTTPInputData;
 use Friendica\Util\XML;
 use Psr\Log\LoggerInterface;
 use Friendica\Factory\Api\Twitter\User as TwitterUser;
 
 /**
- * This class is used to format and return API responses
+ * This class is used to format and create API responses
  */
-class ApiResponse
+class ApiResponse extends Response
 {
        /** @var L10n */
        protected $l10n;
@@ -23,42 +23,18 @@ class ApiResponse
        protected $args;
        /** @var LoggerInterface */
        protected $logger;
+       /** @var BaseURL */
+       protected $baseUrl;
+       /** @var TwitterUser */
+       protected $twitterUser;
 
-       /**
-        * @param L10n            $l10n
-        * @param Arguments       $args
-        * @param LoggerInterface $logger
-        */
-       public function __construct(L10n $l10n, Arguments $args, LoggerInterface $logger, BaseURL $baseurl, TwitterUser $twitteruser)
+       public function __construct(L10n $l10n, Arguments $args, LoggerInterface $logger, BaseURL $baseUrl, TwitterUser $twitterUser)
        {
                $this->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 +101,12 @@ class ApiResponse
                $arr['$user'] = $user_info;
                $arr['$rss'] = [
                        'alternate'    => $user_info['url'],
-                       'self'         => $this->baseurl . '/' . $this->args->getQueryString(),
-                       'base'         => $this->baseurl,
-                       'updated'      => DateTimeFormat::utc(null, DateTimeFormat::API),
+                       'self'         => $this->baseUrl . '/' . $this->args->getQueryString(),
+                       'base'         => $this->baseUrl,
+                       'updated'      => DateTimeFormat::utcNow(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;
@@ -222,10 +198,10 @@ class ApiResponse
 
                switch ($format) {
                        case 'xml':
-                               $this->setHeader('Content-Type: text/xml');
+                               $this->setType(static::TYPE_XML);
                                break;
                        case 'json':
-                               $this->setHeader('Content-Type: application/json');
+                               $this->setType(static::TYPE_JSON);
                                if (!empty($return)) {
                                        $json = json_encode(end($return));
                                        if (!empty($_GET['callback'])) {
@@ -235,25 +211,36 @@ class ApiResponse
                                }
                                break;
                        case 'rss':
-                               $this->setHeader('Content-Type: application/rss+xml');
+                               $this->setType(static::TYPE_RSS);
                                break;
                        case 'atom':
-                               $this->setHeader('Content-Type: application/atom+xml');
+                               $this->setType(static::TYPE_ATOM);
                                break;
                }
 
-               $this->printOutput($return);
+               $this->addContent($return);
+       }
+
+       /**
+        * Wrapper around exit() for JSON only responses
+        *
+        * @param array $data
+        */
+       public function exitWithJson(array $data)
+       {
+               $this->exit('content', ['content' => $data], static::TYPE_JSON);
        }
 
        /**
         * Quit execution with the message that the endpoint isn't implemented
         *
         * @param string $method
+        * @param array  $request (optional) The request content of the current call for later analysis
         *
         * @return void
         * @throws \Exception
         */
-       public function unsupported(string $method = 'all')
+       public function unsupported(string $method = 'all', array $request = [])
        {
                $path = $this->args->getQueryString();
                $this->logger->info('Unimplemented API call',
@@ -261,7 +248,7 @@ class ApiResponse
                                'method'  => $method,
                                'path'    => $path,
                                'agent'   => $_SERVER['HTTP_USER_AGENT'] ?? '',
-                               'request' => HTTPInputData::process()
+                               'request' => $request,
                        ]);
                $error             = $this->l10n->t('API endpoint %s %s is not implemented', strtoupper($method), $path);
                $error_description = $this->l10n->t('The API endpoint is currently not implemented but might be in the future.');