include local instance in bubble timeline (#117)

Reviewed-on: AkkomaGang/akkoma#117
This commit is contained in:
floatingghost 2022-07-26 12:22:49 +00:00
parent 90c4785b89
commit 1f6deb0ef4
2 changed files with 11 additions and 21 deletions

View file

@ -128,7 +128,11 @@ def public(%{assigns: %{user: user}} = conn, params) do
# GET /api/v1/timelines/bubble # GET /api/v1/timelines/bubble
def bubble(%{assigns: %{user: user}} = conn, params) do def bubble(%{assigns: %{user: user}} = conn, params) do
bubble_instances = Config.get([:instance, :local_bubble], []) bubble_instances =
Enum.uniq(
Config.get([:instance, :local_bubble], []) ++
[Pleroma.Web.Endpoint.host()]
)
if is_nil(user) do if is_nil(user) do
fail_on_bad_auth(conn) fail_on_bad_auth(conn)

View file

@ -997,18 +997,10 @@ test "with `%{local: true, federated: false}`, forbids unauthenticated access to
describe "bubble" do describe "bubble" do
setup do: oauth_access(["read:statuses"]) setup do: oauth_access(["read:statuses"])
test "it returns nothing if no bubble is configured", %{user: user, conn: conn} do
clear_config([:instance, :local_bubble], [])
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
conn = get(conn, "/api/v1/timelines/bubble")
assert [] = json_response_and_validate_schema(conn, :ok)
end
test "filtering", %{conn: conn, user: user} do test "filtering", %{conn: conn, user: user} do
clear_config([:instance, :local_bubble], []) clear_config([:instance, :local_bubble], [])
local_user = insert(:user) # our endpoint host has a port in it so let's set the AP ID
local_user = insert(:user, %{ap_id: "https://localhost/users/user"})
remote_user = insert(:user, %{ap_id: "https://example.com/users/remote_user"}) remote_user = insert(:user, %{ap_id: "https://example.com/users/remote_user"})
{:ok, user, local_user} = User.follow(user, local_user) {:ok, user, local_user} = User.follow(user, local_user)
{:ok, _user, remote_user} = User.follow(user, remote_user) {:ok, _user, remote_user} = User.follow(user, remote_user)
@ -1016,15 +1008,8 @@ test "filtering", %{conn: conn, user: user} do
{:ok, local_activity} = CommonAPI.post(local_user, %{status: "Status"}) {:ok, local_activity} = CommonAPI.post(local_user, %{status: "Status"})
remote_activity = create_remote_activity(remote_user) remote_activity = create_remote_activity(remote_user)
resp = # If nothing, only include ours
conn clear_config([:instance, :local_bubble], [])
|> get("/api/v1/timelines/bubble")
|> json_response_and_validate_schema(200)
|> Enum.map(& &1["id"])
assert Enum.empty?(resp)
clear_config([:instance, :local_bubble], ["localhost:4001"])
one_instance = one_instance =
conn conn
@ -1034,7 +1019,8 @@ test "filtering", %{conn: conn, user: user} do
assert local_activity.id in one_instance assert local_activity.id in one_instance
clear_config([:instance, :local_bubble], ["localhost:4001", "example.com"]) # If we have others, also include theirs
clear_config([:instance, :local_bubble], ["example.com"])
two_instances = two_instances =
conn conn