Browse Source

Do not serve RSS/Atom feeds when instance is private

arm64test
Mark Felder rinpatch 3 years ago
parent
commit
a85ed6defb
5 changed files with 59 additions and 10 deletions
  1. +9
    -1
      lib/pleroma/web/feed/tag_controller.ex
  2. +9
    -1
      lib/pleroma/web/feed/user_controller.ex
  3. +12
    -8
      lib/pleroma/web/metadata/feed.ex
  4. +13
    -0
      test/web/feed/tag_controller_test.exs
  5. +16
    -0
      test/web/feed/user_controller_test.exs

+ 9
- 1
lib/pleroma/web/feed/tag_controller.ex View File

@@ -9,7 +9,15 @@ defmodule Pleroma.Web.Feed.TagController do
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.Feed.FeedView

def feed(conn, %{"tag" => raw_tag} = params) do
def feed(conn, params) do
if Pleroma.Config.get!([:instance, :public]) do
render_feed(conn, params)
else
render_error(conn, :not_found, "Not found")
end
end

def render_feed(conn, %{"tag" => raw_tag} = params) do
{format, tag} = parse_tag(raw_tag)

activities =


+ 9
- 1
lib/pleroma/web/feed/user_controller.ex View File

@@ -37,7 +37,15 @@ defmodule Pleroma.Web.Feed.UserController do
end
end

def feed(conn, %{"nickname" => nickname} = params) do
def feed(conn, params) do
if Pleroma.Config.get!([:instance, :public]) do
render_feed(conn, params)
else
errors(conn, {:error, :not_found})
end
end

def render_feed(conn, %{"nickname" => nickname} = params) do
format = get_format(conn)

format =


+ 12
- 8
lib/pleroma/web/metadata/feed.ex View File

@@ -11,13 +11,17 @@ defmodule Pleroma.Web.Metadata.Providers.Feed do

@impl Provider
def build_tags(%{user: user}) do
[
{:link,
[
rel: "alternate",
type: "application/atom+xml",
href: Helpers.user_feed_path(Endpoint, :feed, user.nickname) <> ".atom"
], []}
]
if Pleroma.Config.get!([:instance, :public]) do
[
{:link,
[
rel: "alternate",
type: "application/atom+xml",
href: Helpers.user_feed_path(Endpoint, :feed, user.nickname) <> ".atom"
], []}
]
else
[]
end
end
end

+ 13
- 0
test/web/feed/tag_controller_test.exs View File

@@ -181,4 +181,17 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
'yeah #PleromaArt'
]
end

describe "private instance" do
setup do: clear_config([:instance, :public])

test "returns 404 for tags feed", %{conn: conn} do
Config.put([:instance, :public], false)

conn
|> put_req_header("accept", "application/rss+xml")
|> get(tag_feed_path(conn, :feed, "pleromaart"))
|> response(404)
end
end
end

+ 16
- 0
test/web/feed/user_controller_test.exs View File

@@ -246,4 +246,20 @@ defmodule Pleroma.Web.Feed.UserControllerTest do
assert response == ~S({"error":"Not found"})
end
end

describe "private instance" do
setup do: clear_config([:instance, :public])

test "returns 404 for user feed", %{conn: conn} do
Config.put([:instance, :public], false)
user = insert(:user)

{:ok, _} = CommonAPI.post(user, %{status: "test"})

assert conn
|> put_req_header("accept", "application/atom+xml")
|> get(user_feed_path(conn, :feed, user.nickname))
|> response(404)
end
end
end

Loading…
Cancel
Save