projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'preload-data' into 'develop'
[akkoma]
/
lib
/
pleroma
/
web
/
activity_pub
/
transmogrifier.ex
diff --git
a/lib/pleroma/web/activity_pub/transmogrifier.ex
b/lib/pleroma/web/activity_pub/transmogrifier.ex
index 4ac0d43fc17fd3e62e3e28beaa22ada6bff05f25..4e318e89cf2d9d4cd7f08b08051b62ba1d74d5a9 100644
(file)
--- a/
lib/pleroma/web/activity_pub/transmogrifier.ex
+++ b/
lib/pleroma/web/activity_pub/transmogrifier.ex
@@
-8,7
+8,10
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
"""
alias Pleroma.Activity
alias Pleroma.EarmarkRenderer
"""
alias Pleroma.Activity
alias Pleroma.EarmarkRenderer
+ alias Pleroma.EctoType.ActivityPub.ObjectValidators
alias Pleroma.FollowingRelationship
alias Pleroma.FollowingRelationship
+ alias Pleroma.Maps
+ alias Pleroma.Notification
alias Pleroma.Object
alias Pleroma.Object.Containment
alias Pleroma.Repo
alias Pleroma.Object
alias Pleroma.Object.Containment
alias Pleroma.Repo
@@
-16,7
+19,6
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.ActivityPub.Builder
alias Pleroma.Web.ActivityPub.ObjectValidator
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.ActivityPub.Builder
alias Pleroma.Web.ActivityPub.ObjectValidator
- alias Pleroma.Web.ActivityPub.ObjectValidators.Types
alias Pleroma.Web.ActivityPub.Pipeline
alias Pleroma.Web.ActivityPub.Utils
alias Pleroma.Web.ActivityPub.Visibility
alias Pleroma.Web.ActivityPub.Pipeline
alias Pleroma.Web.ActivityPub.Utils
alias Pleroma.Web.ActivityPub.Visibility
@@
-170,8
+172,8
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
object
|> Map.put("inReplyTo", replied_object.data["id"])
|> Map.put("inReplyToAtomUri", object["inReplyToAtomUri"] || in_reply_to_id)
object
|> Map.put("inReplyTo", replied_object.data["id"])
|> Map.put("inReplyToAtomUri", object["inReplyToAtomUri"] || in_reply_to_id)
- |> Map.put("conversation", replied_object.data["context"] || object["conversation"])
|> Map.put("context", replied_object.data["context"] || object["conversation"])
|> Map.put("context", replied_object.data["context"] || object["conversation"])
+ |> Map.drop(["conversation"])
else
e ->
Logger.error("Couldn't fetch #{inspect(in_reply_to_id)}, error: #{inspect(e)}")
else
e ->
Logger.error("Couldn't fetch #{inspect(in_reply_to_id)}, error: #{inspect(e)}")
@@
-205,13
+207,7
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
object
|> Map.put("context", context)
object
|> Map.put("context", context)
- |> Map.put("conversation", context)
- end
-
- defp add_if_present(map, _key, nil), do: map
-
- defp add_if_present(map, key, value) do
- Map.put(map, key, value)
+ |> Map.drop(["conversation"])
end
def fix_attachments(%{"attachment" => attachment} = object) when is_list(attachment) do
end
def fix_attachments(%{"attachment" => attachment} = object) when is_list(attachment) do
@@
-226,9
+222,9
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
media_type =
cond do
media_type =
cond do
- is_map(url) &&
is_binary
(url["mediaType"]) -> url["mediaType"]
-
is_binary
(data["mediaType"]) -> data["mediaType"]
-
is_binary
(data["mimeType"]) -> data["mimeType"]
+ is_map(url) &&
MIME.valid?
(url["mediaType"]) -> url["mediaType"]
+
MIME.valid?
(data["mediaType"]) -> data["mediaType"]
+
MIME.valid?
(data["mimeType"]) -> data["mimeType"]
true -> nil
end
true -> nil
end
@@
-241,13
+237,13
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
attachment_url =
%{"href" => href}
attachment_url =
%{"href" => href}
- |>
add
_if_present("mediaType", media_type)
- |>
add
_if_present("type", Map.get(url || %{}, "type"))
+ |>
Maps.put
_if_present("mediaType", media_type)
+ |>
Maps.put
_if_present("type", Map.get(url || %{}, "type"))
%{"url" => [attachment_url]}
%{"url" => [attachment_url]}
- |>
add
_if_present("mediaType", media_type)
- |>
add
_if_present("type", data["type"])
- |>
add
_if_present("name", data["name"])
+ |>
Maps.put
_if_present("mediaType", media_type)
+ |>
Maps.put
_if_present("type", data["type"])
+ |>
Maps.put
_if_present("name", data["name"])
end)
Map.put(object, "attachment", attachments)
end)
Map.put(object, "attachment", attachments)
@@
-462,7
+458,7
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
to: data["to"],
object: object,
actor: user,
to: data["to"],
object: object,
actor: user,
- context: object["con
versation
"],
+ context: object["con
text
"],
local: false,
published: data["published"],
additional:
local: false,
published: data["published"],
additional:
@@
-532,7
+528,8
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
User.get_cached_by_ap_id(Containment.get_actor(%{"actor" => followed})),
{:ok, %User{} = follower} <-
User.get_or_fetch_by_ap_id(Containment.get_actor(%{"actor" => follower})),
User.get_cached_by_ap_id(Containment.get_actor(%{"actor" => followed})),
{:ok, %User{} = follower} <-
User.get_or_fetch_by_ap_id(Containment.get_actor(%{"actor" => follower})),
- {:ok, activity} <- ActivityPub.follow(follower, followed, id, false) do
+ {:ok, activity} <-
+ ActivityPub.follow(follower, followed, id, false, skip_notify_and_stream: true) do
with deny_follow_blocked <- Pleroma.Config.get([:user, :deny_follow_blocked]),
{_, false} <- {:user_blocked, User.blocks?(followed, follower) && deny_follow_blocked},
{_, false} <- {:user_locked, User.locked?(followed)},
with deny_follow_blocked <- Pleroma.Config.get([:user, :deny_follow_blocked]),
{_, false} <- {:user_blocked, User.blocks?(followed, follower) && deny_follow_blocked},
{_, false} <- {:user_locked, User.locked?(followed)},
@@
-575,6
+572,7
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
:noop
end
:noop
end
+ ActivityPub.notify_and_stream(activity)
{:ok, activity}
else
_e ->
{:ok, activity}
else
_e ->
@@
-595,6
+593,8
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
User.update_follower_count(followed)
User.update_following_count(follower)
User.update_follower_count(followed)
User.update_following_count(follower)
+ Notification.update_notification_type(followed, follow_activity)
+
ActivityPub.accept(%{
to: follow_activity.data["to"],
type: "Accept",
ActivityPub.accept(%{
to: follow_activity.data["to"],
type: "Accept",
@@
-684,35
+684,12
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
end
def handle_incoming(
end
def handle_incoming(
- %{"type" => "Update", "object" => %{"type" => object_type} = object, "actor" => actor_id} =
- data,
+ %{"type" => "Update"} = data,
_options
_options
- )
- when object_type in [
- "Person",
- "Application",
- "Service",
- "Organization"
- ] do
- with %User{ap_id: ^actor_id} = actor <- User.get_cached_by_ap_id(object["id"]) do
- {:ok, new_user_data} = ActivityPub.user_data_from_user_object(object)
-
- actor
- |> User.remote_user_changeset(new_user_data)
- |> User.update_and_set_cache()
-
- ActivityPub.update(%{
- local: false,
- to: data["to"] || [],
- cc: data["cc"] || [],
- object: object,
- actor: actor_id,
- activity_id: data["id"]
- })
- else
- e ->
- Logger.error(e)
- :error
+ ) do
+ with {:ok, %User{}} <- ObjectValidator.fetch_actor(data),
+ {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do
+ {:ok, activity}
end
end
end
end
@@
-725,7
+702,7
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
else
{:error, {:validate_object, _}} = e ->
# Check if we have a create activity for this
else
{:error, {:validate_object, _}} = e ->
# Check if we have a create activity for this
- with {:ok, object_id} <-
Type
s.ObjectID.cast(data["object"]),
+ with {:ok, object_id} <-
ObjectValidator
s.ObjectID.cast(data["object"]),
%Activity{data: %{"actor" => actor}} <-
Activity.create_by_object_ap_id(object_id) |> Repo.one(),
# We have one, insert a tombstone and retry
%Activity{data: %{"actor" => actor}} <-
Activity.create_by_object_ap_id(object_id) |> Repo.one(),
# We have one, insert a tombstone and retry