projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'fix_1586_provide_index_md' 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 8443c284c11a8584d9d376c1e80d5a2e991ad7f6..1c60ef8f56047a3c16fc445d808b52612cab64b0 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",
@@
-662,6
+662,16
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
|> handle_incoming(options)
end
|> handle_incoming(options)
end
+ def handle_incoming(
+ %{"type" => "Create", "object" => %{"type" => "ChatMessage"}} = data,
+ _options
+ ) do
+ with {:ok, %User{}} <- ObjectValidator.fetch_actor(data),
+ {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do
+ {:ok, activity}
+ end
+ end
+
def handle_incoming(%{"type" => type} = data, _options)
when type in ["Like", "EmojiReact", "Announce"] do
with :ok <- ObjectValidator.fetch_actor_and_object(data),
def handle_incoming(%{"type" => type} = data, _options)
when type in ["Like", "EmojiReact", "Announce"] do
with :ok <- ObjectValidator.fetch_actor_and_object(data),
@@
-715,7
+725,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
@@
-1113,6
+1123,9
@@
defmodule Pleroma.Web.ActivityPub.Transmogrifier do
Map.put(object, "attributedTo", attributed_to)
end
Map.put(object, "attributedTo", attributed_to)
end
+ # TODO: Revisit this
+ def prepare_attachments(%{"type" => "ChatMessage"} = object), do: object
+
def prepare_attachments(object) do
attachments =
object
def prepare_attachments(object) do
attachments =
object