Move mod/fetch to src/Module/Fetch
authorPhilipp Holzer <admin@philipp.info>
Fri, 3 May 2019 08:41:12 +0000 (10:41 +0200)
committerPhilipp Holzer <admin@philipp.info>
Fri, 3 May 2019 08:42:40 +0000 (10:42 +0200)
mod/fetch.php [deleted file]
src/App/Router.php
src/Module/Diaspora/Fetch.php [new file with mode: 0644]

diff --git a/mod/fetch.php b/mod/fetch.php
deleted file mode 100644 (file)
index 492f319..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-/*
-This file is part of the Diaspora protocol. It is used for fetching single public posts.
-*/
-
-use Friendica\App;
-use Friendica\Core\Protocol;
-use Friendica\Core\System;
-use Friendica\Protocol\Diaspora;
-use Friendica\Model\Item;
-use Friendica\Model\User;
-use Friendica\Util\Strings;
-use Friendica\Database\DBA;
-
-function fetch_init(App $a)
-{
-       if (($a->argc != 3) || (!in_array($a->argv[1], ["post", "status_message", "reshare"]))) {
-               throw new \Friendica\Network\HTTPException\NotFoundException();
-       }
-
-       $guid = $a->argv[2];
-
-       // Fetch the item
-       $fields = ['uid', 'title', 'body', 'guid', 'contact-id', 'private', 'created', 'app', 'location', 'coord', 'network',
-               'event-id', 'resource-id', 'author-link', 'author-avatar', 'author-name', 'plink', 'owner-link', 'attach'];
-       $condition = ['wall' => true, 'private' => false, 'guid' => $guid, 'network' => [Protocol::DFRN, Protocol::DIASPORA]];
-       $item = Item::selectFirst($fields, $condition);
-       if (!DBA::isResult($item)) {
-               $condition = ['guid' => $guid, 'network' => [Protocol::DFRN, Protocol::DIASPORA]];
-               $item = Item::selectFirst(['author-link'], $condition);
-               if (DBA::isResult($item)) {
-                       $parts = parse_url($item["author-link"]);
-                       $host = $parts["scheme"]."://".$parts["host"];
-
-                       if (Strings::normaliseLink($host) != Strings::normaliseLink(System::baseUrl())) {
-                               $location = $host."/fetch/".$a->argv[1]."/".urlencode($guid);
-
-                               header("HTTP/1.1 301 Moved Permanently");
-                               header("Location:".$location);
-                               exit();
-                       }
-               }
-
-               throw new \Friendica\Network\HTTPException\NotFoundException();
-       }
-
-       // Fetch some data from the author (We could combine both queries - but I think this is more readable)
-       $user = User::getOwnerDataById($item["uid"]);
-       if (!$user) {
-               throw new \Friendica\Network\HTTPException\NotFoundException();
-       }
-
-       $status = Diaspora::buildStatus($item, $user);
-       $xml = Diaspora::buildPostXml($status["type"], $status["message"]);
-
-       // Send the envelope
-       header("Content-Type: application/magic-envelope+xml; charset=utf-8");
-       echo Diaspora::buildMagicEnvelope($xml, $user);
-
-       exit();
-}
index 34ca0df..4e51ed7 100644 (file)
@@ -103,6 +103,11 @@ class Router
                });
                $this->routeCollector->addRoute(['GET'],         '/directory',           Module\Directory::class);
                $this->routeCollector->addRoute(['GET'],         '/feedtest',            Module\Feedtest::class);
+               $this->routeCollector->addGroup('/fetch', function (RouteCollector $collector) {
+                       $collector->addRoute(['GET'], '/{guid}/post',                        Module\Diaspora\Fetch::class);
+                       $collector->addRoute(['GET'], '/{guid}/status_message',              Module\Diaspora\Fetch::class);
+                       $collector->addRoute(['GET'], '/{guid}/reshare',                     Module\Diaspora\Fetch::class);
+               });
                $this->routeCollector->addRoute(['GET'],         '/filer[/{id:\d+}]',    Module\Filer::class);
                $this->routeCollector->addRoute(['GET'],         '/followers/{owner}',   Module\Followers::class);
                $this->routeCollector->addRoute(['GET'],         '/following/{owner}',   Module\Following::class);
diff --git a/src/Module/Diaspora/Fetch.php b/src/Module/Diaspora/Fetch.php
new file mode 100644 (file)
index 0000000..e6f94a9
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+
+namespace Friendica\Module\Diaspora;
+
+use Friendica\BaseModule;
+use Friendica\Core\Protocol;
+use Friendica\Model\Item;
+use Friendica\Model\User;
+use Friendica\Network\HTTPException;
+use Friendica\Protocol\Diaspora;
+use Friendica\Util\Strings;
+
+/**
+ * This module is part of the Diaspora protocol.
+ * It is used for fetching single public posts.
+ */
+class Fetch extends BaseModule
+{
+       public static function rawContent()
+       {
+               $app = self::getApp();
+
+               // @TODO: Replace with parameter from router
+               if (($app->argc != 3) || (!in_array($app->argv[1], ["post", "status_message", "reshare"]))) {
+                       throw new HTTPException\NotFoundException();
+               }
+
+               // @TODO: Replace with parameter from router
+               $guid = $app->argv[2];
+
+               // Fetch the item
+               $fields = [
+                       'uid', 'title', 'body', 'guid', 'contact-id', 'private', 'created', 'app', 'location', 'coord', 'network',
+                       'event-id', 'resource-id', 'author-link', 'author-avatar', 'author-name', 'plink', 'owner-link', 'attach'
+               ];
+               $condition = ['wall' => true, 'private' => false, 'guid' => $guid, 'network' => [Protocol::DFRN, Protocol::DIASPORA]];
+               $item = Item::selectFirst($fields, $condition);
+               if (empty($item)) {
+                       $condition = ['guid' => $guid, 'network' => [Protocol::DFRN, Protocol::DIASPORA]];
+                       $item = Item::selectFirst(['author-link'], $condition);
+                       if (empty($item)) {
+                               $parts = parse_url($item["author-link"]);
+                               $host = $parts["scheme"] . "://" . $parts["host"];
+
+                               if (Strings::normaliseLink($host) != Strings::normaliseLink($app->getBaseURL())) {
+                                       $location = $host . "/fetch/" . $app->argv[1] . "/" . urlencode($guid);
+
+                                       header("HTTP/1.1 301 Moved Permanently");
+                                       header("Location:" . $location);
+                                       exit();
+                               }
+                       }
+
+                       throw new HTTPException\NotFoundException();
+               }
+
+               // Fetch some data from the author (We could combine both queries - but I think this is more readable)
+               $user = User::getOwnerDataById($item["uid"]);
+               if (!$user) {
+                       throw new HTTPException\NotFoundException();
+               }
+
+               $status = Diaspora::buildStatus($item, $user);
+               $xml = Diaspora::buildPostXml($status["type"], $status["message"]);
+
+               // Send the envelope
+               header("Content-Type: application/magic-envelope+xml; charset=utf-8");
+               echo Diaspora::buildMagicEnvelope($xml, $user);
+
+               exit();
+       }
+}