diff options
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | lib/pleroma/user.ex | 21 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/views/account_view.ex | 6 | ||||
| -rw-r--r-- | test/web/mastodon_api/account_view_test.exs | 10 | 
4 files changed, 28 insertions, 10 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 35a5a6c21..a3f54d19e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).  - Mastodon API: Add support for categories for custom emojis by reusing the group feature. <https://github.com/tootsuite/mastodon/pull/11196>  - Mastodon API: Add support for muting/unmuting notifications  - Mastodon API: Add support for the `blocked_by` attribute in the relationship API (`GET /api/v1/accounts/relationships`). <https://github.com/tootsuite/mastodon/pull/10373> +- Mastodon API: Add support for the `domain_blocking` attribute in the relationship API (`GET /api/v1/accounts/relationships`).  - Mastodon API: Add `pleroma.deactivated` to the Account entity  - Mastodon API: added `/auth/password` endpoint for password reset with rate limit.  - Mastodon API: /api/v1/accounts/:id/statuses now supports nicknames or user id diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 982ca8bc1..974f6df18 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -882,18 +882,25 @@ defmodule Pleroma.User do    def muted_notifications?(user, %{ap_id: ap_id}),      do: Enum.member?(user.info.muted_notifications, ap_id) -  def blocks?(%User{info: info} = _user, %{ap_id: ap_id}) do -    blocks = info.blocks +  def blocks?(%User{} = user, %User{} = target) do +    blocks_ap_id?(user, target) || blocks_domain?(user, target) +  end -    domain_blocks = Pleroma.Web.ActivityPub.MRF.subdomains_regex(info.domain_blocks) +  def blocks?(nil, _), do: false -    %{host: host} = URI.parse(ap_id) +  def blocks_ap_id?(%User{} = user, %User{} = target) do +    Enum.member?(user.info.blocks, target.ap_id) +  end -    Enum.member?(blocks, ap_id) || -      Pleroma.Web.ActivityPub.MRF.subdomain_match?(domain_blocks, host) +  def blocks_ap_id?(_, _), do: false + +  def blocks_domain?(%User{} = user, %User{} = target) do +    domain_blocks = Pleroma.Web.ActivityPub.MRF.subdomains_regex(user.info.domain_blocks) +    %{host: host} = URI.parse(target.ap_id) +    Pleroma.Web.ActivityPub.MRF.subdomain_match?(domain_blocks, host)    end -  def blocks?(nil, _), do: false +  def blocks_domain?(_, _), do: false    def subscribed_to?(user, %{ap_id: ap_id}) do      with %User{} = target <- get_cached_by_ap_id(ap_id) do diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index befb35c26..b2b06eeb9 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -50,13 +50,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do        id: to_string(target.id),        following: User.following?(user, target),        followed_by: User.following?(target, user), -      blocking: User.blocks?(user, target), -      blocked_by: User.blocks?(target, user), +      blocking: User.blocks_ap_id?(user, target), +      blocked_by: User.blocks_ap_id?(target, user),        muting: User.mutes?(user, target),        muting_notifications: User.muted_notifications?(user, target),        subscribing: User.subscribed_to?(user, target),        requested: requested, -      domain_blocking: false, +      domain_blocking: User.blocks_domain?(user, target),        showing_reblogs: User.showing_reblogs?(user, target),        endorsed: false      } diff --git a/test/web/mastodon_api/account_view_test.exs b/test/web/mastodon_api/account_view_test.exs index fa44d35cc..905e9af98 100644 --- a/test/web/mastodon_api/account_view_test.exs +++ b/test/web/mastodon_api/account_view_test.exs @@ -231,6 +231,16 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do                 AccountView.render("relationship.json", %{user: user, target: other_user})      end +    test "represent a relationship for the user blocking a domain" do +      user = insert(:user) +      other_user = insert(:user, ap_id: "https://bad.site/users/other_user") + +      {:ok, user} = User.block_domain(user, "bad.site") + +      assert %{domain_blocking: true, blocking: false} = +               AccountView.render("relationship.json", %{user: user, target: other_user}) +    end +      test "represent a relationship for the user with a pending follow request" do        user = insert(:user)        other_user = insert(:user, %{info: %User.Info{locked: true}})  | 
