forked from AkkomaGang/akkoma
Insert string-hashtags in Pipeline
Cannot be done in Ecto schemas because only one type is allowed in arrays, and needs to be done before the MRFs.
This commit is contained in:
parent
5ae27c8451
commit
37a7f521fd
3 changed files with 24 additions and 24 deletions
|
@ -42,23 +42,33 @@ def common_pipeline(object, meta) do
|
|||
|
||||
def do_common_pipeline(%{__struct__: _}, _meta), do: {:error, :is_struct}
|
||||
|
||||
def do_common_pipeline(object, meta) do
|
||||
with {_, {:ok, validated_object, meta}} <-
|
||||
{:validate_object, @object_validator.validate(object, meta)},
|
||||
{_, {:ok, mrfd_object, meta}} <-
|
||||
{:mrf_object, @mrf.pipeline_filter(validated_object, meta)},
|
||||
{_, {:ok, activity, meta}} <-
|
||||
{:persist_object, @activity_pub.persist(mrfd_object, meta)},
|
||||
{_, {:ok, activity, meta}} <-
|
||||
{:execute_side_effects, @side_effects.handle(activity, meta)},
|
||||
{_, {:ok, _}} <- {:federation, maybe_federate(activity, meta)} do
|
||||
{:ok, activity, meta}
|
||||
def do_common_pipeline(message, meta) do
|
||||
with {_, {:ok, message, meta}} <- {:validate, @object_validator.validate(message, meta)},
|
||||
{_, {:ok, message, meta}} <- {:fixup, validation_fixups(message, meta)},
|
||||
{_, {:ok, message, meta}} <- {:mrf, @mrf.pipeline_filter(message, meta)},
|
||||
{_, {:ok, message, meta}} <- {:persist, @activity_pub.persist(message, meta)},
|
||||
{_, {:ok, message, meta}} <- {:side_effects, @side_effects.handle(message, meta)},
|
||||
{_, {:ok, _}} <- {:federation, maybe_federate(message, meta)} do
|
||||
{:ok, message, meta}
|
||||
else
|
||||
{:mrf_object, {:reject, message, _}} -> {:reject, message}
|
||||
{:mrf, {:reject, message, _}} -> {:reject, message}
|
||||
e -> {:error, e}
|
||||
end
|
||||
end
|
||||
|
||||
defp validation_fixups(message, meta) do
|
||||
# Insert copy of hashtags as strings for the non-hashtag table indexing
|
||||
message =
|
||||
if message["tag"] do
|
||||
tag = Object.hashtags(%Object{data: message}) ++ (message["tag"] || [])
|
||||
Map.put(message, "tag", tag)
|
||||
else
|
||||
message
|
||||
end
|
||||
|
||||
{:ok, message, meta}
|
||||
end
|
||||
|
||||
defp maybe_federate(%Object{}, _), do: {:ok, :not_federated}
|
||||
|
||||
defp maybe_federate(%Activity{} = activity, meta) do
|
||||
|
|
|
@ -564,7 +564,7 @@ def handle_incoming(
|
|||
Pipeline.common_pipeline(data, local: false) do
|
||||
{:ok, activity}
|
||||
else
|
||||
{:error, {:validate_object, _}} = e ->
|
||||
{:error, {:validate, _}} = e ->
|
||||
# Check if we have a create activity for this
|
||||
with {:ok, object_id} <- ObjectValidators.ObjectID.cast(data["object"]),
|
||||
%Activity{data: %{"actor" => actor}} <-
|
||||
|
|
|
@ -228,17 +228,7 @@ def favorite_helper(user, id) do
|
|||
{:find_object, _} ->
|
||||
{:error, :not_found}
|
||||
|
||||
{:common_pipeline,
|
||||
{
|
||||
:error,
|
||||
{
|
||||
:validate_object,
|
||||
{
|
||||
:error,
|
||||
changeset
|
||||
}
|
||||
}
|
||||
}} = e ->
|
||||
{:common_pipeline, {:error, {:validate, {:error, changeset}}}} = e ->
|
||||
if {:object, {"already liked by this actor", []}} in changeset.errors do
|
||||
{:ok, :already_liked}
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue