aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancis Dinh <normandy@firemail.cc>2018-05-19 21:23:52 -0400
committerFrancis Dinh <normandy@firemail.cc>2018-05-19 21:23:52 -0400
commit1e43de0f86ea632a313f9bf7434183a6db38f0b6 (patch)
tree0cf215887945a855d49034dd6956e402dce9bb30
parentda9744eb8481b4df527d0e360aa30be9ca6b5a3a (diff)
downloadpleroma-1e43de0f86ea632a313f9bf7434183a6db38f0b6.tar.gz
Formatting and add tests for blocks/unblocks
-rw-r--r--lib/pleroma/user.ex24
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex5
-rw-r--r--lib/pleroma/web/activity_pub/utils.ex1
-rw-r--r--test/fixtures/mastodon-block-activity.json29
-rw-r--r--test/fixtures/mastodon-unblock-activity.json33
-rw-r--r--test/web/activity_pub/transmogrifier_test.exs46
6 files changed, 127 insertions, 11 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 399a66787..6a8129ac8 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -404,18 +404,22 @@ defmodule Pleroma.User do
from(
u in User,
select_merge: %{
- search_distance: fragment(
- "? <-> (? || ?)",
- ^query,
- u.nickname,
- u.name
- )}
+ search_distance:
+ fragment(
+ "? <-> (? || ?)",
+ ^query,
+ u.nickname,
+ u.name
+ )
+ }
)
- q = from(s in subquery(inner),
- order_by: s.search_distance,
- limit: 20
- )
+ q =
+ from(
+ s in subquery(inner),
+ order_by: s.search_distance,
+ limit: 20
+ )
Repo.all(q)
end
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
index 0d539c02c..fe0294c5c 100644
--- a/lib/pleroma/web/activity_pub/transmogrifier.ex
+++ b/lib/pleroma/web/activity_pub/transmogrifier.ex
@@ -266,7 +266,9 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
handle_incoming(data)
end
- def handle_incoming(%{"type" => "Block", "object" => blocked, "actor" => blocker, "id" => id} = data) do
+ def handle_incoming(
+ %{"type" => "Block", "object" => blocked, "actor" => blocker, "id" => id} = data
+ ) do
with %User{local: true} = blocked = User.get_cached_by_ap_id(blocked),
%User{} = blocker = User.get_or_fetch_by_ap_id(blocker),
{:ok, activity} <- ActivityPub.block(blocker, blocked, false) do
@@ -277,6 +279,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
e -> :error
end
end
+
# TODO
# Accept
# Undo for non-Announce
diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex
index c29fc6b07..846dd97c2 100644
--- a/lib/pleroma/web/activity_pub/utils.ex
+++ b/lib/pleroma/web/activity_pub/utils.ex
@@ -357,6 +357,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do
"object" => block_activity.data
}
end
+
#### Create-related helpers
def make_create_data(params, additional) do
diff --git a/test/fixtures/mastodon-block-activity.json b/test/fixtures/mastodon-block-activity.json
new file mode 100644
index 000000000..186719d2c
--- /dev/null
+++ b/test/fixtures/mastodon-block-activity.json
@@ -0,0 +1,29 @@
+{
+ "type": "Block",
+ "signature": {
+ "type": "RsaSignature2017",
+ "signatureValue": "Kn1/UkAQGJVaXBfWLAHcnwHg8YMAUqlEaBuYLazAG+pz5hqivsyrBmPV186Xzr+B4ZLExA9+SnOoNx/GOz4hBm0kAmukNSILAsUd84tcJ2yT9zc1RKtembK4WiwOw7li0+maeDN0HaB6t+6eTqsCWmtiZpprhXD8V1GGT8yG7X24fQ9oFGn+ng7lasbcCC0988Y1eGqNe7KryxcPuQz57YkDapvtONzk8gyLTkZMV4De93MyRHq6GVjQVIgtiYabQAxrX6Q8C+4P/jQoqdWJHEe+MY5JKyNaT/hMPt2Md1ok9fZQBGHlErk22/zy8bSN19GdG09HmIysBUHRYpBLig==",
+ "creator": "http://mastodon.example.org/users/admin#main-key",
+ "created": "2018-02-17T13:29:31Z"
+ },
+ "object": "http://localtesting.pleroma.lol/users/lain",
+ "nickname": "lain",
+ "id": "http://mastodon.example.org/users/admin#follows/2",
+ "actor": "http://mastodon.example.org/users/admin",
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ "https://w3id.org/security/v1",
+ {
+ "toot": "http://joinmastodon.org/ns#",
+ "sensitive": "as:sensitive",
+ "ostatus": "http://ostatus.org#",
+ "movedTo": "as:movedTo",
+ "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
+ "inReplyToAtomUri": "ostatus:inReplyToAtomUri",
+ "conversation": "ostatus:conversation",
+ "atomUri": "ostatus:atomUri",
+ "Hashtag": "as:Hashtag",
+ "Emoji": "toot:Emoji"
+ }
+ ]
+}
diff --git a/test/fixtures/mastodon-unblock-activity.json b/test/fixtures/mastodon-unblock-activity.json
new file mode 100644
index 000000000..53b2f42a8
--- /dev/null
+++ b/test/fixtures/mastodon-unblock-activity.json
@@ -0,0 +1,33 @@
+{
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ "https://w3id.org/security/v1",
+ {
+ "toot": "http://joinmastodon.org/ns#",
+ "sensitive": "as:sensitive",
+ "ostatus": "http://ostatus.org#",
+ "movedTo": "as:movedTo",
+ "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
+ "inReplyToAtomUri": "ostatus:inReplyToAtomUri",
+ "conversation": "ostatus:conversation",
+ "atomUri": "ostatus:atomUri",
+ "Hashtag": "as:Hashtag",
+ "Emoji": "toot:Emoji"
+ }
+ ],
+ "signature": {
+ "type": "RsaSignature2017",
+ "signatureValue": "Kn1/UkAQGJVaXBfWLAHcnwHg8YMAUqlEaBuYLazAG+pz5hqivsyrBmPV186Xzr+B4ZLExA9+SnOoNx/GOz4hBm0kAmukNSILAsUd84tcJ2yT9zc1RKtembK4WiwOw7li0+maeDN0HaB6t+6eTqsCWmtiZpprhXD8V1GGT8yG7X24fQ9oFGn+ng7lasbcCC0988Y1eGqNe7KryxcPuQz57YkDapvtONzk8gyLTkZMV4De93MyRHq6GVjQVIgtiYabQAxrX6Q8C+4P/jQoqdWJHEe+MY5JKyNaT/hMPt2Md1ok9fZQBGHlErk22/zy8bSN19GdG09HmIysBUHRYpBLig==",
+ "creator": "http://mastodon.example.org/users/admin#main-key",
+ "created": "2018-02-17T13:29:31Z"
+ },
+ "type": "Undo",
+ "object": {
+ "type": "Block",
+ "object": "http://localtesting.pleroma.lol/users/lain",
+ "nickname": "lain",
+ "id": "http://mastodon.example.org/users/admin#follows/2",
+ "actor": "http://mastodon.example.org/users/admin"
+ },
+ "actor": "http://mastodon.example.org/users/admin"
+}
diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs
index 8ed7147f4..0ca00a07e 100644
--- a/test/web/activity_pub/transmogrifier_test.exs
+++ b/test/web/activity_pub/transmogrifier_test.exs
@@ -280,10 +280,56 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
assert data["type"] == "Undo"
assert data["object"]["type"] == "Follow"
+ assert data["object"]["object"] == user.ap_id
assert data["actor"] == "http://mastodon.example.org/users/admin"
refute User.following?(User.get_by_ap_id(data["actor"]), user)
end
+
+ test "it works for incoming blocks" do
+ user = insert(:user)
+
+ data =
+ File.read!("test/fixtures/mastodon-block-activity.json")
+ |> Poison.decode!()
+ |> Map.put("object", user.ap_id)
+
+ {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
+
+ assert data["type"] == "Block"
+ assert data["object"] == user.ap_id
+ assert data["actor"] == "https://mastodon.example.org/users/admin"
+
+ blocker = User.get_by_ap_id(data["actor"])
+
+ assert User.blocks?(blocker, user.ap_id)
+ end
+
+ test "it works for incoming unblocks" do
+ user = insert(:user)
+
+ block_data =
+ File.read!("test/fixtures/mastodon-block-activity.json")
+ |> Poison.decode!()
+ |> Map.put("object", user.ap_id)
+
+ {:ok, %Activity{data: _, local: false}} = Transmogrifier.handle_incoming(block_data)
+
+ data =
+ File.read!("test/fixtures/mastodon-unblock-activity.json")
+ |> Poison.decode!()
+ |> Map.put("object", block_data)
+
+ {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
+ assert data["type"] == "Undo"
+ assert data["object"]["type"] == "Block"
+ assert data["object"]["object"] == user.ap_id
+ assert data["actor"] == "https://mastodon.example.org/users/admin"
+
+ blocker = User.get_by_ap_id(data["actor"])
+
+ refute User.blocks?(blocker, user.ap_id)
+ end
end
describe "prepare outgoing" do