]> 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 82801f2e60488637c23575dfe7b811ae00e6505a..9521e2270a6e2938ac875fc70ee4313b717f51ce 100644 (file)
@@ -4,8 +4,6 @@ namespace Friendica\Module\Api;
 
 use Friendica\App\Arguments;
 use Friendica\Core\L10n;
-use Friendica\Core\System;
-use Friendica\Object\Api\Mastodon\Error;
 use Friendica\Util\Arrays;
 use Friendica\Util\HTTPInputData;
 use Friendica\Util\XML;
@@ -35,6 +33,29 @@ class ApiResponse
                $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;
+       }
+
        /**
         * Creates the XML from a JSON style array
         *
@@ -143,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);
        }
@@ -165,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'])) {
@@ -178,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);
        }
 
        /**
@@ -211,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]]);
        }
 }