Browse Source

fixed unfollow for relay actor

tags/v1.1.4
Maksim Pechnikov 4 years ago
parent
commit
64bfb41c55
4 changed files with 48 additions and 1 deletions
  1. +14
    -0
      lib/pleroma/web/activity_pub/activity_pub_controller.ex
  2. +2
    -1
      lib/pleroma/web/activity_pub/relay.ex
  3. +3
    -0
      lib/pleroma/web/router.ex
  4. +29
    -0
      test/web/activity_pub/activity_pub_controller_test.exs

+ 14
- 0
lib/pleroma/web/activity_pub/activity_pub_controller.ex View File

@@ -104,6 +104,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
end
end

# GET /relay/following
def following(%{assigns: %{relay: true}} = conn, _params) do
conn
|> put_resp_header("content-type", "application/activity+json")
|> json(UserView.render("following.json", %{user: Relay.get_actor()}))
end

def following(%{assigns: %{user: for_user}} = conn, %{"nickname" => nickname, "page" => page}) do
with %User{} = user <- User.get_cached_by_nickname(nickname),
{user, for_user} <- ensure_user_keys_present_and_maybe_refresh_for_user(user, for_user),
@@ -131,6 +138,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
end
end

# GET /relay/followers
def followers(%{assigns: %{relay: true}} = conn, _params) do
conn
|> put_resp_header("content-type", "application/activity+json")
|> json(UserView.render("followers.json", %{user: Relay.get_actor()}))
end

def followers(%{assigns: %{user: for_user}} = conn, %{"nickname" => nickname, "page" => page}) do
with %User{} = user <- User.get_cached_by_nickname(nickname),
{user, for_user} <- ensure_user_keys_present_and_maybe_refresh_for_user(user, for_user),


+ 2
- 1
lib/pleroma/web/activity_pub/relay.ex View File

@@ -36,7 +36,8 @@ defmodule Pleroma.Web.ActivityPub.Relay do
def unfollow(target_instance) do
with %User{} = local_user <- get_actor(),
{:ok, %User{} = target_user} <- User.get_or_fetch_by_ap_id(target_instance),
{:ok, activity} <- ActivityPub.unfollow(local_user, target_user) do
{:ok, activity} <- ActivityPub.unfollow(local_user, target_user),
{:ok, _, _} <- User.unfollow(local_user, target_user) do
Logger.info("relay: unfollowed instance: #{target_instance}: id=#{activity.data["id"]}")
{:ok, activity}
else


+ 3
- 0
lib/pleroma/web/router.ex View File

@@ -687,6 +687,9 @@ defmodule Pleroma.Web.Router do

get("/", ActivityPubController, :relay)
post("/inbox", ActivityPubController, :inbox)

get("/following", ActivityPubController, :following, assigns: %{relay: true})
get("/followers", ActivityPubController, :followers, assigns: %{relay: true})
end

scope "/internal/fetch", Pleroma.Web.ActivityPub do


+ 29
- 0
test/web/activity_pub/activity_pub_controller_test.exs View File

@@ -12,6 +12,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
alias Pleroma.Web.ActivityPub.ObjectView
alias Pleroma.Web.ActivityPub.UserView
alias Pleroma.Web.ActivityPub.Utils
alias Pleroma.Web.ActivityPub.Relay
alias Pleroma.Web.CommonAPI

setup_all do
@@ -593,6 +594,34 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
end
end

describe "/relay/followers" do
test "it returns relay followers", %{conn: conn} do
relay_actor = Relay.get_actor()
user = insert(:user)
User.follow(user, relay_actor)

result =
conn
|> assign(:relay, true)
|> get("/relay/followers")
|> json_response(200)

assert result["first"]["orderedItems"] == [user.ap_id]
end
end

describe "/relay/following" do
test "it returns relay following", %{conn: conn} do
result =
conn
|> assign(:relay, true)
|> get("/relay/following")
|> json_response(200)

assert result["first"]["orderedItems"] == []
end
end

describe "/users/:nickname/followers" do
test "it returns the followers in a collection", %{conn: conn} do
user = insert(:user)


Loading…
Cancel
Save