]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Api/ApiResponse.php
Some more API functions moved
[friendica.git] / src / Module / Api / ApiResponse.php
index 5f7e4e51fbb610802e8784b8d57a847e74633558..9521e2270a6e2938ac875fc70ee4313b717f51ce 100644 (file)
@@ -4,12 +4,10 @@ namespace Friendica\Module\Api;
 
 use Friendica\App\Arguments;
 use Friendica\Core\L10n;
-use Friendica\Core\Logger;
-use Friendica\Core\System;
-use Friendica\Object\Api\Mastodon\Error;
 use Friendica\Util\Arrays;
 use Friendica\Util\HTTPInputData;
 use Friendica\Util\XML;
+use Psr\Log\LoggerInterface;
 
 /**
  * This class is used to format and return API responses
@@ -20,15 +18,42 @@ class ApiResponse
        protected $l10n;
        /** @var Arguments */
        protected $args;
+       /** @var LoggerInterface */
+       protected $logger;
 
        /**
-        * @param L10n      $l10n
-        * @param Arguments $args
+        * @param L10n            $l10n
+        * @param Arguments       $args
+        * @param LoggerInterface $logger
         */
-       public function __construct(L10n $l10n, Arguments $args)
+       public function __construct(L10n $l10n, Arguments $args, LoggerInterface $logger)
        {
-               $this->l10n = $l10n;
-               $this->args = $args;
+               $this->l10n   = $l10n;
+               $this->args   = $args;
+               $this->logger = $logger;
+       }
+
+       /**
+        * 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;
        }
 
        /**
@@ -92,14 +117,11 @@ class ApiResponse
                        case 'atom':
                        case 'rss':
                        case 'xml':
-                               $ret = $this->createXML($data, $root_element);
-                               break;
+                               return $this->createXML($data, $root_element);
                        case 'json':
                        default:
-                               $ret = $data;
-                               break;
+                               return $data;
                }
-               return $ret;
        }
 
        /**
@@ -142,7 +164,7 @@ class ApiResponse
                        'request' => $this->args->getQueryString()
                ];
 
-               header(($_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.1') . ' ' . $code . ' ' . $description);
+               $this->setHeader(($_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.1') . ' ' . $code . ' ' . $description);
 
                $this->exit('status', ['status' => $error], $format);
        }
@@ -164,10 +186,10 @@ class ApiResponse
 
                switch ($format) {
                        case 'xml':
-                               header('Content-Type: text/xml');
+                               $this->setHeader('Content-Type: text/xml');
                                break;
                        case 'json':
-                               header('Content-Type: application/json');
+                               $this->setHeader('Content-Type: application/json');
                                if (!empty($return)) {
                                        $json = json_encode(end($return));
                                        if (!empty($_GET['callback'])) {
@@ -177,17 +199,14 @@ class ApiResponse
                                }
                                break;
                        case 'rss':
-                               header('Content-Type: application/rss+xml');
-                               $return = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $return;
+                               $this->setHeader('Content-Type: application/rss+xml');
                                break;
                        case 'atom':
-                               header('Content-Type: application/atom+xml');
-                               $return = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $return;
+                               $this->setHeader('Content-Type: application/atom+xml');
                                break;
                }
 
-               echo $return;
-               exit;
+               $this->printOutput($return);
        }
 
        /**
@@ -201,7 +220,7 @@ class ApiResponse
        public function unsupported(string $method = 'all')
        {
                $path = $this->args->getQueryString();
-               Logger::info('Unimplemented API call',
+               $this->logger->info('Unimplemented API call',
                        [
                                'method'  => $method,
                                'path'    => $path,
@@ -210,7 +229,7 @@ class ApiResponse
                        ]);
                $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.');
-               $errorobj          = new Error($error, $error_description);
-               System::jsonError(501, $errorobj->toArray());
+
+               $this->exit('error', ['error' => ['error' => $error, 'error_description' => $error_description]]);
        }
 }