diff --git a/mod/fetch.php b/mod/fetch.php deleted file mode 100644 index 492f319efb..0000000000 --- a/mod/fetch.php +++ /dev/null @@ -1,61 +0,0 @@ -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(); -} diff --git a/src/App/Router.php b/src/App/Router.php index 34ca0df3dd..4e51ed75c4 100644 --- a/src/App/Router.php +++ b/src/App/Router.php @@ -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 index 0000000000..e6f94a958e --- /dev/null +++ b/src/Module/Diaspora/Fetch.php @@ -0,0 +1,72 @@ +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(); + } +}