diff options
| author | eal <eal@waifu.club> | 2018-06-03 22:01:37 +0300 | 
|---|---|---|
| committer | eal <eal@waifu.club> | 2018-06-03 22:01:37 +0300 | 
| commit | 87566b6e2f48ee2b82d4af7ccb6200ff8bc721d1 (patch) | |
| tree | 32c0619a5a584a41fdaee04eb099d9a9f9e9c7df | |
| parent | 9d054d30bce383437b6bb07c869047f1cb8e164f (diff) | |
| download | pleroma-87566b6e2f48ee2b82d4af7ccb6200ff8bc721d1.tar.gz pleroma-87566b6e2f48ee2b82d4af7ccb6200ff8bc721d1.zip  | |
user.ex: add domain blocks.
| -rw-r--r-- | lib/pleroma/user.ex | 24 | ||||
| -rw-r--r-- | test/user_test.exs | 21 | 
2 files changed, 44 insertions, 1 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index b1b935a0f..c8e61f8a9 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -479,7 +479,29 @@ defmodule Pleroma.User do    def blocks?(user, %{ap_id: ap_id}) do      blocks = user.info["blocks"] || [] -    Enum.member?(blocks, ap_id) +    domain_blocks = user.info["domain_blocks"] || [] +    %{host: host} = URI.parse(ap_id) +    Enum.member?(blocks, ap_id) || Enum.any?(domain_blocks, fn domain -> +      host == domain +    end) +  end + +  def block_domain(user, domain) do +    domain_blocks = user.info["domain_blocks"] || [] +    new_blocks = Enum.uniq([domain | domain_blocks]) +    new_info = Map.put(user.info, "domain_blocks", new_blocks) + +    cs = User.info_changeset(user, %{info: new_info}) +    update_and_set_cache(cs) +  end + +  def unblock_domain(user, domain) do +    blocks = user.info["domain_blocks"] || [] +    new_blocks = List.delete(blocks, domain) +    new_info = Map.put(user.info, "domain_blocks", new_blocks) + +    cs = User.info_changeset(user, %{info: new_info}) +    update_and_set_cache(cs)    end    def local_user_query() do diff --git a/test/user_test.exs b/test/user_test.exs index 8c8cfd673..200352981 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -361,6 +361,27 @@ defmodule Pleroma.UserTest do      end    end +  describe "domain blocking" do +    test "blocks domains" do +      user = insert(:user) +      collateral_user = insert(:user, %{ap_id: "https://awful-and-rude-instance.com/user/bully"}) + +      {:ok, user} = User.block_domain(user, "awful-and-rude-instance.com") + +      assert User.blocks?(user, collateral_user) +    end + +    test "unblocks domains" do +      user = insert(:user) +      collateral_user = insert(:user, %{ap_id: "https://awful-and-rude-instance.com/user/bully"}) + +      {:ok, user} = User.block_domain(user, "awful-and-rude-instance.com") +      {:ok, user} = User.unblock_domain(user, "awful-and-rude-instance.com") + +      refute User.blocks?(user, collateral_user) +    end +  end +    test "get recipients from activity" do      actor = insert(:user)      user = insert(:user, local: true)  | 
