1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.ActivityPub.Transmogrifier.ChatMessageHandling do
7 alias Pleroma.Web.ActivityPub.ObjectValidator
8 alias Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator
9 alias Pleroma.Web.ActivityPub.ObjectValidators.CreateChatMessageValidator
10 alias Pleroma.Web.ActivityPub.Pipeline
13 %{"type" => "Create", "object" => %{"type" => "ChatMessage"} = object_data} = data,
16 with {_, {:ok, cast_data_sym}} <-
17 {:casting_data, data |> CreateChatMessageValidator.cast_and_apply()},
18 cast_data = ObjectValidator.stringify_keys(cast_data_sym),
19 {_, {:ok, object_cast_data_sym}} <-
20 {:casting_object_data, object_data |> ChatMessageValidator.cast_and_apply()},
21 object_cast_data = ObjectValidator.stringify_keys(object_cast_data_sym),
22 {_, {:ok, validated_object, _meta}} <-
23 {:validate_object, ObjectValidator.validate(object_cast_data, %{})},
24 {_, {:ok, _created_object}} <- {:persist_object, Object.create(validated_object)},
25 {_, {:ok, activity, _meta}} <-
26 {:common_pipeline, Pipeline.common_pipeline(cast_data, local: false)} do