parent
67d8df04a4
commit
22fc271e23
@ -0,0 +1,36 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.Feed.TagController do
|
||||||
|
use Pleroma.Web, :controller
|
||||||
|
|
||||||
|
alias Pleroma.Config
|
||||||
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
|
alias Pleroma.Web.Feed.FeedView
|
||||||
|
|
||||||
|
def feed(conn, %{"tag" => tag} = params) do
|
||||||
|
activities =
|
||||||
|
%{
|
||||||
|
"type" => ["Create"],
|
||||||
|
"whole_db" => true,
|
||||||
|
"tag" => parse_tag(tag)
|
||||||
|
}
|
||||||
|
|> Map.merge(Map.take(params, ["max_id"]))
|
||||||
|
|> ActivityPub.fetch_public_activities()
|
||||||
|
|
||||||
|
conn
|
||||||
|
|> put_resp_content_type("application/atom+xml")
|
||||||
|
|> put_view(FeedView)
|
||||||
|
|> render("tag.xml", activities: activities, feed_config: Config.get([:feed]))
|
||||||
|
end
|
||||||
|
|
||||||
|
defp parse_tag(raw_tag) when is_binary(raw_tag) do
|
||||||
|
case Enum.reverse(String.split(raw_tag, ".")) do
|
||||||
|
[format | tag] when format in ["atom", "rss"] -> Enum.join(tag, ".")
|
||||||
|
_ -> raw_tag
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp parse_tag(raw_tag), do: raw_tag
|
||||||
|
end
|
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<feed
|
||||||
|
xmlns="http://www.w3.org/2005/Atom"
|
||||||
|
xmlns:thr="http://purl.org/syndication/thread/1.0"
|
||||||
|
xmlns:activity="http://activitystrea.ms/spec/1.0/"
|
||||||
|
xmlns:poco="http://portablecontacts.net/spec/1.0"
|
||||||
|
xmlns:ostatus="http://ostatus.org/schema/1.0">
|
||||||
|
|
||||||
|
<title>TAGS</title>
|
||||||
|
</feed>
|
@ -0,0 +1,31 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.Feed.TagControllerTest do
|
||||||
|
use Pleroma.Web.ConnCase
|
||||||
|
|
||||||
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
clear_config([:feed])
|
||||||
|
|
||||||
|
test "gets a feed", %{conn: conn} do
|
||||||
|
Pleroma.Config.put(
|
||||||
|
[:feed, :post_title],
|
||||||
|
%{max_length: 10, omission: "..."}
|
||||||
|
)
|
||||||
|
|
||||||
|
user = insert(:user)
|
||||||
|
{:ok, _activity1} = Pleroma.Web.CommonAPI.post(user, %{"status" => "yeah #PleromaArt"})
|
||||||
|
|
||||||
|
{:ok, _activity2} =
|
||||||
|
Pleroma.Web.CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"})
|
||||||
|
|
||||||
|
{:ok, _activity3} = Pleroma.Web.CommonAPI.post(user, %{"status" => "This is :moominmamma"})
|
||||||
|
|
||||||
|
assert conn
|
||||||
|
|> put_req_header("content-type", "application/atom+xml")
|
||||||
|
|> get("/tags/pleromaart.rss")
|
||||||
|
|> response(200)
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in new issue