forked from AkkomaGang/akkoma
Add domain_blocking
to the relationship API (GET /api/v1/accounts/relationships)
This commit is contained in:
parent
53fad36b57
commit
4504135894
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 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 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 `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: Add `pleroma.deactivated` to the Account entity
|
||||||
- Mastodon API: added `/auth/password` endpoint for password reset with rate limit.
|
- 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
|
- 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}),
|
def muted_notifications?(user, %{ap_id: ap_id}),
|
||||||
do: Enum.member?(user.info.muted_notifications, ap_id)
|
do: Enum.member?(user.info.muted_notifications, ap_id)
|
||||||
|
|
||||||
def blocks?(%User{info: info} = _user, %{ap_id: ap_id}) do
|
def blocks?(%User{} = user, %User{} = target) do
|
||||||
blocks = info.blocks
|
blocks_ap_id?(user, target) || blocks_domain?(user, target)
|
||||||
|
|
||||||
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)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def blocks?(nil, _), do: false
|
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
|
def subscribed_to?(user, %{ap_id: ap_id}) do
|
||||||
with %User{} = target <- get_cached_by_ap_id(ap_id) do
|
with %User{} = target <- get_cached_by_ap_id(ap_id) do
|
||||||
Enum.member?(target.info.subscribers, user.ap_id)
|
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),
|
id: to_string(target.id),
|
||||||
following: User.following?(user, target),
|
following: User.following?(user, target),
|
||||||
followed_by: User.following?(target, user),
|
followed_by: User.following?(target, user),
|
||||||
blocking: User.blocks?(user, target),
|
blocking: User.blocks_ap_id?(user, target),
|
||||||
blocked_by: User.blocks?(target, user),
|
blocked_by: User.blocks_ap_id?(target, user),
|
||||||
muting: User.mutes?(user, target),
|
muting: User.mutes?(user, target),
|
||||||
muting_notifications: User.muted_notifications?(user, target),
|
muting_notifications: User.muted_notifications?(user, target),
|
||||||
subscribing: User.subscribed_to?(user, target),
|
subscribing: User.subscribed_to?(user, target),
|
||||||
requested: requested,
|
requested: requested,
|
||||||
domain_blocking: false,
|
domain_blocking: User.blocks_domain?(user, target),
|
||||||
showing_reblogs: User.showing_reblogs?(user, target),
|
showing_reblogs: User.showing_reblogs?(user, target),
|
||||||
endorsed: false
|
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})
|
AccountView.render("relationship.json", %{user: user, target: other_user})
|
||||||
end
|
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
|
test "represent a relationship for the user with a pending follow request" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
other_user = insert(:user, %{info: %User.Info{locked: true}})
|
other_user = insert(:user, %{info: %User.Info{locked: true}})
|
||||||
|
|
Loading…
Reference in a new issue