]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Xrd.php
Merge pull request #11872 from annando/warnings
[friendica.git] / src / Module / Xrd.php
index 66404f4567d30b06887620af5a7dadbd79168044..143d3e722ba3f929d3912f515d3dd1459aa00949 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -28,6 +28,7 @@ use Friendica\Core\System;
 use Friendica\DI;
 use Friendica\Model\Photo;
 use Friendica\Model\User;
+use Friendica\Network\HTTPException\NotFoundException;
 use Friendica\Protocol\ActivityNamespace;
 use Friendica\Protocol\Salmon;
 
@@ -36,7 +37,7 @@ use Friendica\Protocol\Salmon;
  */
 class Xrd extends BaseModule
 {
-       public static function rawContent(array $parameters = [])
+       protected function rawContent(array $request = [])
        {
                // @TODO: Replace with parameter from router
                if (DI::args()->getArgv()[0] == 'xrd') {
@@ -46,9 +47,9 @@ class Xrd extends BaseModule
 
                        $uri = urldecode(trim($_GET['uri']));
                        if (strpos($_SERVER['HTTP_ACCEPT'] ?? '', 'application/jrd+json') !== false)  {
-                               $mode = 'json';
+                               $mode = Response::TYPE_JSON;
                        } else {
-                               $mode = 'xml';
+                               $mode = Response::TYPE_XML;
                        }
                } else {
                        if (empty($_GET['resource'])) {
@@ -57,9 +58,9 @@ class Xrd extends BaseModule
 
                        $uri = urldecode(trim($_GET['resource']));
                        if (strpos($_SERVER['HTTP_ACCEPT'] ?? '', 'application/xrd+xml') !== false)  {
-                               $mode = 'xml';
+                               $mode = Response::TYPE_XML;
                        } else {
-                               $mode = 'json';
+                               $mode = Response::TYPE_JSON;
                        }
                }
 
@@ -77,19 +78,19 @@ class Xrd extends BaseModule
                if ($name == User::getActorName()) {
                        $owner = User::getSystemAccount();
                        if (empty($owner)) {
-                               throw new \Friendica\Network\HTTPException\NotFoundException();
+                               throw new NotFoundException('System account was not found. Please setup your Friendica installation properly.');
                        }
-                       self::printSystemJSON($owner);
+                       $this->printSystemJSON($owner);
                } else {
                        $user = User::getByNickname($name);
                        if (empty($user)) {
-                               throw new \Friendica\Network\HTTPException\NotFoundException();
+                               throw new NotFoundException('User was not found for name=' . $name);
                        }
 
                        $owner = User::getOwnerDataById($user['uid']);
                        if (empty($owner)) {
                                DI::logger()->warning('No owner data for user id', ['uri' => $uri, 'name' => $name, 'user' => $user]);
-                               throw new \Friendica\Network\HTTPException\NotFoundException();
+                               throw new NotFoundException('Owner was not found for user->uid=' . $user['uid']);
                        }
 
                        $alias = str_replace('/profile/', '/~', $owner['url']);
@@ -101,15 +102,16 @@ class Xrd extends BaseModule
                        $avatar = ['type' => 'image/jpeg'];
                }
 
-               if ($mode == 'xml') {
-                       self::printXML($alias, DI::baseUrl()->get(), $user, $owner, $avatar);
+               if ($mode == Response::TYPE_XML) {
+                       $this->printXML($alias, $user, $owner, $avatar);
                } else {
-                       self::printJSON($alias, DI::baseUrl()->get(), $owner, $avatar);
+                       $this->printJSON($alias, $owner, $avatar);
                }
        }
 
-       private static function printSystemJSON(array $owner)
+       private function printSystemJSON(array $owner)
        {
+               $baseURL = $this->baseUrl->get();
                $json = [
                        'subject' => 'acct:' . $owner['addr'],
                        'aliases' => [$owner['url']],
@@ -126,26 +128,26 @@ class Xrd extends BaseModule
                                ],
                                [
                                        'rel'      => 'http://ostatus.org/schema/1.0/subscribe',
-                                       'template' => DI::baseUrl()->get() . '/follow?url={uri}',
+                                       'template' => $baseURL . '/follow?url={uri}',
                                ],
                                [
                                        'rel'  => ActivityNamespace::FEED,
                                        'type' => 'application/atom+xml',
-                                       'href' => $owner['poll'] ?? DI::baseUrl()->get(),
+                                       'href' => $owner['poll'] ?? $baseURL,
                                ],
                                [
                                        'rel'  => 'salmon',
-                                       'href' => DI::baseUrl()->get() . '/salmon/' . $owner['nickname'],
+                                       'href' => $baseURL . '/salmon/' . $owner['nickname'],
                                ],
                                [
                                        'rel'  => 'http://microformats.org/profile/hcard',
                                        'type' => 'text/html',
-                                       'href' => DI::baseUrl()->get() . '/hcard/' . $owner['nickname'],
+                                       'href' => $baseURL . '/hcard/' . $owner['nickname'],
                                ],
                                [
                                        'rel'  => 'http://joindiaspora.com/seed_location',
                                        'type' => 'text/html',
-                                       'href' => DI::baseUrl()->get(),
+                                       'href' => $baseURL,
                                ],
                        ]
                ];
@@ -153,8 +155,9 @@ class Xrd extends BaseModule
                System::jsonExit($json, 'application/jrd+json; charset=utf-8');
        }
 
-       private static function printJSON($alias, $baseURL, $owner, $avatar)
+       private function printJSON(string $alias, array $owner, array $avatar)
        {
+               $baseURL = $this->baseUrl->get();
                $salmon_key = Salmon::salmonKey($owner['spubkey']);
 
                $json = [
@@ -234,13 +237,11 @@ class Xrd extends BaseModule
                System::jsonExit($json, 'application/jrd+json; charset=utf-8');
        }
 
-       private static function printXML($alias, $baseURL, $user, $owner, $avatar)
+       private function printXML(string $alias, array $user, array $owner, array $avatar)
        {
+               $baseURL = $this->baseUrl->get();
                $salmon_key = Salmon::salmonKey($owner['spubkey']);
 
-               header('Access-Control-Allow-Origin: *');
-               header('Content-type: text/xml');
-
                $tpl = Renderer::getMarkupTemplate('xrd_person.tpl');
 
                $o = Renderer::replaceMacros($tpl, [
@@ -263,7 +264,8 @@ class Xrd extends BaseModule
                $arr = ['user' => $user, 'xml' => $o];
                Hook::callAll('personal_xrd', $arr);
 
-               echo $arr['xml'];
-               exit();
+               header('Access-Control-Allow-Origin: *');
+
+               System::httpExit($arr['xml'], Response::TYPE_XML, 'application/xrd+xml');
        }
 }