Merge branch 'domain-blocking-relationship-api' into 'develop'
Add `domain_blocking` to the relationship API (GET /api/v1/accounts/relationships) See merge request pleroma/pleroma!1481
This commit is contained in:
		
						commit
						b7fae304d3
					
				
					 4 changed files with 30 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -882,19 +882,26 @@ def muted_notifications?(nil, _), do: false
 | 
			
		|||
  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
 | 
			
		||||
 | 
			
		||||
    domain_blocks = Pleroma.Web.ActivityPub.MRF.subdomains_regex(info.domain_blocks)
 | 
			
		||||
 | 
			
		||||
    %{host: host} = URI.parse(ap_id)
 | 
			
		||||
 | 
			
		||||
    Enum.member?(blocks, ap_id) ||
 | 
			
		||||
      Pleroma.Web.ActivityPub.MRF.subdomain_match?(domain_blocks, host)
 | 
			
		||||
  def blocks?(%User{} = user, %User{} = target) do
 | 
			
		||||
    blocks_ap_id?(user, target) || blocks_domain?(user, target)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def blocks?(nil, _), do: false
 | 
			
		||||
 | 
			
		||||
  def blocks_ap_id?(%User{} = user, %User{} = target) do
 | 
			
		||||
    Enum.member?(user.info.blocks, target.ap_id)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  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_domain?(_, _), do: false
 | 
			
		||||
 | 
			
		||||
  def subscribed_to?(user, %{ap_id: ap_id}) do
 | 
			
		||||
    with %User{} = target <- get_cached_by_ap_id(ap_id) do
 | 
			
		||||
      Enum.member?(target.info.subscribers, user.ap_id)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,13 +50,13 @@ def render("relationship.json", %{user: %User{} = user, target: %User{} = target
 | 
			
		|||
      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
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -231,6 +231,16 @@ test "represent a relationship for the blocking and blocked user" 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}})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue