diff options
author | lain <lain@soykaf.club> | 2018-02-15 20:00:06 +0100 |
---|---|---|
committer | lain <lain@soykaf.club> | 2018-02-15 20:00:06 +0100 |
commit | ef0300889db32be5e781fd2fa3a59e2d94f5eccd (patch) | |
tree | 0327d5b88678ac5cecca73b7b9f8aa7508937460 /lib | |
parent | a15f57280034436d712d081f2f232b787c234d57 (diff) | |
download | pleroma-ef0300889db32be5e781fd2fa3a59e2d94f5eccd.tar.gz pleroma-ef0300889db32be5e781fd2fa3a59e2d94f5eccd.zip |
Transmogrifier: Handle basic notice creation.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex new file mode 100644 index 000000000..3e302f5b2 --- /dev/null +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -0,0 +1,44 @@ +defmodule Pleroma.Web.ActivityPub.Transmogrifier do + @moduledoc """ + A module to handle coding from internal to wire ActivityPub and back. + """ + alias Pleroma.User + alias Pleroma.Web.ActivityPub.ActivityPub + + @doc """ + Modifies an incoming AP object (mastodon format) to our internal format. + """ + def fix_object(object) do + object + |> Map.put("actor", object["attributedTo"]) + end + + # TODO: validate those with a Ecto scheme + # - tags + # - emoji + def handle_incoming(%{"type" => "Create", "object" => %{"type" => "Note"} = object} = data) do + with %User{} = user <- User.get_or_fetch_by_ap_id(data["actor"]) do + object = fix_object(data["object"]) + params = %{ + to: data["to"], + object: object, + actor: user, + context: data["object"]["conversation"], + local: false, + published: data["published"], + additional: Map.take(data, [ + "cc", + "id" + ]) + } + + ActivityPub.create(params) + else + _e -> :error + end + end + + def prepare_incoming(_) do + :error + end +end |